【发布时间】:2021-08-16 10:47:27
【问题描述】:
我有一个cloud-init 配置文件,用于使用Terraform 在AWS 中启动VM,我还想使用Multipass 在本地运行以进行测试和调试。
cloud-init 文件包含一些 shell 脚本,Terraform 需要重写这些脚本,以便它们将变量称为 $$var 而不仅仅是 $var。它还使用一个模板变量作为主机名。
为了能够在云端和本地使用相同的配置文件,我想我可以使用以下命令来扩展模板并启动 Multipass VM,而无需手动替换字符串:
terraform console <<< "templatefile(\"cloud-init.yaml\", {hostname: \"test\"})" | multipass launch -n test --cloud-init -
但事实证明templatefile 函数将其输出包装在heredoc 中:
<<EOT
... contents ...
EOT
Multipass 当然不理解这种语法并打印(相当无用的)错误消息:
launch failed: operator[] call on a scalar (key: "users")
理想情况下,Terraform 命令应该能够在没有 heredoc 包装器的情况下呈现文件。但是,或者,是否有一个 shell 技巧可以使这个工作?
【问题讨论】:
标签: bash terraform heredoc terraform-template-file multipass