OpenShift - oc-mirror - list releases

#### oc-mirror

OpenShift をインターネット非接続環境に導入 (disconnected installation) する際に、oc-mirror plugin が利用できます。

https://docs.redhat.com/ja/documentation/openshift_container_platform/4.16/html/installing/installing-mirroring-disconnected#installation-oc-mirror-about_installing-mirroring-disconnected

> oc-mirror OpenShift CLI(oc) プラグインを使用すると、単一のツールを使用して、必要なすべての OpenShift Container Platform コンテンツおよびその他のイメージをミラーレジストリーにミラーリングできます。次の機能を提供します。
> - OpenShift Container Platform のリリース、Operator、ヘルムチャート、およびその他のイメージをミラーリングするための一元化された方法を提供します。
> - OpenShift Container Platform および Operator の更新パスを維持します。
> - 宣言型イメージセット設定ファイルを使用して、クラスターに必要な OpenShift Container Platform リリース、Operator、およびイメージのみを含めます。
> - 将来のイメージセットのサイズを縮小するインクリメンタルミラーリングを実行します。
> - 前回の実行以降にイメージセット設定から除外されたターゲットミラーレジストリーからのイメージをプルーニングします。
> - オプションで、OpenShift Update Service (OSUS) を使用する際のサポートアーティファクトを生成します。 

ここでは、oc-mirror の機能の1つである、list releases（OpenShift のリリース情報の取得）をご紹介します。

#### Setup

OpenShift Cluster Manager の下記ページから `OpenShift Client (oc) mirror plugin` (oc-mirror) をダウンロードします。

https://console.redhat.com/openshift/downloads

ダウンロードしたファイルを、以下の要領で配置します。
```shell
$ tar xvzf oc-mirror.tar.gz
$ chmod +x oc-mirror
$ mv oc-mirror /usr/local/bin/.
$ which oc-mirror
/usr/local/bin/oc-mirror
```

以下のように実行できれば、使用可能です。
```shell
$ oc-mirror version --output json
{
  "clientVersion": {
    "major": "",
    "minor": "",
    "gitVersion": "4.16.0-202407100906.p0.g75da281.assembly.stream.el9-75da281",
    "gitCommit": "75da281989a147ead237e738507bbd8cec3175e5",
    "gitTreeState": "clean",
    "buildDate": "2024-07-10T09:46:55Z",
    "goVersion": "go1.21.11 (Red Hat 1.21.11-1.module+el8.10.0+21986+2112108a) X:strictfipsruntime",
    "compiler": "gc",
    "platform": "linux/amd64"
  }
}
```

`oc mirror` (oc の mirror サブコマンド）でも実行可能で、公式マニュアルではこちらを使用しています。
```shell
oc mirror version --output json
{
  "clientVersion": {
    "major": "",
    "minor": "",
    "gitVersion": "4.16.0-202407100906.p0.g75da281.assembly.stream.el9-75da281",
    "gitCommit": "75da281989a147ead237e738507bbd8cec3175e5",
    "gitTreeState": "clean",
    "buildDate": "2024-07-10T09:46:55Z",
    "goVersion": "go1.21.11 (Red Hat 1.21.11-1.module+el8.10.0+21986+2112108a) X:strictfipsruntime",
    "compiler": "gc",
    "platform": "linux/amd64"
  }
}
```

#### list releases
`list releases` を使用してみます。
```shell
$ oc mirror list --help
List available platform and operator content and their versions.

Usage:
  oc-mirror list [flags]
  oc-mirror list [command]

Available Commands:
  operators   List available operator catalog content and versions
  releases    List available platform content and versions
  updates     List available updates in upgrade graph from upstream sources.

Flags:
  -h, --help   help for list

Global Flags:
  -v, --verbose int   Number for the log level verbosity (valid 1-9, default is 0)

Use "oc-mirror list [command] --help" for more information about a command.
```
```shell
$ oc mirror list releases --help
List available platform content and versions

Usage:
  oc-mirror list releases [flags]

Examples:
  # Output OpenShift release versions
  oc-mirror list releases

  # Output all OpenShift release channels list for a release
  oc-mirror list releases --version=4.8

  # List all OpenShift versions in a specified channel
  oc-mirror list releases --channel=stable-4.8

  # List all OpenShift channels for a specific version
  oc-mirror list releases --channels --version=4.8

  # List OpenShift channels for a specific version and one or more release architecture. Valid architectures: amd64 (default), arm64, ppc64le, s390x, multi.
  oc-mirror list releases --channels --version=4.13 --filter-by-archs amd64,arm64,ppc64le,s390x,multi

Flags:
      --channel string            List information for a specified channel
      --channels                  List all channel information
      --filter-by-archs strings   An architecture list to control the release image picked when multiple variants are available
  -h, --help                      help for releases
  -v, --verbose int               Number for the log level verbosity (valid 1-9, default is 0)
      --version string            Specify an OpenShift release version
```

OpenShift Container Platform (OCP) の release 一覧を取得します。
```shell
$ oc mirror list releases
Available OpenShift Container Platform release versions:
  4.0
  4.1
  4.2
  4.3
  4.4
  4.5
  4.6
  4.7
  4.8
  4.9
  4.10
  4.11
  4.12
  4.13
  4.14
  4.15
  4.16
  4.17
```
  `4.16` を指定して、4.16 内の release 一覧を取得してみます。Default では、`channel` に `stable` が、`architecture` に `amd64` が設定されます。
```shell
$ oc mirror list releases --version=4.16
Listing stable channels. Use --channel=<channel-name> to filter.
Use oc-mirror list release --channels to discover other channels.

Channel: stable-4.16
Architecture: amd64
4.15.0
4.15.2
4.15.3
4.15.5
4.15.6
4.15.8
4.15.9
4.15.10
4.15.11
4.15.12
4.15.13
4.15.14
4.15.15
4.15.16
4.15.17
4.15.18
4.15.19
4.15.20
4.15.21
4.15.22
4.16.0
4.16.1
4.16.2
4.16.3
4.16.4
```
channel 一覧を取得します。
```shell
$ oc mirror list releases --channels --version=4.16
Listing channels for version 4.16.

candidate-4.15
fast-4.15
stable-4.15
candidate-4.16
eus-4.16
fast-4.16
stable-4.16
candidate-4.17
```
`candidate-4.16` の release 一覧を取得してみます。
```shell
$ oc mirror list releases --version=4.16 --channel=candidate-4.16
Channel: candidate-4.16
Architecture: amd64
4.15.0-ec.0
4.15.0-ec.1
4.15.0-ec.2
4.15.0-ec.3
4.15.0-rc.0
4.15.0-rc.1
4.15.0-rc.2
4.15.0-rc.3
4.15.0-rc.4
4.15.0-rc.5
4.15.0-rc.7
4.15.0-rc.8
4.15.0
4.15.2
4.15.3
4.15.5
4.15.6
4.15.7
4.15.8
4.15.9
4.15.10
4.15.11
4.15.12
4.15.13
4.15.14
4.15.15
4.15.16
4.15.17
4.15.18
4.15.19
4.15.20
4.15.21
4.15.22
4.15.23
4.15.24
4.16.0-ec.0
4.16.0-ec.1
4.16.0-ec.2
4.16.0-ec.3
4.16.0-ec.4
4.16.0-ec.5
4.16.0-ec.6
4.16.0-rc.0
4.16.0-rc.1
4.16.0-rc.2
4.16.0-rc.3
4.16.0-rc.4
4.16.0-rc.5
4.16.0-rc.6
4.16.0-rc.9
4.16.0
4.16.1
4.16.2
4.16.3
4.16.4
4.16.5
```
`--filter-by-archs` に `ppc64le,s390x` を指定してみます。
```shell
$ oc mirror list releases --version=4.16 --channel=candidate-4.16 --filter-by-archs ppc64le,s390x
Channel: candidate-4.16
Architecture: ppc64le
4.15.0-ec.0
4.15.0-ec.1
4.15.0-ec.2
4.15.0-ec.3
4.15.0-rc.0
4.15.0-rc.1
4.15.0-rc.2
4.15.0-rc.3
4.15.0-rc.4
4.15.0-rc.5
4.15.0-rc.7
4.15.0-rc.8
4.15.0
4.15.2
4.15.3
4.15.5
4.15.6
4.15.7
4.15.8
4.15.9
4.15.10
4.15.11
4.15.12
4.15.13
4.15.14
4.15.15
4.15.16
4.15.17
4.15.18
4.15.19
4.15.20
4.15.21
4.15.22
4.15.23
4.15.24
4.16.0-ec.0
4.16.0-ec.1
4.16.0-ec.2
4.16.0-ec.3
4.16.0-ec.4
4.16.0-ec.5
4.16.0-ec.6
4.16.0-rc.0
4.16.0-rc.1
4.16.0-rc.2
4.16.0-rc.3
4.16.0-rc.4
4.16.0-rc.5
4.16.0-rc.6
4.16.0-rc.9
4.16.0
4.16.1
4.16.2
4.16.3
4.16.4
4.16.5
Channel: candidate-4.16
Architecture: s390x
4.15.0-ec.0
4.15.0-ec.1
4.15.0-ec.2
4.15.0-ec.3
4.15.0-rc.0
4.15.0-rc.1
4.15.0-rc.2
4.15.0-rc.3
4.15.0-rc.4
4.15.0-rc.5
4.15.0-rc.7
4.15.0-rc.8
4.15.0
4.15.2
4.15.3
4.15.5
4.15.6
4.15.7
4.15.8
4.15.9
4.15.10
4.15.11
4.15.12
4.15.13
4.15.14
4.15.15
4.15.16
4.15.17
4.15.18
4.15.19
4.15.20
4.15.21
4.15.22
4.15.23
4.15.24
4.16.0-ec.0
4.16.0-ec.1
4.16.0-ec.2
4.16.0-ec.3
4.16.0-ec.4
4.16.0-ec.5
4.16.0-ec.6
4.16.0-rc.0
4.16.0-rc.1
4.16.0-rc.2
4.16.0-rc.3
4.16.0-rc.4
4.16.0-rc.5
4.16.0-rc.6
4.16.0-rc.9
4.16.0
4.16.1
4.16.2
4.16.3
4.16.4
4.16.5
```

このように、非常に簡単に OCP release の各種情報を取得することが出来ます。