Столкнулся с проблемой во время работы над кодом terraform, написал небольшой пример и надеюсь, что кто-то из вас поможет мне решить мою проблему.
Текущий код выглядит так:
variable "aws-subnets" {
description = "Test rule"
default = [
"10.0.0.0/32:us-east-1-s3",
"10.0.0.1/32:us-east-2-s3",
"10.0.0.2/32",
"",
]
}
data "template_file" "ipset-wrapper" {
count = "${length(var.aws-subnets)}"
template = <<TXT
$${SUBNET_RANGE} comment $${SUBNET_COMMENT}
TXT
vars {
SUBNET_RANGE = "${element(split(":",var.aws-subnets[count.index]),0) != "" ? "${element(split(":",var.aws-subnets[count.index]),0)}" : "no_ip" }"
SUBNET_COMMENT = "${element(split(":",var.aws-subnets[count.index]),1) != "" ? "${element(split(":",var.aws-subnets[count.index]),1)}" : "no_comment_provided" }"
),2))}"
}
}
output "ipset-rules" {
value = "${data.template_file.ipset-wrapper.*.rendered}"
}
Вывод теперь:
Outputs:
ipset-rules = [
10.0.0.0/32 comment us-east-1-s3
,
10.0.0.1/32 comment us-east-2-s3
,
10.0.0.2/32 comment 10.0.0.2/32
,
no_ip comment 0 no_comment_provided
]
3d-строка, вместо возврата неизвестного элемента или элемента пустого, вернула последний элемент из команды split, поэтому условие:
${element(split(":",var.aws-subnets[count.index]),1) != ""}
не работаетдля меня, как и ожидалось
Каков наилучший подход в этом случае для написания кода, если второй индекс не был определен?
Я понимаю, что код:
SUBNET_COMMENT = "${element(split(":",var.aws-subnets[count.index]),1) != element(split(":",var.aws-subnets[count.index]),0) ? "${element(split(":",var.aws-subnets[count.index]),1)}" : "no_comment_provided" }"
хорошо работает в этом случае, но если не сработает, если у меня будет более 2 индексов.
любая помощь?