我正試圖將一個bash腳本傳遞給3個AWS啟動模板userdata。這個腳本根據一個特定的變數從Github呼叫其他腳本。由于每個啟動模板都必須呼叫不同的腳本,所以最好的方法是什么。我目前正在嘗試配置一個資料源template_file,但我找不到一種方法來實作我的需求。
這是bash腳本的一部分,我在這里放了一個變數,需要根據每次建立的啟動模板來改變它的值:
這是bash腳本的一部分。
#------------------------------------------------------------------------------------------
# Define here scripts (separched with 1 space) that will be executed on first run:
AMI_SCRIPTS="ami_base_lynis.sh ${ami_script}"/span>
#------------------------------------------------------------------------------------------
下載和運行腳本
這是模板檔案資料源:
data "template_file"/span> "AMI"{
模板 = "${file("./AMIs/s1_aws_userdata.sh")}"。
vars = {
ami = var.dci_appserver_ami
}
}
而這是用戶資料屬性:
user_data_base64 = base64encode(data.template_file.AMIs.rendered)
這對我來說不起作用,因為它將取代變數對所有3個啟動模板具有相同的值。我怎樣才能為每次分配一個不同的值呢?
uj5u.com熱心網友回復:
你用于user_data_base64的語法告訴我,你使用的是Terraform v0.12或更高版本,所以你不應該再使用template_file,如template_file檔案中所示:
在Terraform 0.12及以后的版本中,
templatefile函式提供了一個內置機制,用于從檔案渲染模板。請使用該函式,除非您使用的是Terraform 0.11或更早的版本。
正因為如此,我打算使用templatefile函式來代替回答。
在你的每個啟動模板資源塊中,你可以用不同的模板變數值來呼叫
templatefile,以便每次獲得不同的結果:
resource "aws_launch_template"/span> "example1"/span> {
# ...
user_data = base64encode(templatefile("${path.module}/./AMIs/s1_aws_userdata.sh", {
ami = var.dci_appserver_ami
ami_script = "script1.sh")
}))
}
資源 "aws_launch_template"/span> "example2"/span> {
# ...
user_data = base64encode(templatefile("${path.module}/./AMIs/s1_aws_userdata.sh", {
ami = var.dci_appserver_ami
ami_script = "script2.sh")
}))
}
資源 "aws_launch_template"/span> "example3"/span> {
# ...
user_data = base64encode(templatefile("${path.module}/.../AMIs/s1_aws_userdata.sh"/span>, {
ami = var.dci_appserver_ami
ami_script = "script3.sh")
}))
}
如果你想更系統地進行,原則上你可以把構建模板的因素排除在本地值之外,但由于你的問題沒有包括任何跡象表明你在這里對啟動模板做任何特殊處理,我只是寫了一個最簡單的方法,每個啟動模板都有自己的模板渲染運算式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/308026.html
標籤:
上一篇:bashs的命令列為關于退出管道退出。`exit1|exit2`。
下一篇:提取一個目錄中檔案數量最多的用戶
