5.11. Operator バンドルの検証

Operator の作成者は、Operator SDK で bundle validate コマンドを実行して Operator バンドルのコンテンツおよび形式を検証できます。リモート Operator バンドルイメージまたはローカル Operator バンドルディレクトリーでコマンドを実行できます。

5.11.1. bundle validate コマンドについて

Operator SDK scorecard コマンドは設定ファイルおよびテストイメージに基づいて Operator でテストを実行できますが、bundle validate サブコマンドは、ローカルバンドルディレクトリーおよびリモートバンドルイメージのコンテンツおよび構造を検証できます。

bundle validate コマンドの構文

$ operator-sdk bundle validate <bundle_dir_or_image> <flags>

注記

bundle validate コマンドは、make bundle コマンドを使用してバンドルをビルドすると自動的に実行されます。

バンドルイメージはリモートレジストリーからプルされ、検証前にローカルにビルドされます。ローカルバンドルディレクトリーには Operator メタデータおよびマニフェストが含まれている必要があります。バンドルメタデータとマニフェストには、以下のバンドルレイアウトと同様の構造が必要です。

バンドルレイアウトの例

./bundle
  ├── manifests
  │   ├── cache.my.domain_memcacheds.yaml
  │   └── memcached-operator.clusterserviceversion.yaml
  └── metadata
      └── annotations.yaml

エラーが検出されない場合、バンドルテストは検証に合格し、終了コード 0 で終了します。

出力例

INFO[0000] All validation tests have completed successfully

エラーが検出されると、テストは検証に失敗し、終了コード 1 で終了します。

出力例

ERRO[0000] Error: Value cache.example.com/v1alpha1, Kind=Memcached: CRD "cache.example.com/v1alpha1, Kind=Memcached" is present in bundle "" but not defined in CSV

警告が含まれるバンドルテストは、エラーが検出されていない限り、終了コード 0 で検証を終了すことができます。テストはエラーが発生した場合にのみ失敗します。

出力例

WARN[0000] Warning: Value : (memcached-operator.v0.0.1) annotations not found
INFO[0000] All validation tests have completed successfully

bundle validate サブコマンドについての詳細を確認するには、以下のコマンドを実行してください。

$ operator-sdk bundle validate -h

5.11.2. ビルトインのバンドル検証テスト

Operator SDK には、スイートに編成された事前定義済みのバリデーターが同梱されています。バリデーターを指定せずに bundle validate コマンドを実行すると、デフォルトのテストが実行されます。デフォルトテストは、バンドルが Operator Framework コミュニティーによって定義された仕様に準拠していることを確認します。詳細は、Bundle format を参照してください。

OperatorHub の互換性や非推奨の Kubernetes API などの問題の有無をテストするために、オプションのバリデーターを実行できます。オプションバリデーターは、必ずデフォルトのテストに追加して実行されます。

オプションのテストスイートの bundle validate コマンドの構文

$ operator-sdk bundle validate <bundle_dir_or_image>
  --select-optional <test_label>

表5.18 追加の bundle validate バリデーター

名前説明ラベル

Operator Framework

このバリデーターは、Operator Framework によって提供されるバリデーターのスイート全体に対して Operator バンドルをテストします。

suite=operatorframework

OperatorHub

このバリデーターは、OperatorHub との互換性に関して、Operator バンドルをテストします。

name=operatorhub

Good Practices

このバリデーターは、Operator バンドルが Operator Framework で定義されるグッドプラクティスに準拠するかどうかをテストします。これは、空の CRD 記述またはサポート対象外の Operator Lifecycle Manager (OLM) リソースなどの問題の有無をチェックします。

name=good-practices

関連情報

5.11.3. bundle validate コマンドの実行

デフォルトのバリデーターは、bundle validate コマンドを実行するたびにテストを実行します。オプションのバリデーターは、--select-optional フラグを使用して実行できます。オプションバリデーターは、デフォルトのテストに追加してテストを実行します。

前提条件

  • Operator プロジェクトが Operator SDK を使用して生成されていること。

手順

  1. ローカルバンドルディレクトリーに対してデフォルトのバリデーターを実行する場合は、Operator プロジェクトディレクトリーから以下のコマンドを入力します。

    $ operator-sdk bundle validate ./bundle
  2. リモート Operator バンドルイメージに対してデフォルトのバリデーターを実行する必要がある場合は、以下のコマンドを入力します。

    $ operator-sdk bundle validate \
      <bundle_registry>/<bundle_image_name>:<tag>

    ここでは、以下のようになります。

    <bundle_registry>
    バンドルがホストされるレジストリーを指定します (例: quay.io/example)。
    <bundle_image_name>
    バンドルイメージの名前を指定します (例: memcached-operator)。
    <tag>

    v1.25.4 などのバンドルイメージのタグを指定します。

    注記

    Operator バンドルイメージを検証する必要がある場合は、イメージをリモートレジストリーでホストする必要があります。Operator SDK はイメージをプルし、テストを実行する前にこれをローカルにビルドします。bundle validate コマンドは、ローカルバンドルイメージのテストをサポートしません。

  3. Operator バンドルに対して追加のバリデーターを実行する必要がある場合は、以下のコマンドを入力します。

    $ operator-sdk bundle validate \
      <bundle_dir_or_image> \
      --select-optional <test_label>

    ここでは、以下のようになります。

    <bundle_dir_or_image>
    ~/projects/memcached または quay.io/example/memcached-operator:v1.25.4 などのローカルバンドルディレクトリーまたはリモートバンドルイメージを指定します。
    <test_label>

    実行するバリデーターの名前を指定します (例: name=good-practices)。

    出力例

    ERRO[0000] Error: Value apiextensions.k8s.io/v1, Kind=CustomResource: unsupported media type registry+v1 for bundle object
    WARN[0000] Warning: Value k8sevent.v0.0.1: owned CRD "k8sevents.k8s.k8sevent.com" has an empty description