1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

別の記事でも記載したのですが、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運用を考えることが出来そうです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?