5.10. スコアカードツールを使用した Operator の検証
Operator の作成者は、Operator SDK でスコアカードツールを使用して以下のタスクを実行できます。
- Operator プロジェクトに構文エラーがなく、正しくパッケージ化されていることを確認します。
- Operator を強化する方法についての提案を確認します。
5.10.1. スコアカードツールについて リンクのコピーリンクがクリップボードにコピーされました!
Operator SDK bundle validate サブコマンドは、コンテンツおよび構造のローカルバンドルディレクトリーおよびリモートバンドルイメージを検証することができますが、scorecard コマンドを使用して設定ファイルおよびテストイメージに基づいて Operator でテストを実行できます。これらのテストは、スコアカードによって実行されるよう設定され、ビルドされるテストイメージ内に実装されます。
スコアカードは、OpenShift Container Platform などの設定済みの Kubernetes クラスターへのアクセスと共に実行されることを前提とします。スコアカードは Pod 内で各テストを実行します。これにより Pod ログが集計され、テスト結果はコンソールに送信されます。スコアカードにはビルトインの基本的なテストおよび Operator Lifecycle Manager (OLM) テストがあり、カスタムテスト定義を実行する手段も提供します。
スコアカードのワークフロー
- 関連するカスタムリソース (CR) および Operator に必要なすべてのリソースを作成する
- プロキシーコンテナーを Operator のデプロイメントに作成し、API サーバーへの呼び出しを記録してテストを実行する
- CR のパラメーターを検査する
スコアカードテストは、テスト中の Operator の状態を想定しません。Operator の作成および Operator の CR の作成は、スコアカード自体では扱っていません。ただし、スコアカードテストは、テストがリソース作成用に設計されている場合は、必要なリソースをなんでも作成できます。
scorecard コマンド構文
operator-sdk scorecard <bundle_dir_or_image> [flags]
$ operator-sdk scorecard <bundle_dir_or_image> [flags]
スコアカードには、Operator バンドルへのディスク上のパスまたはバンドルイメージの名前のいずれかの位置引数が必要です。
フラグの詳細は、以下を実行します。
operator-sdk scorecard -h
$ operator-sdk scorecard -h
5.10.2. スコアカードの設定 リンクのコピーリンクがクリップボードにコピーされました!
スコアカードツールでは、内部プラグインの設定を可能にする設定と、複数のグローバル設定オプションを使用します。テストは、config.yaml という名前の設定ファイルによって実行されます。これは、bundle/ ディレクトリーにある make bundle コマンドによって生成されます。
./bundle
...
└── tests
└── scorecard
└── config.yaml
./bundle
...
└── tests
└── scorecard
└── config.yaml
スコアカード設定ファイルの例
設定ファイルは、スコアカードが実行可能な各テストを定義します。スコアカード設定ファイルの以下のフィールドは、以下のようにテストを定義します。
| 設定フィールド | 説明 |
|---|---|
|
| テストを実装するコンテナーイメージ名のテスト |
|
| テストを実行するために、テストイメージで呼び出されるコマンドおよび引数 |
|
| 実行するテストを選択するスコアカードで定義されたラベルまたはカスタムラベル |
5.10.3. ビルトインスコアカードのテスト リンクのコピーリンクがクリップボードにコピーされました!
スコアカードには、スイート (基本的なテストスイートおよび Operator Lifecycle Manager (OLM) スイート) に編成される事前に定義されたテストが同梱されます。
| テスト | 説明 | 短縮名 |
|---|---|---|
| Spec Block Exists |
このテストは、クラスターで作成されたカスタムリソース (CR) をチェックし、すべての CR に |
|
| テスト | 説明 | 短縮名 |
|---|---|---|
| Bundle Validation | このテストは、スコアカードに渡されるバンドルにあるバンドルマニフェストを検証します。バンドルの内容にエラーが含まれる場合、テスト結果の出力には検証ログと検証ライブラリーからのエラーメッセージが含まれます。 |
|
| Provided APIs Have Validation |
このテストは、提供された CR のカスタムリソース定義 (CRD) に検証セクションが含まれ、CR で検出される各 |
|
| Owned CRDs Have Resources Listed |
このテストでは、 |
|
| Spec Fields With Descriptors |
このテストは、CR の |
|
| Status Fields With Descriptors |
このテストは、CR の |
|
5.10.4. スコアカードツールの実行 リンクのコピーリンクがクリップボードにコピーされました!
Kustomize ファイルのデフォルトセットは、init コマンドの実行後に Operator SDK によって生成されます。生成されるデフォルトの bundle/tests/scorecard/config.yaml ファイルは、Operator に対してスコアカードツールを実行するためにすぐに使用できます。または、このファイルをテスト仕様に変更することができます。
前提条件
- Operator プロジェクトが Operator SDK を使用して生成されていること。
手順
Operator のバンドルマニフェストおよびメタデータを生成または再生成します。
make bundle
$ make bundleCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、テストを実行するために
scorecardコマンドが使用するバンドルメタデータに、スコアカードアノテーションを自動的に追加します。Operator バンドルへのディスク上のパスまたはバンドルイメージの名前に対してスコアカードを実行します。
operator-sdk scorecard <bundle_dir_or_image>
$ operator-sdk scorecard <bundle_dir_or_image>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.5. スコアカードの出力 リンクのコピーリンクがクリップボードにコピーされました!
scorecard コマンドの --output フラグは、スコアカード結果の出力形式 (text または json) を指定します。
例5.15 JSON 出力スニペットの例
例5.16 テキスト出力スニペットの例
出力形式仕様は Test タイプのレイアウトに一致します。
5.10.6. テストの選択 リンクのコピーリンクがクリップボードにコピーされました!
スコアカードテストは、--selector CLI フラグをラベル文字列のセットに設定して選択されます。セレクターフラグが指定されていない場合は、スコアカード設定ファイル内のすべてのテストが実行されます。
テストは、テスト結果がスコアカードによって集計され、標準出力 (stdout) に書き込まれる形で連続的に実行されます。
手順
basic-check-spec-testなどの単一のテストを選択するには、--selectorフラグを使用してテストを指定します。operator-sdk scorecard <bundle_dir_or_image> \ -o text \ --selector=test=basic-check-spec-test$ operator-sdk scorecard <bundle_dir_or_image> \ -o text \ --selector=test=basic-check-spec-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow テストのスイートを選択するには (例:
olm)、すべての OLM テストで使用されるラベルを指定します。operator-sdk scorecard <bundle_dir_or_image> \ -o text \ --selector=suite=olm$ operator-sdk scorecard <bundle_dir_or_image> \ -o text \ --selector=suite=olmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 複数のテストを選択するには、以下の構文を使用して
selectorフラグを使用し、テスト名を指定します。operator-sdk scorecard <bundle_dir_or_image> \ -o text \ --selector='test in (basic-check-spec-test,olm-bundle-validation-test)'$ operator-sdk scorecard <bundle_dir_or_image> \ -o text \ --selector='test in (basic-check-spec-test,olm-bundle-validation-test)'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.7. 並列テストの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Operator の作成者は、スコアカード設定ファイルを使用して、テスト用の個別のステージを定義できます。ステージは、設定ファイルで定義されている順序で順次実行します。ステージには、テストのリストと設定可能な parallel 設定が含まれます。
デフォルトで、またはステージが明示的に parallel を false に設定する場合は、ステージのテストは、設定ファイルで定義されている順序で順次実行されます。テストを一度に 1 つずつ実行することは、2 つのテストが対話したり、互いに競合したりしないことを保証する際に役立ちます。
ただし、テストが完全に分離されるように設計されている場合は、並列化することができます。
手順
分離されたテストのセットを並行して実行するには、これらを同じステージに追加して、
parallelをtrueに設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 並列テストを有効にします。
並列ステージのすべてのテストは同時に実行され、スコアカードはすべてが完了するのを待ってから次のステージへ進みます。これにより、非常に迅速にテストが実行されます。
5.10.8. カスタムスコアカードのテスト リンクのコピーリンクがクリップボードにコピーされました!
スコアカードツールは、以下の義務付けられた規則に従うカスタムテストを実行できます。
- テストはコンテナーイメージ内に実装されます。
- テストは、コマンドおよび引数を含むエントリーポイントを受け入れます。
-
テストは、テスト出力に不要なロギングがない JSON 形式で、
v1alpha3スコアカード出力を生成します。 -
テストは、
/bundleの共有マウントポイントでバンドルコンテンツを取得できます。 - テストは、クラスター内のクライアント接続を使用して Kubernetes API にアクセスできます。
テストイメージが上記のガイドラインに従う場合は、他のプログラミング言語でカスタムテストを作成することができます。
以下の例は、Go で書かれたカスタムテストイメージを示しています。
例5.17 カスタムスコアカードテストの例