6.4.3. テンプレートで想定内の差異を設定する
Golang テンプレート構文を使用すると、テンプレート内の可変的な内容を処理できます。この構文を使用すると、テンプレート内の任意、必須、および条件付きの内容を処理する検証ロジックを設定できます。
-
cluster-compareプラグインでは、すべてのテンプレートを有効な YAML としてレンダリングする必要があります。フィールドの欠落による解析エラーを回避するには、テンプレート構文を実装するときに{{- if .spec.<optional_field> }}などの条件付きテンプレート構文を使用してください。このような条件付きロジックを使用すると、テンプレートでフィールドの欠落が適切に処理され、有効な YAML 形式が維持されます。 - 複雑なユースケースの場合は、カスタム関数と組み込み関数を使用した Golang テンプレート構文を使用できます。Sprig ライブラリーの関数を含むすべての Golang 組み込み関数がサポートされています。
手順
ユースケースに合わせて
metadata.yamlファイルを作成します。例として次の構造を使用します。apiVersion: v2 kind: Service metadata: name: frontend1 namespace: {{ .metadata.namespace }}2 labels: app: guestbook tier: frontend spec: {{- if and .spec.type (eq (.spec.type) "NodePort" "LoadBalancer") }} type: {{.spec.type }}3 {{- else }} type: should be NodePort or LoadBalancer {{- end }} ports: - port: 80 selector: app: guestbook {{- if .spec.selector.tier }}4 tier: frontend {{- end }}
6.4.3.1. リファレンステンプレート関数 リンクのコピーリンクがクリップボードにコピーされました!
cluster-compare プラグインは、env 関数と expandenv 関数を除くすべての sprig ライブラリー関数をサポートします。sprig ライブラリー関数の完全なリストは、「Sprig Function Documentation」を参照してください。
次の表は、cluster-compare プラグインの追加のテンプレート関数を説明しています。
| 機能 | 説明 | 例 |
|---|---|---|
|
| 受信した文字列を構造化 JSON オブジェクトとして解析します。 |
|
|
| 受信した文字列を構造化 JSON 配列として解析します。 |
|
|
| 受信した文字列を構造化 YAML オブジェクトとして解析します。 |
|
|
| 受信した文字列を構造化 YAML 配列として解析します。 |
|
|
| オブジェクトタイプを保持しながら、受信したデータを JSON 形式でレンダリングします。 |
|
|
| 受信した文字列を構造化 TOML データとしてレンダリングします。 |
|
|
| オブジェクトタイプを保持しながら、受信したデータを YAML 形式でレンダリングします。 |
単純なスカラー値の場合:
リストまたはディクショナリーの場合: |
|
|
通常はマッチするテンプレートでも、クラスターリソースとマッチしないようにします。テンプレート内でこの関数を使用すると、条件に応じて特定のリソースを相関付けから除外できます。
この関数は、テンプレートで固定の名前または namespace が指定されていない場合に特に便利です。このような場合、 |
|
|
|
指定されたパラメーターにマッチするオブジェクトの配列を返します。たとえば、
| - |
|
|
パラメーターにマッチする単一のオブジェクトを返します。複数のオブジェクトがマッチする場合、この関数は何も返しません。この関数は | - |
次の例は、lookupCRs 関数を使用して、マッチする複数のリソースから値を取得してレンダリングする方法を示しています。
lookupCRs を使用した config map の例
kind: ConfigMap
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-settings
namespace: kubernetes-dashboard
data:
dashboard: {{ index (lookupCR "apps/v1" "Deployment" "kubernetes-dashboard" "kubernetes-dashboard") "metadata" "name" \| toYaml }}
metrics: {{ (lookupCR "apps/v1" "Deployment" "kubernetes-dashboard" "dashboard-metrics-scraper").metadata.name \| toYaml }}
次の例は、lookupCR 関数を使用して、マッチする単一のリソースから特定の値を取得して使用する方法を示しています。
lookupCR を使用した config map の例
kind: ConfigMap
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-settings
namespace: kubernetes-dashboard
data:
{{- $objlist := lookupCRs "apps/v1" "Deployment" "kubernetes-dashboard" "*" }}
{{- $dashboardName := "unknown" }}
{{- $metricsName := "unknown" }}
{{- range $obj := $objlist }}
{{- $appname := index $obj "metadata" "labels" "k8s-app" }}
{{- if contains "metrics" $appname }}
{{- $metricsName = $obj.metadata.name }}
{{- end }}
{{- if eq "kubernetes-dashboard" $appname }}
{{- $dashboardName = $obj.metadata.name }}
{{- end }}
{{- end }}
dashboard: {{ $dashboardName }}
metrics: {{ $metricsName }}