我能想出的最优雅的解决方案是使用“外部数据源”提供程序。 https://www.terraform.io/docs/providers/external/data_source.html
这是为人们将本地执行,空资源和变量组合在本地注入某些目的而写的。
无论如何,我相信你可以在不写一个小脚本的情况下做到这一点。事情是“外部数据源”期望读取JSON。所以在我的例子中,我只是在程序中创建了一个JSON字符串,然后调用该程序。我敢肯定,这可以使用回声或JQ一个衬垫来完成...
这里是我的main.tf文件:
data "external" "example" {
program = ["sh", "test.sh" ]
}
output "commandout" {
value = "${data.external.example.result}"
}
这里是我的shell脚本(test.sh):
#!/bin/bash
echo {\"ip\":\""`hostname -I`"\"}
从技术上讲,一旦你有这种情况,你可以使用:
${data.external.example.result}
当你的VAR输入。
这里是我使用terraform输出的工作示例。
data.external.example: Refreshing state...
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
commandout = {
ip = 10.0.2.15
}
注意hostname -I
是确定的,如果你只有一个网卡:)否则使用替代命令或切断输出,您想要的结果。
真棒!我有一个关于main.tf 的问题main.tf是否在terraform中第一次执行?它可以使用main.tf中定义的任何设置吗? – sukho
Terraform在工作区中加载* .tf,您的值需要在当前工作区中可用或通过远程数据导入。 –
@AnshuPrateek你能看到我的新问题吗?我还没有解决根本问题。链接在这里。 https://stackoverflow.com/questions/47311916/how-to-put-in-varable-tf-to-run-script-with-data-external-in-terraform – sukho