У меня есть это:
formatlist( "cidrhost( cidrsubnet(%s, 1, 0), -3)", list("10.70.32.0/21"))
выход:
[
"cidrhost( cidrsubnet(10.70.32.0/21, 1, 0), -3)",
]
но я бы хотел, чтобы это было выполнено и результат был сохранен в списке возврата formatlist
. Могу ли я заставить Terraform отложить выполнение функций cidr
до тех пор, пока список форматов %s
не будет заменен элементом списка?
В настоящий момент, если я удалю кавычки и попробую, то просто не получится, например,
formatlist( cidrhost( cidrsubnet("%s", 1, 0), -3), list("10.70.32.0/21"))
cidrsubnet: invalid CIDR expression: invalid CIDR address: %s in:
${formatlist( cidrhost( cidrsubnet("%s", 1, 0), -3), list("10.70.32.0/21"))}
Что заставляет меня верить, что cidrsubnet
работает до того, как formatlist
сможет что-то сделать.
Обновление с примером:
Например, у меня есть длинный список подсетей класса c, которые мы подразделяем пополам, и из 1-й подсети мы используем 2-й последний используемый (не широковещательный) адрес для сервера mgmt каждой подсети.
например, список (на самом деле намного длиннее)
10.70.30.0/24
10.70.31.0/24
10.70.32.0/24
cidrsubnet("10.70.30.0/24", 1, 0)
разделится на две части и вернет 1-ю подсеть, т.е. 10.70.30.0/25
. Тогда cidrhost(10.70.30.0/25, -3)
даст мне 3-й от последнего адреса, т.е. 10.70.30.124
.
Итак, вывод из приведенного выше списка, который я хочу:
10.70.30.124/25
10.70.31.124/25
10.70.32.124/25
Учитывая отсутствие итераций в Terraform, я хотел включить вышеуказанную логику с formatlist
, чтобы перебрать список источников, выполнить cidr/subnet
magic и вывести желаемый список.
Большое спасибо.