所以我有两个完全相同的 terraform 模块......例外是有一个额外的远程执行步骤
模块 A
provisioner "remote-exec" {
inline = [
"sudo chmod 777 -R ${var.setup_files_destination}",
"sudo ${var.setup_files_destination}/scripts/setup.sh ${var.setup_files_destination}",
]
connection {
user = "ec2-user"
private_key = "${file(var.private_key_location)}"
}
}
模块 B - 不同之处是要执行的一个额外脚本
provisioner "remote-exec" {
inline = [
"sudo chmod 777 -R ${var.setup_files_destination}",
"sudo ${var.setup_files_destination}/scripts/setup.sh ${var.setup_files_destination}",
]
connection {
user = "ec2-user"
private_key = "${file(var.private_key_location)}"
}
}
provisioner "remote-exec" {
inline = [
"sudo chmod 777 -R ${var.setup_files_destination}",
"${var.setup_files_destination}/scripts/setup_special.sh ${var.setup_files_destination}",
]
connection {
user = "ec2-user"
private_key = "${file(var.private_key_location)}"
}
}
除了这个脚本差异之外,模块具有完全相同的步骤。重复的 terraform 代码量约为 50 行。
我想在 Terraform 中做什么
所以在 Terraform 方面,我想指定要作为列表执行的脚本,所以像
多变的
variable "commands_to_execute" {
type = "list"
}
共同步骤
provisioner "remote-exec" {
inline = "[${var.commands_to_execute}]"
connection {
user = "ec2-user"
private_key = "${file(var.private_key_location)}"
}
}
常见步骤的感知使用
module "instances" {
... rest of declaration...
commands_to_execute = [
"sudo chmod 777 -R ${var.setup_files_destination}",
"sudo ${var.setup_files_destination}/scripts/setup.sh ${var.setup_files_destination}",
]
}
当我运行这个时,我得到
错误:模块“实例”:引用的未知变量:“setup_files_destination”;用“变量”块定义它
在模块内部定义的变量也是如此setup_files_destination
,但不在.tf
使用模块的文件中定义。它有一个默认值,实际上是远程实例上 shell 脚本目录的位置。
我想保留setup_files_destination
在模块中。所以我正在寻找一种将变量的插值推迟到实际使用模块的方法。这在 terraform 中可能吗?