【问题标题】:Terraform skip null for_eachTerraform 跳过 null for_each
【发布时间】:2021-06-07 15:17:55
【问题描述】:

我正在为 AMI 设置标签。我有 ubuntu 和 EKS AMI,其中 EKS AMI 需要设置其他操作系统不需要的 k8s 版本、containerd 等。我已经声明了所有特定于 EKS 的变量,默认为 null,假设它们在我运行 for_each 时会被跳过,但它会出错。这是代码和错误。

locals {

  tags = {
    docker_version = var.docker_version
    kubernetes = var.k8s_version
    cni_plugin_version = var.cni_plugin_version
    containerd_version = var.containerd_version
    target = var.target
    source_ami_id = var.source_ami_id
    Release = var.ami_release-version
    Description = var.ami_description
    Name = var.ami_name
    Creator = var.creator
  }

data "aws_ami" "ami_image" {
  most_recent      = true
  owners           = ["xxxxxxxx"]
  name_regex = var.ami_regex
}

output "ami_id" {
  value = data.aws_ami.ami_image.id
}
output "ami_arn" {
  value = data.aws_ami.ami_image.arn
}
output "ami_name" {
  value = data.aws_ami.ami_image.name
}

resource "aws_ec2_tag" "ami-taggging" {
  resource_id = data.aws_ami.ami_image.id
  for_each    = local.tags
  key         = each.key
  value       = each.value
}

值为空时出错:

Error: Missing required argument
  on main.tf line 41, in resource "aws_ec2_tag" "ami-tagging":
  41:   value       = each.value

如果值为空,有没有办法跳过或优雅地移动到下一条记录。

【问题讨论】:

    标签: amazon-web-services terraform terraform-provider-aws


    【解决方案1】:

    假设default_tags(未在您的问题中显示)与您的local.tag 相似,您可以执行以下操作:

    resource "aws_ec2_tag" "ami-taggging" {
      resource_id = data.aws_ami.ami_image.id
      for_each    = {for k,v in local.tags: k => v if v != null}
      key         = each.key
      value       = each.value
    }
    

    解决方案使用for expression。基本上,它采用您原来的local.tags 并创建将在for_each 中使用的新临时地图。新地图将具有相同的键和值 (k=>v),但不满足 if 条件的除外。

    【讨论】:

    • 对不起,我已经更正了代码。我会试试代码。
    • 既然使用了 k,v 应该 key = each.k 和 value = each.v 吗?
    • @Raj each.key 和 each.value 都可以。为什么?你有任何错误吗?
    • 上面的代码有效。只是出于对逻辑的好奇。
    • @Raj 用解释更新了答案。
    猜你喜欢
    • 2021-07-09
    • 2021-06-16
    • 2021-08-02
    • 2020-12-19
    • 2021-03-09
    • 1970-01-01
    • 2021-12-31
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多