2.2. インストールテンプレートの概要
インストールテンプレートは、インストールアーティファクトのセットを生成するために使用されるデータドリブンテンプレートです。これらのテンプレートは Golang の text/template
形式に従っており、ClusterInstance
カスタムリソースのデータを使用してインスタンス化されます。これにより、同様の設定を持ちながらも値が異なる各ターゲットクラスターのインストールマニフェストを動的に作成できるようになります。
さまざまなインストール方法やクラスタートポロジーに基づいて複数のセットを作成することもできます。SiteConfig Operator は、次のタイプのインストールテンプレートをサポートします。
- クラスターレベル
- クラスター固有のフィールドのみを参照する必要があるテンプレート。
- ノードレベル
- クラスター固有のフィールドとノード固有のフィールドの両方を参照できるテンプレート。
インストールテンプレートの詳細は、次のドキュメントを参照してください。
2.2.1. テンプレート関数
テンプレート化されたフィールドをカスタマイズできます。SiteConfig Operator は、すべての sprig ライブラリー関数 をサポートします。
ClusterInstance
API は、カスタムマニフェストの作成時に使用できる次の関数も提供します。
toYaml
-
toYaml
関数は、項目を YAML 文字列にエンコードします。項目を YAML に変換できない場合、関数は空の文字列を返します。
次に示す、ClusterInstance.Spec.Proxy
フィールドの .toYaml
仕様の例を参照してください。
{{ if .Spec.Proxy }} proxy: {{ .Spec.Proxy | toYaml | indent 4 }} {{ end }}
{{ if .Spec.Proxy }}
proxy:
{{ .Spec.Proxy | toYaml | indent 4 }}
{{ end }}
2.2.2. デフォルトのテンプレートセット
SiteConfig Operator は、Operator がインストールされているのと同じ namespace に、次の検証済みかつイミュータブルなデフォルトテンプレートセットを提供します。
インストール方法 | テンプレートタイプ | ファイル名 | テンプレートコンテンツ |
---|---|---|---|
Assisted Installer | クラスターレベルのテンプレート |
|
|
ノードレベルのテンプレート |
|
| |
Image-based Install Operator | クラスターレベルのテンプレート |
|
|
ノードレベルのテンプレート |
|
|
ClusterInstance
API の詳細は、ClusterInstance API を参照してください。
2.2.3. 特殊なテンプレート変数
SiteConfig Operator は、テンプレートで使用できる特殊なテンプレート変数のセットを提供します。次のリストを参照してください。
CurrentNode
- SiteConfig Operator は、ノードオブジェクトの反復を明示的に制御し、テンプレーティングで処理されている現在のノードのすべてのコンテンツにアクセスするために、この変数を公開します。
InstallConfigOverrides
-
マージされた
networkType
、cpuPartitioningMode
、およびinstallConfigOverrides
コンテンツが含まれます。 ControlPlaneAgents
-
コントロールプレーンエージェントの数で構成され、
ClusterInstance
ノードオブジェクトから自動的に導出されます。 WorkerAgents
-
ワーカーエージェントの数で構成され、
ClusterInstance
ノードオブジェクトから自動的に導出されます。
テキストテンプレート内のフィールド名を大文字にして、カスタムテンプレート化されたフィールドを作成します。
たとえば、ClusterInstance
spec
フィールドは .Spec
接頭辞で参照されます。ただし、特殊変数フィールドは .SpecialVars
接頭辞を使用して参照する必要があります。
重要: spec.nodes
フィールドに .Spec.Nodes
接頭辞を使用するのではなく、.SpecialVars.CurrentNode
特殊テンプレート変数を使用して参照する必要があります。
たとえば、CurrentNode
特殊テンプレート変数を使用して現在のノードの name
および namespace
を指定する場合は、次の形式でフィールド名を使用します。
name: "{{ .SpecialVars.CurrentNode.HostName }}" namespace: "{{ .Spec.ClusterName }}"
name: "{{ .SpecialVars.CurrentNode.HostName }}"
namespace: "{{ .Spec.ClusterName }}"
2.2.4. マニフェスト順序のカスタマイズ
siteconfig.open-cluster-management.io/sync-wave
アノテーションを使用して、マニフェストが作成、更新、削除される順序を制御できます。アノテーションは整数を値として取得し、その整数が wave を構成します。
1 つの wave に 1 つ以上のマニフェストを追加できます。値を指定しない場合、アノテーションはデフォルト値 0
を取得します。
SiteConfig Operator は、リソースの作成時または更新時にマニフェストを昇順で調整し、リソースを降順で削除します。
次の例では、SiteConfig Operator がマニフェストを作成または更新すると、AgentClusterInstall
および ClusterDeployment
カスタムリソースは最初の wave で調整され、KlusterletAddonConfig
および ManagedCluster
カスタムリソースは 3 番目の wave で調整されます。
apiVersion: v1 data: AgentClusterInstall: |- ... siteconfig.open-cluster-management.io/sync-wave: "1" ... ClusterDeployment: |- ... siteconfig.open-cluster-management.io/sync-wave: "1" ... InfraEnv: |- ... siteconfig.open-cluster-management.io/sync-wave: "2" ... KlusterletAddonConfig: |- ... siteconfig.open-cluster-management.io/sync-wave: "3" ... ManagedCluster: |- ... siteconfig.open-cluster-management.io/sync-wave: "3" ... kind: ConfigMap metadata: name: assisted-installer-templates namespace: example-namespace
apiVersion: v1
data:
AgentClusterInstall: |-
...
siteconfig.open-cluster-management.io/sync-wave: "1"
...
ClusterDeployment: |-
...
siteconfig.open-cluster-management.io/sync-wave: "1"
...
InfraEnv: |-
...
siteconfig.open-cluster-management.io/sync-wave: "2"
...
KlusterletAddonConfig: |-
...
siteconfig.open-cluster-management.io/sync-wave: "3"
...
ManagedCluster: |-
...
siteconfig.open-cluster-management.io/sync-wave: "3"
...
kind: ConfigMap
metadata:
name: assisted-installer-templates
namespace: example-namespace
SiteConfig Operator がリソースを削除すると、KlusterletAddonConfig
および ManagedCluster
カスタムリソースが最初に削除され、AgentClusterInstall
および ClusterDeployment
カスタムリソースは最後に削除されます。
2.2.5. 追加のアノテーションとラベルの設定
ClusterInstance
API の extraAnnotations
フィールドと extraLabels
フィールドを使用して、クラスターレベルとノードレベルの両方のインストールマニフェストに追加のアノテーションとラベルを設定できます。SiteConfig Operator は、ClusterInstance
リソースで指定したマニフェストに追加のアノテーションとラベルを適用します。
追加のアノテーションとラベルを作成するときは、SiteConfig Operator がそれらをすべての一致するマニフェストに適用できるように、マニフェストタイプを指定する必要があります。ただし、アノテーションとラベルは任意であり、アプリケーションにとって意味のある任意のキーと値のペアを設定できます。
注記: 追加のアノテーションとラベルは、参照されたテンプレートを通じてレンダリングされたリソースにのみ適用されます。
extraAnnotations
と extraLabels
の次の例の適用例を確認してください。
extraAnnotations
と extraLabels
の応用例
apiVersion: siteconfig.open-cluster-management.io/v1alpha1 kind: ClusterInstance metadata: name: "example-sno" namespace: "example-sno" spec: [...] clusterName: "example-sno" extraAnnotations: ClusterDeployment: myClusterAnnotation: success extraLabels: ManagedCluster: common: "true" group-du: "" nodes: - hostName: "example-sno.example.redhat.com" role: "master" extraAnnotations: BareMetalHost: myNodeAnnotation: success extraLabels: BareMetalHost: "testExtraLabel": "success"
apiVersion: siteconfig.open-cluster-management.io/v1alpha1
kind: ClusterInstance
metadata:
name: "example-sno"
namespace: "example-sno"
spec:
[...]
clusterName: "example-sno"
extraAnnotations:
ClusterDeployment:
myClusterAnnotation: success
extraLabels:
ManagedCluster:
common: "true"
group-du: ""
nodes:
- hostName: "example-sno.example.redhat.com"
role: "master"
extraAnnotations:
BareMetalHost:
myNodeAnnotation: success
extraLabels:
BareMetalHost:
"testExtraLabel": "success"
- 1 2
- このフィールドは、SiteConfig Operator が
ManagedCluster
マニフェストおよびClusterDeployment
マニフェストに適用するクラスターレベルのアノテーションとラベルをサポートします。 - 3 4
- このフィールドは、SiteConfig Operator が
BareMetalHost
マニフェストに適用するノードレベルのアノテーションとラベルをサポートします。次のコマンドを実行すると、追加のラベルが適用されていることを確認できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get managedclusters example-sno -ojsonpath='{.metadata.labels}' | jq
oc get managedclusters example-sno -ojsonpath='{.metadata.labels}' | jq
適用されたラベルの次の例を確認してください。
適用されたラベルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow { "common": "true", "group-du": "", ... }
{ "common": "true", "group-du": "", ... }
- 次のコマンドを実行すると、追加のアノテーションが適用されていることを確認できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get bmh example-sno.example.redhat.com -n example-sno -ojsonpath='{.metadata.annotations}' | jq
oc get bmh example-sno.example.redhat.com -n example-sno -ojsonpath='{.metadata.annotations}' | jq
適用されたアノテーションの次の例を確認してください。
適用されたアノテーションの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow { "myNodeAnnotation": "success", ... }
{ "myNodeAnnotation": "success", ... }