首页 > 解决方案 > 使用一个循环和多个字符串创建语句遍历映射列表

问题描述

我有以下代码:

locals {
   all_nodes_verbose_etcd = [for k, v in var.virtual_machines:
                               format("%s ip=%s etcd_instance=%s", v.name, v.ipv4_address, v.etcd_instance)
                               if length(v.etcd_instance) > 0]

   all_nodes_verbose      = [for k, v in var.virtual_machines:
                               format("%s ip=%s", v.name, v.ipv4_address)
                               if length(v.etcd_instance) == 0]

   master_nodes           = [for k, v in var.virtual_machines:
                               v.name
                               if v.worker_node != true]

   etcd_nodes             = [for k, v in var.virtual_machines:
                               v.name
                               if length(v.etcd_instance) > 0]
}

无论如何这可以改变,这样我只需要一个 for 循环?

我的 virtual_machines 地图列表看起来像这样(不是全部 - 但足以让您了解它的样子):

variable "virtual_machines" {
  default = {
    "master1" = {
       name          = "z-ca-bdc-master1"
       worker_node   = false
       etcd_instance = "etcd1"
       ipv4_address  = "192.168.113.79"
       ipv4_netmask  = "22"
       ipv4_gateway  = "192.168.112.1"
       dns_server    = "192.168.112.2"
       ram           = 8192
       logical_cpu   = 4
       disk0_size    = 40
       disk1_size    = 0
    },
    "master2" =  {
       name          = "z-ca-bdc-master2"
       worker_node   = false
       etcd_instance = "etcd2"
       ipv4_address  = "192.168.113.80"
       ipv4_netmask  = "22"
       ipv4_gateway  = "192.168.112.1"
       dns_server    = "192.168.112.2"
       ram           = 8192
       logical_cpu   = 4
       disk0_size    = 40
       disk1_size    = 0
    },

这是我想要的伪代码:

locals {
   for k, v in var.virtual_machines:                            
   all_nodes_verbose_etcd = [format("%s ip=%s etcd_instance=%s", v.name, v.ipv4_address, v.etcd_instance)
                               if length(v.etcd_instance) > 0]

   all_nodes_verbose      = [format("%s ip=%s", v.name, v.ipv4_address)
                               if length(v.etcd_instance) == 0]

   master_nodes           = [v.name
                               if v.worker_node != true]

   etcd_nodes             = [v.name
                               if length(v.etcd_instance) > 0]
} 

标签: terraform

解决方案


推荐阅读