Terraform v1.2.8
我有一个通用脚本,它在我的AWS远程EC2实例上执行传入的shell脚本,我也在Terraform中创建了这个实例。
resource "null_resource" "generic_script" {
connection {
type = "ssh"
user = "ubuntu"
private_key = file(var.ssh_key_file)
host = var.ec2_pub_ip
}
provisioner "file" {
source = "../modules/k8s_installer/${var.shell_script}"
destination = "/tmp/${var.shell_script}"
}
provisioner "remote-exec" {
inline = [
"sudo chmod u+x /tmp/${var.shell_script}",
"sudo /tmp/${var.shell_script}"
]
}
}
现在我想能够修改它,使其在上运行
- 所有节点
- 这个节点而不是那个节点
- 该节点而不是该节点
所以我在variables.tf
文件中创建了变量
variable "run_on_THIS_node" {
type = boolean
description = "Run script on THIS node"
default = false
}
variable "run_on_THAT_node" {
type = boolean
description = "Run script on THAT node"
default = false
}
我如何设定一个条件来实现我想要做的事情?
resource "null_resource" "generic_script" {
count = ???
...
}
您可以使用三元运算符。例如,根据定义的变量,条件看起来像:
resource "null_resource" "generic_script" {
count = (var.run_on_THIS_node || var.run_on_THAT_node) ? 1 : length(var.all_nodes) # or var.number_of_nodes
...
}
缺少的部分是告诉脚本在所有节点上运行的变量(或数字(。它不必具有length
函数,您可以将其定义为一个数字。然而,这只是您必须添加/编辑的代码的一部分,因为必须有一种基于索引控制host
的方法。这意味着您可能需要修改var.ec2_pub_ip
,使其成为一个列表。