在Terraform中,如何使用仅在特定节点上运行的条件



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,使其成为一个列表。

相关内容

  • 没有找到相关文章

最新更新