繁体   English   中英

Terraform:无效的动态 for_each 值 => 无法在 for_each 中使用一组对象值。 需要一个可迭代的集合

[英]Terraform : Invalid dynamic for_each value => Cannot use a set of object value in for_each. An iterable collection is required

在 terraform 版本 1.1.9 中,我在应用 terraform 时面临以下问题。 帮助我解决这个 for_each 可以如何无误地完成。

rke_nodes 值样本将是:

# Outputs
output "rancher_nodes" {
  value = [
        for instance in flatten([[aws_instance.node_all], [aws_instance.node_master], [aws_instance.node_worker]]): {
    public_ip  = instance.public_ip
    private_ip = instance.private_ip
    hostname   = instance.id
    user       = var.node_username
    roles      = split(",", instance.tags.K8sRoles)
    ssh_key    = file(var.ssh_key_file)
    }
  ]
  sensitive = true
}

我有 variable.tf :

variable "rke_nodes" {
  type = list(object({
    public_ip = string
    private_ip = string
    hostname = string
    roles = list(string)
    user = string
    ssh_key = string
  }))
  description = "Node info to install RKE cluster"
}

主文件:

# Provision RKE cluster on provided infrastructure
resource "rke_cluster" "rancher_cluster" {
  cluster_name = var.rke.cluster_name

  dynamic nodes {
    for_each = var.rke_nodes
    content {
      address           = nodes.value.public_ip
      internal_address  = nodes.value.private_ip
      hostname_override = nodes.value.hostname
      user              = nodes.value.user
      role              = nodes.value.roles
      ssh_key           = nodes.value.ssh_key
    }
  }
  upgrade_strategy {
    drain                        = false
    max_unavailable_controlplane = "1"
    max_unavailable_worker       = "10%"
  }

  kubernetes_version = var.rke.kubernetes_version

}

terraform 应用时出现错误:

╷
│ Error: Invalid dynamic for_each value
│
│   on .terraform/modules/rke-cluster/main.tf line 6, in resource "rke_cluster" "rancher_cluster":
│    6:     for_each = var.rke_nodes
│     ├────────────────
│     │ var.rke_nodes has a sensitive value
│
│ Cannot use a list of object value in for_each. An iterable collection is required.

应用时的实际值有时可以列出:

- nodes {
    - address           = "65.2.140.68" -> null
    - hostname_override = "i-0d5bf5f22fb84f5d4" -> null
    - internal_address  = "10.30.8.120" -> null
    - labels            = {} -> null
    - role              = [
        - "controlplane",
        - "etcd",
        - "worker",
      ] -> null
    - ssh_agent_auth    = false -> null
    - ssh_key           = (sensitive value)
    - user              = (sensitive value)
  }

你不需要索引。 它应该是:

  for_each = var.rke_nodes

注意:这仅适用于动态块。 如果在资源块中使用for_each ,这种形式的for_each (地图列表)将不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM