【问题标题】:How to get the value of Terraform count如何获取 Terraform 计数的值
【发布时间】:2020-06-19 07:09:02
【问题描述】:

我需要在下面的 Terraform 代码中获取 count 的值,以便我可以在 bash 中编写条件语句。

这里是terraform

resource "aws_instance" "kubernetes_master" {
  ami = "${var.ec2-ami}"
  count = 3
  instance_type = "${var.ec2-type}"
  key_name = "${aws_key_pair.public.key_name}"
  subnet_id = "${aws_subnet.kube-master-subnet.id}"
  vpc_security_group_ids = ["${aws_security_group.sg-kube-master-allow-ssh.id}"]
  associate_public_ip_address = true

  user_data = <<-EOF
              #!/bin/bash           

              # if count=0; then echo "done"; fi

              pwd
            EOF
}

所以我想打印done 如果count=0

我该怎么做?

【问题讨论】:

  • length(aws_instance.kubernetes_master.*.id) 工作吗?
  • 是否可以在 user_data 部分中执行类似的操作?
  • 不,你通常不能在 terraform 中自我引用资源,有些甚至会在目标存在之前尝试评估。如果 count 由 var 设置,您可以重用该 var。我强烈建议不要像这样用“硬方式”来做 k8s。
  • 您可以参考count.index 来获取资源定义中的值,但您的预期用途似乎没有意义(似乎您正试图将其用于某种日志记录在资源创建期间,这是行不通的)。

标签: amazon-web-services terraform


【解决方案1】:

您可以在 user_data heredoc 中使用 ${count.index} 来引用当前计数。

resource "aws_instance" "kubernetes_master" {
  ami = "${var.ec2-ami}"
  count = 3
  instance_type = "${var.ec2-type}"
  key_name = "${aws_key_pair.public.key_name}"
  subnet_id = "${aws_subnet.kube-master-subnet.id}"
  vpc_security_group_ids = ["${aws_security_group.sg-kube-master-allow-ssh.id}"]
  associate_public_ip_address = true

  user_data = <<-EOF
              #!/bin/bash           

              # if ${count.index} -eq 0; then echo "done"; fi

              pwd
            EOF
}

如果资源的总计数为 0,则不会创建 aws_instance 资源,也不会运行 user_data。

【讨论】:

  • 我会试试这个并回复你。谢谢你
  • 我的荣幸。希望它有效。就像其他人提到的那样,您最好使用 EKS 而不是从头开始部署 Kubernetes,但我想您可能已经与您的同事进行过讨论并确定这是您最好或唯一的选择。
猜你喜欢
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 2021-01-20
  • 2018-01-25
相关资源
最近更新 更多