2017-03-16 7 views
0

私はn回拡大したいk8sリソース用の汎用テンプレートを持っています(好奇心が強い場合は、mongoクラスタのn個のメンバーを作成でき、statefulsetリソースを使用して各メンバーに安定したネットワーク名)。kubernetes-helmテンプレートで変数を使用できますか?

明らかに、ループを通過するたびに異なる値が必要です。私はSprig "until"関数によって生成された一連のインデックスをループしています。しかし、ループの$インデックスは "。"に設定されていません。名前空間。だから私の_helpers.tplファイル内の私の定義されたテンプレート内の現在の反復を参照することができません。ここ

は(私はそれのほとんどを略しています)/フルK8SリソースYAMLワットテンプレートの例である:

{{- define "mytest" -}} 
--- 
apiVersion: apps/v1beta1 
kind: StatefulSet 
    abbreviated... 
    containers: 
    - name: mongod-$index 
    abbreviated... 
{{- end -}} 

、発信者:

{{ range $index, $e := until .Values.mongod_count }} 
    {{include "mytest" .}} 
{{ end}} 

私はちょうど得る:未定義の変数「$インデックス

{{ $foo := "somevalue" }} 
{{ define "my_extra_labels" }} bla {{ .Values.test }}_{{$foo}}{{end}} 
{{ template "mytest" . }} 
:「

は、私は私の(呼び出し側)テンプレートでこのように、あまりにもブロックして試してみました

そして、この私の_helpers.tpl

{{/* Test stuff */}} 
{{- define "mytest" -}} 
hello: world_how_are_{{ block "my_extra_labels" . }}{{ end }} 
{{- end -}} 

に変数$ fooが "定義" は、体内で定義されていません。

このテンプレートスコープは、現時点でのシナリオを解決するためにどのように使用するのかがわからないほど制限があると感じています。

"。"変数に変数を追加する方法はありますか?名前空間?もしそうなら(私の指を横切る)、何らかの方法で名前空間をマージする方法があるので、.Valuesと.Chart変数にはまだアクセスできますか?

答えて

0

helmのテンプレートは変数にアクセスできません。ただし、テンプレートに渡されるコンテキストは辞書です。 sprigライブラリはGoテンプレート内からアクセスでき、辞書を操作するために使用できます。あなたは今、一例として、このテンプレートを呼び出すことができます

{{- define "mytest" -}} 
    - name: mongod-{{ .index }} 
{{- end -}} 

{{ range $index := until 5 }} 
    {{- $p := dict "index" $index }} 
    {{include "mytest" $p}} 
{{- end -}} 

この意志出力:

- name: mongod-0 
- name: mongod-1 
- name: mongod-2 
- name: mongod-3 
- name: mongod-4 

をあなたはまたに項目を追加することができます

は、この単純化されたテンプレートを取ります既存または現在のスコープ付き辞書:

{{- $_ := set . "index" "none" }} 
{{include "mytest" .}} 

$ _は、 "set"が新しい辞書を返すので、望ましくない出力を抑制するために使用されます。上記は次のようになります。

- name: mongod-none 

辞書に追加された値はすべて呼び出しを超えて保存されます。既存の辞書を汚染しないようにしたい場合は、との深いコピーを強制することができます

{{- $d := merge (dict) . -}} 

ものは「$ dが」内に存在しませんに追加しました「」。

関連する問題