#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.