post-thumb

リストとして data values を代入

この記事では ytt でリストデータをコマンドパラメーターとして渡す方法を説明しています。 トランスポートノードとして ESXi を NSX-T へ追加しようとした時に、IP List の指定でつまずいたので、備忘録としてまとめます。

おさらい

ytt でテンプレートへ値を渡すには、オプション --data-values あるいは短縮系のオプション -v を使うことになります。

以下のようなテンプレートがあるとして

1
2
3
4
#@ load("@ytt:data", "data")
first_name: John
last_name: Doe
like: #@ data.values.like

次のように ytt を実行すると、以下の出力を得ることができます。

1
2
3
4
> ytt -f like.yaml -v like=apple
first_name: John
last_name: Doe
like: apple

しかし、["apple", "orange"] といった任意のリストを ytt に渡したいというケースもあります。

-v を使うと…

以下のように、like がリストとなることを期待しています。

1
2
3
4
5
first_name: John
last_name: Doe
like:
- apple
- orange

では、同じテンプレートにリストを ytt で渡します。

1
2
3
4
> ytt -f like.yaml -v like=["apple","orange"]
first_name: John
last_name: Doe
like: '[apple,orange]'

しかしながら、実際には上のようにリストを表す [] といったブラケットも含んだ一つの文字列として代入されていまいます。 これは、こちらの記事でも書いたように --data-values -v は値を常に文字列として扱うためです。

値を yaml としてパース

値を文字列ではなく yaml の一部としてパースするには、オプション --data-values-yaml を使います。

1
2
3
4
5
6
ytt -f like.yaml --data-value-yaml like=["apple","orange"]
first_name: John
last_name: Doe
like:
- apple
- orange

値として渡すリストの文字列要素は、" で囲わなくても文字列として認識してくれます。

1
2
3
4
5
6
> ytt -f like.yaml --data-value-yaml like=[apple,orange]
first_name: John
last_name: Doe
like:
- apple
- orange
comments powered by Disqus