Терраформируйте сплющенный кортеж в строку

#string #azure #tuples #terraform #azure-rm

Вопрос:

У меня есть следующий кортеж terraform allowed_ips, который содержит json ip-адреса и метаданные о каждом ip-адресе. Я пытаюсь сгладить кортеж, чтобы получить список ip-адресов в формате [«2.2.2.2», «3.3.3.3»], который затем будет передан переменной ip_rules

Переменная

 allowed_ips = [
    {
      name       = "ip1"
      ip_address = "3.3.3.3"
    },
    {

      name       = "ip2"
      ip_address = "127.0.0.1"
    }
  ]


 

Ресурс

 variable "allowed_ips" {
  type = list(object({
    name       = string,
    priority   = string,
    ip_address = string
  }))
}

network_acls {
    default_action = "Deny"
    bypass         = "AzureServices"

    ip_rules =  jsonencode(var.allowed_ips.*.ip_address)
  }
 

Когда я устанавливаю ip_rules = ["2.2.2.2", "3.3.3.3"] правила, они создаются без проблем, но я хотел бы как-то проанализировать переменную из списка allowed_ips выше.

Я пробовал различные способы, в том числе

  • jsonencode(var.allowed_ips.*.ip_address)
  • "${join("\,", local.subnets.*.id)}"
  • повторение с помощью foreach,

К сожалению, большинство решений выдают ошибку Inappropriate value for attribute "ip_rules": set of string required.

Любая помощь будет оценена по достоинству

Ответ №1:

попробуйте это:

 ip_rules = [for i in var.allowed_ips : i.ip_address]
 

Ответ №2:

Похоже ip_rules , что аргумент ожидает значение типа set(string) . Если вы хотите использовать allowed_ips переменную, вы должны быть в состоянии сделать что-то вроде следующего:

 ip_rules = toset(var.allowed_ips[*].ip_address)
 

jsonencode Функция будет кодировать заданное значение в строку, которая не является типом, ip_rules ожидаемым аргументом. То же самое можно сказать и о join функции, поскольку ее возвращаемое значение имеет тип string.