6.4.3. テンプレートで想定内の差異を設定する


Golang テンプレート構文を使用すると、テンプレート内の可変的な内容を処理できます。この構文を使用すると、テンプレート内の任意、必須、および条件付きの内容を処理する検証ロジックを設定できます。

注記
  • cluster-compare プラグインでは、すべてのテンプレートを有効な YAML としてレンダリングする必要があります。フィールドの欠落による解析エラーを回避するには、テンプレート構文を実装するときに {{- if .spec.<optional_field> }} などの条件付きテンプレート構文を使用してください。このような条件付きロジックを使用すると、テンプレートでフィールドの欠落が適切に処理され、有効な YAML 形式が維持されます。
  • 複雑なユースケースの場合は、カスタム関数と組み込み関数を使用した Golang テンプレート構文を使用できます。Sprig ライブラリーの関数を含むすべての Golang 組み込み関数がサポートされています。

手順

  • ユースケースに合わせて metadata.yaml ファイルを作成します。例として次の構造を使用します。

    apiVersion: v2
    kind: Service
    metadata:
      name: frontend 
    1
    
      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 }}
    1
    指定の値と一致する必要がある必須フィールドを設定します。
    2
    任意の値を持つことができる必須フィールドを設定します。
    3
    .spec.type フィールドの検証を設定します。
    4
    任意のフィールドを設定します。

6.4.3.1. リファレンステンプレート関数

cluster-compare プラグインは、env 関数と expandenv 関数を除くすべての sprig ライブラリー関数をサポートします。sprig ライブラリー関数の完全なリストは、「Sprig Function Documentation」を参照してください。

次の表は、cluster-compare プラグインの追加のテンプレート関数を説明しています。

Expand
表6.2 追加の cluster-compare テンプレート関数
機能説明

fromJson

受信した文字列を構造化 JSON オブジェクトとして解析します。

value: {{ obj := spec.jsontext | fromJson }}{{ obj.field }}

fromJsonArray

受信した文字列を構造化 JSON 配列として解析します。

value: {{ obj := spec.jsontext | fromJson}}{{ index $obj 0 }}

fromYaml

受信した文字列を構造化 YAML オブジェクトとして解析します。

value: {{ obj := spec.yamltext | fromYaml }}{{ obj.field }}

fromYamlArray

受信した文字列を構造化 YAML 配列として解析します。

value: {{ obj := spec.yamltext | fromYaml}}{{ index $obj 0 }

toJson

オブジェクトタイプを保持しながら、受信したデータを JSON 形式でレンダリングします。

jsonstring: {{ $variable | toJson }}

toToml

受信した文字列を構造化 TOML データとしてレンダリングします。

tomlstring: {{ $variable | toToml }}

toYaml

オブジェクトタイプを保持しながら、受信したデータを YAML 形式でレンダリングします。

単純なスカラー値の場合: value: {{ $data | toYaml }}

リストまたはディクショナリーの場合: value: {{ $dict | toYaml | nindent 2 }}

doNotMatch

通常はマッチするテンプレートでも、クラスターリソースとマッチしないようにします。テンプレート内でこの関数を使用すると、条件に応じて特定のリソースを相関付けから除外できます。--verbose フラグを付けて実行すると、指定した理由がログに記録されます。doNotMatch により除外されたテンプレートが、比較で不合格とみなされることはありません。

この関数は、テンプレートで固定の名前または namespace が指定されていない場合に特に便利です。このような場合、doNotMatch 関数を使用すると、labelsannotations などの他のフィールドに基づいて特定のリソースを除外できます。

{{ if $condition }}{{ doNotMatch $reason }}{{ end }}

lookupCRs

指定されたパラメーターにマッチするオブジェクトの配列を返します。たとえば、lookupCRs $apiVersion $kind $namespace $name などです。

$namespace パラメーターが空の文字列 ("") または * の場合、この関数はすべての namespace にマッチします。クラスタースコープのオブジェクトの場合、この関数は namespace のないオブジェクトにマッチします。

$name が空の文字列または * の場合、この関数はすべての名前付きオブジェクトにマッチします。

-

lookupCR

パラメーターにマッチする単一のオブジェクトを返します。複数のオブジェクトがマッチする場合、この関数は何も返しません。この関数は lookupCRs 関数と同じ引数を取ります。

-

次の例は、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 }}

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る