Terraform v12x для каждого условного - PullRequest
1 голос
/ 26 мая 2020

У меня есть список подсетей и wi sh, чтобы присоединиться к ним, если у них установлен флаг enable в значение true.

locals {

  env_whitelisted_ips = {
    default =  [
      { subnets = "${data.terraform_remote_state.infra.outputs.subnet_ids}", enabled  = "true"},
      { subnets = "${data.terraform_remote_state.infra.outputs.public_subnet_ids}", enabled = "false"},
      { subnets = "${data.terraform_remote_state.infra.outputs.nlb_public_subnet_ids}", enabled = "false"},
      { subnets = "${data.terraform_remote_state.infra.outputs.vpc_cidr_block}", enabled = "false"}
    ]
  }

Теперь распечатайте требуемые значения, установите значение true.

resource "null_resource" "default_3" {

    for_each = { for k, v in local.env_whitelisted_ips : k => v  }
    triggers = {
        subnet_value = jsonencode(each.value)
        account_key = jsonencode(each.key)

    }
} 

И это в настоящее время производит.

+ triggers = {
          + "account_key"   = "\"default\""
          + "subnet_value" = jsonencode(
                [
                  + {
                      + enabled         = "true"
                      + subnets = [
                          + "subnet-xxx",
                          + "subnet-yyy",
                          + "subnet-zzz",
                        ]
                    }

Но то, что я ищу, это:

resource "null_resource" "default_3" {

    for_each = { for k, v in local.env_whitelisted_ips : k => v.contains["enabled"] == true  }
    triggers = {
        subnet_value = jsonencode(each.value.subnets)

    }
} 

Создание значений:

  + triggers = {
              + "account_value" = jsonencode(
                    [
                      + {
                          + subnets = [
                              + "subnet-xxx",
                              + "subnet-yyy",
                              + "subnet-zzz",
                            ]
                        }

Любая идея будет принята с благодарностью :)

1 Ответ

1 голос
/ 27 мая 2020

Итак, исправление заключалось в том, чтобы изменить локальную конструкцию следующим образом:

locals {

  env_whitelisted_ips =  [
    { subnet_block = "${data.terraform_remote_state.infra.outputs.subnet_cidr_block}",
      enabled  = "true"
    },
    { subnet_block = "${data.terraform_remote_state.infra.outputs.public_subnet_cidr_block}",
      enabled = "false"
    },
    { subnet_block = "${data.terraform_remote_state.infra.outputs.nlb_subnet_cidr_block}",
      enabled = "false"
    },
    { subnet_block = "${data.terraform_remote_state.infra.outputs.vpc_cidr_block}",
      enabled = "false"
    }
  ]

}

И обновить вложенные циклы следующим образом:

resource "null_resource" "get_vpc_cidrs" {
    for_each = { for k, v in (local.env_whitelisted_ips) : k => v if v.enabled != "false" }
    triggers = {
        whitelisted = "${join(",", each.value["subnet_block"])}"
    }
}

И результат:

# null_resource.get_vpc_cidrs["0"] will be created
  + resource "null_resource" "get_vpc_cidrs" {
      + id       = (known after apply)
      + triggers = {
          + "whitelisted" = "172.27.128.0/20,172.27.144.0/20,172.27.160.0/20"
        }
    }
...