2017-10-16 56 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

相關問題