6.4. リファレンス設定の作成
クラスターの設定リソースを検証するためのリファレンス設定を指定します。
6.4.1. metadata.yaml ファイルの構造 リンクのコピーリンクがクリップボードにコピーされました!
metadata.yaml
ファイルは、リファレンス設定のテンプレートを一元的に定義および設定するため場所です。このファイルには、parts
と components
という階層が含まれています。parts
は components
のグループであり、components
はテンプレートのグループです。各コンポーネントで、テンプレートの依存関係、検証ルールを設定し、説明的なメタデータを追加できます。
metadata.yaml ファイルの例
6.4.2. テンプレートの関係の設定 リンクのコピーリンクがクリップボードにコピーされました!
リファレンス設定でテンプレート間の関係を定義することで、複雑な依存関係を伴うユースケースに対応できます。たとえば、特定のテンプレートを要求するコンポーネントを設定したり、グループから 1 つのテンプレートを要求するコンポーネントを設定したり、グループからのすべてのテンプレートを許可するコンポーネントを設定できます。
手順
ユースケースに合わせて
metadata.yaml
ファイルを作成します。例として次の構造を使用します。metadata.yaml ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 必要なテンプレートを指定します。
- 2
- すべて必須またはすべて任意のテンプレートのグループを指定します。クラスター内に対応するカスタムリソース (CR) が 1 つ存在する場合、クラスター内に対応するすべての CR が存在する必要があります。
- 3
- 任意のテンプレートを指定します。
- 4
- 除外するテンプレートを指定します。対応する CR がクラスター内に存在する場合、プラグインが検証エラーを返します。
- 5
- 1 つだけ存在できるテンプレートを指定します。対応する CR がクラスター内に存在する場合、または 1 つ以上存在する場合、プラグインが検証エラーを返します。
- 6
- クラスター内に 1 つだけ存在できるテンプレートを指定します。対応する CR がクラスター内に複数存在する場合、プラグインが検証エラーを返します。
6.4.3. テンプレートで想定内の差異を設定する リンクのコピーリンクがクリップボードにコピーされました!
Golang テンプレート構文を使用すると、テンプレート内の可変的な内容を処理できます。この構文を使用すると、テンプレート内の任意、必須、および条件付きの内容を処理する検証ロジックを設定できます。
-
cluster-compare
プラグインでは、すべてのテンプレートを有効な YAML としてレンダリングする必要があります。フィールドの欠落による解析エラーを回避するには、テンプレート構文を実装するときに{{- if .spec.<optional_field> }}
などの条件付きテンプレート構文を使用してください。このような条件付きロジックを使用すると、テンプレートでフィールドの欠落が適切に処理され、有効な YAML 形式が維持されます。 - 複雑なユースケースの場合は、カスタム関数と組み込み関数を使用した Golang テンプレート構文を使用できます。Sprig ライブラリーの関数を含むすべての Golang 組み込み関数がサポートされています。
6.4.4. テンプレートフィールドを除外するための metadata.yaml ファイルの設定 リンクのコピーリンクがクリップボードにコピーされました!
比較からフィールドを除外するように metadata.yaml
ファイルを設定できます。クラスター設定に関係のないアノテーションやラベルなど、比較に関係のないフィールドは除外します。
次の方法で、metadata.yaml
ファイルで除外を設定できます。
- テンプレートで指定されていないカスタムリソース内のすべてのフィールドを除外する。
pathToKey
フィールドを使用して定義した特定のフィールドを除外する。注記pathToKey
はドットで区切りのパスです。ピリオドを含むキー値をエスケープするには、引用符を使用してください。
6.4.4.1. テンプレートで指定されていないすべてのフィールドを除外する リンクのコピーリンクがクリップボードにコピーされました!
比較プロセス中に、cluster-compare
プラグインは、対応するカスタムリソース (CR) のフィールドをマージしてテンプレートをレンダリングします。ignore-unspecified-fields
を true
に設定すると、CR に存在するがテンプレートには存在しないすべてのフィールドがマージから除外されます。テンプレートで指定したフィールドのみを比較対象にする場合は、この方法を使用します。
手順
ユースケースに合わせて
metadata.yaml
ファイルを作成します。例として次の構造を使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
true
を指定して、対応するnamespace.yaml
テンプレートで明示的に設定されていない CR 内のすべてのフィールドを比較から除外します。
6.4.4.2. デフォルトの除外フィールドを設定して特定のフィールドを除外する リンクのコピーリンクがクリップボードにコピーされました!
defaultOmitRef
フィールドの fieldsToOmitRefs
のデフォルト値を定義することで、フィールドを除外できます。このデフォルトの除外は、特定のテンプレートの config.fieldsToOmitRefs
フィールドによってオーバーライドされない限り、すべてのテンプレートに適用されます。
6.4.4.3. 特定のフィールドを除外する リンクのコピーリンクがクリップボードにコピーされました!
フィールドへのパスを定義し、テンプレートの config
セクションでその定義を参照することで、除外するフィールドを指定できます。
6.4.4.4. デフォルトの除外グループを設定して特定のフィールドを除外する リンクのコピーリンクがクリップボードにコピーされました!
除外するフィールドのデフォルトグループを作成できます。除外グループは、除外を定義するときに重複を避けるために、別のグループを参照できます。
手順
ユースケースに合わせて
metadata.yaml
ファイルを作成します。例として次の構造を使用します。metadata.yaml ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
common
グループがデフォルトグループに含まれます。
6.4.5. テンプレートフィールドのインライン検証の設定 リンクのコピーリンクがクリップボードにコピーされました!
特に Golang テンプレート構文のメンテナンスが困難な場合や複雑すぎる場合は、インライン正規表現を有効にしてテンプレートフィールドを検証できます。インライン正規表現を使用すると、テンプレートが簡素化され、可読性が向上し、より高度な検証ロジックが可能になります。
cluster-compare
プラグインには、インライン検証用の 2 つの関数があります。
-
regex
: 正規表現を使用してフィールドの内容を検証します。 -
capturegroups
: キャプチャーグループ以外のテキストを完全一致として処理し、名前付きキャプチャーグループ内でのみ正規表現マッチングを適用し、繰り返しキャプチャーグループの一貫性を確保することで、マルチラインテキストの比較を強化します。
6.4.5.1. 正規表現関数を使用したインライン検証の設定 リンクのコピーリンクがクリップボードにコピーされました!
正規表現を使用してフィールドを検証するには、regex
インライン関数を使用します。
6.4.5.2. キャプチャーグループ関数を使用したインライン検証の設定 リンクのコピーリンクがクリップボードにコピーされました!
マルチライン文字列を含むフィールドをより正確に検証するには、capturegroups
インライン関数を使用します。
6.4.6. 出力の説明の設定 リンクのコピーリンクがクリップボードにコピーされました!
各パーツ、コンポーネント、またはテンプレートに、追加のコンテキスト、手順、またはドキュメントリンクを提供するための説明を含めることができます。これらの説明は、特定のテンプレートまたは構造が必要な理由を伝えるのに役立ちます。
手順
ユースケースに合わせて
metadata.yaml
ファイルを作成します。例として次の構造を使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow