我能想出的最優雅的解決方案是使用「外部數據源」提供程序。 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