2017-10-16 55 views
1

我想识别terraform执行环境 的公共IP并将其添加到aws安全组入站以防止从其他环境访问。我想识别terraform执行环境的公共IP并将其添加到安全组

目前,我正在手动编辑variables.tf文件中的值。

variables.tf

variable public_ip_address { 
    default  = "xx" 
} 

我想执行本地主机上的“卷曲ifconfig.co”命令,并自动将基于结果

的安全组是有办法做这样的事情?

我可以通过将local-exec的结果放在一些变量 中,但我不知道该怎么做。

谢谢你阅读我的问题。

回答

0

我能想出的最优雅的解决方案是使用“外部数据源”提供程序。 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是确定的,如果你只有一个网卡:)否则使用替代命令或切断输出,您想要的结果。

+0

真棒!我有一个关于main.tf 的问题main.tf是否在terraform中第一次执行?它可以使用main.tf中定义的任何设置吗? – sukho

+0

Terraform在工作区中加载* .tf,您的值需要在当前工作区中可用或通过远程数据导入。 –

+0

@AnshuPrateek你能看到我的新问题吗?我还没有解决根本问题。链接在这里。 https://stackoverflow.com/questions/47311916/how-to-put-in-varable-tf-to-run-script-with-data-external-in-terraform – sukho

相关问题