はじめに
別の記事でも記載したのですが、IBM CloudにおけるTerraformのマネージドサービスであるSchematicsについて、CLIで操作する際、tfvarsという拡張子を持つ外部変数ファイルに対するフォーマットチェックが妙に厳密?で困っていた件がようやく解消されました。
確認した環境(Mac)
- IBM Cloud CLI : 2.24.0
- Schematicsプラグイン : 1.12.21、1.12.23
用意するtfvarsファイル
例えば、このようなファイルを用意します。
test-multi.tfvars
multiline_test = {
"01" = {
zone = "jp-tok-1"
subnet = "zone1-private"
ipaddr = "10.0.0.xxx"
}
"02" = {
zone = "jp-tok-2"
subnet = "zone2-private"
ipaddr = "10.0.64.xxx"
}
}
Schematicsプラグイン更新前(1.12.21)の環境で実行
手元に入っていたSchematicsプラグインのバージョン(1.12.21)でterraform plan
に相当するコマンドを実行すると、このようなエラーになります。key=value の形式、つまり1行で書け、というチェックが働いてしまい、実行出来ませんでした。
$ ibmcloud schematics plan -i <Schematics workspace ID> -vf test-multi.tfvars
tfvars の形式が無効です。 これは key=value の形式でなければなりません
そのため、泣く泣く以下のような形式で記述していました。ちなみに、コメントの記載もエラーになってしまっていました。
test-1line.tfvars
multiline_test = { "01" = { zone = "jp-tok-1", subnet = "zone1-private", ipaddr = "10.0.0.xxx" }, "02" = { zone = "jp-tok-2", subnet = "zone2-private", ipaddr = "10.0.64.xxx" }}
プラグイン更新
ibmcloud plugin update
を実行して、Schematicsプラグインを更新します。
$ ibmcloud plugin update
リポジトリー 'IBM Cloud' からすべてのインストール済みプラグインのアップグレードを確認しています...
以下のプラグインは updated.
Select を選択してください (または Enter キーを押してスキップします)。
*** 中略 ***
12. 'schematics[sch] 1.12.21' から 'schematics[sch] 1.12.23' へ
13. 上記のすべて
数値を入力してください> 12
'schematics[sch] 1.12.21' から 'schematics[sch] 1.12.23' へ更新
バイナリー・ファイルをダウンロードしようとしています...
24.97 MiB / 24.97 MiB [=========================================================================================] 100.00% 2s
26178544 バイトがダウンロードされました
バイナリーを更新しています...
OK
プラグインは正常にアップグレードされました。
更新後に再実行
正常に実行されました!
$ ibmcloud schematics plan -i <Schematics workspace ID> -vf test-multi.tfvars
Initiating plan...
アクティビティー ID 9c91a*********************
OK
ちなみに、以前はコメントの記載もエラーになっていましたが、このようなファイルも問題なく処理出来るようになっています。
test-multi.tfvars
# コメント
multiline_test = {
"01" = {
zone = "jp-tok-1" # コメント
subnet = "zone1-private"
ipaddr = "10.0.0.xxx"
}
"02" = {
zone = "jp-tok-2"
subnet = "zone2-private"
ipaddr = "10.0.64.xxx"
}
}
この妙な制約のせいで、実運用への適用を躊躇していた感もあるのですが、これで安心してtfvarsファイルを用いたScheamticeによるIaC運用を考えることが出来そうです。