Skip to content

Terraform

Terraform + CML でノードのコンフィグは外部ファイルを参照する

Terraform で CML 上にラボを作成する際、同時に「ノードにコンフィグを流し込む」ことが可能です。 Terraform からノードへ設定を行うには cml2_node (Resource) の configuration を使います。 更にこの流し込むコンフィグを外部ファイルから参照したい場合は Terraform の file Function を利用することで実現出来ます。

但し、file Function を使って外部ファイルを参照させても CML Provider のバグなのか、以下のエラーになってしまいました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
cml2_node.dev1: Creating...
╷
│ Error: Provider produced inconsistent result after apply
│
│ When applying changes to cml2_node.dev1, provider
│ "provider[\"registry.terraform.io/ciscodevnet/cml2\"]" produced an unexpected new value:
│ .configuration: was cty.StringVal("hostname dev1\r\n!\r\nend"), but now cty.StringVal("hostname
│ dev1\n!\nend").
│
│ This is a bug in the provider, which should be reported in the provider's own issue tracker.

このエラーは「外部ファイルの改行コードを (CRLF では無く) LF に設定する」ことで回避することが出来ました。

Terraform で JSON ファイルを扱う

Terraform を利用する際、一般的には HCL (HashiCorp Configuration Language) 形式で記載された .tf (Template File) を利用するケースをよく見かけます。 ですが、Terraform 自体は HCL = .tf ファイル以外にも JSON を扱うことも出来ます。 .tf ファイルを JSON 形式に変換するには HashiCorp 公式の hcldec を使う方法もありますが、より手軽に OSS の tmccombs/hcl2json を利用する方法もあります。 今回はこの hcl2json を利用し、HCL を JSON 形式に変換する方法をメモしておきます。 尚、今回は Ubuntu 22.04LTS 上でテストしました。

Terraform で検証用設定する際、設定名に Prefix を付与する

Terraform で検証用の AWS や GCP を設定する際、"検証用の設定" であることを分かりやすくする為、設定名に接頭辞 = Prefix を付与したい場合があります (私の場合!)。 設定毎に Prefix を付与しても良いのですが「Prefix を変更したい」といった場合に置換する手間が発生します。 こういった場合は Terraform の変数 = variable を使うことで「Prefix を変数として付与する」といった記述が可能になります。