#terraform
#terraform
Вопрос:
У меня есть файл данных site24x7IPs.json, он выглядит следующим образом:
{ "LocationDetails": [ { "IPv6_Address_External": "2803:eb80:4000:d::0/64", "City": "Buenos Aires", "Place": "Argentina", "external_ip": "170.78.75.88" }, { "IPv6_Address_External": "", "City": "Buenos Aires", "Place": "Argentina", "external_ip": "170.78.75.87" }, { "IPv6_Address_External": "", "City": "Melbourne", "Place": "Australia", "external_ip": "103.91.166.0/24" }, { "IPv6_Address_External": "2400:fa80:5:9:d68e:c0c1:fced:a31a", "City": "Perth", "Place": "Australia", "external_ip": "103.77.234.74" } ] }
Ниже приведена часть моей terraform main.tf
locals { site24x7IPs = jsondecode(file("${path.module}/site24x7IPs.json")) } locals { ipList = [for i in local.site24x7IPs.LocationDetails: i.external_ip if i.Place == "Australia"] cidrList = [ for j in local.ipList: length(regexall("/", j)) <= 0 : "${j}/32" : j ] }
Мое ожидание:
cidrList = [ «103.91.166.0/24», «103.77.234.74/32» ]
Ошибка:
Ошибка: недопустимое выражение ‘for’
на main.tf строка 7, в locals: 7: cidrList = [ для j в local.IPList: длина(regexall(«/», j)) <= 0: «${j}/32»: j ]
Дополнительные символы после окончания выражения ‘for’.
Ответ №1:
Обновить:
Правильный синтаксис:
cidrList = [ for j in local.ipList:
length(regexall("/", j)) <= 0 ? "${j}/32" : j ]
но вы используете double :
вместо ?
and ‘:’.
Предыдущий ответ
Не уверен, чего именно вы пытаетесь достичь, похоже, вам нужно что-то следующее:
cidrList = [ for j in local.ipList:
{"${j}/32" : j } if length(regexall("/", j)) <= 0 ]
что дало бы:
[
{
"103.77.234.74/32" = "103.77.234.74"
},
]
или
cidrList = [ for j in local.ipList:
"${j}/32" if length(regexall("/", j)) <= 0 ]
что дает:
[
"103.77.234.74/32",
]
Комментарии:
1. Спасибо Марси. Я нашел много сообщений, в которых говорилось о поддержке цикла <условие> ? <истинное значение>: <ложное значение>, и я попробовал, как указано выше, но это так и не удалось. Моя версия terraform: Terraform v0.13.4
2. @user2920375 Я обновил ответ с правильным синтаксисом.