Как извлечь атрибуты из разнотипной карты в terraform11
Я пытаюсь извлечь атрибут cidr_blocks
из ingress
правило aws_security_group
ресурс. В моем проекте terraform запущена версияv0.11.13
.
moduleA / main.tf:
terraform {
backend "s3" {}
required_version = "0.11.13"
}
provider "aws" {
region = "us-east-1"
version = "2.2.0"
}
...
# Create security group for CPS alb
resource "aws_security_group" "test" {
name = "test-sg"
vpc_id = "vpc-0xxxxxx"
description = "Test security group"
lifecycle {
create_before_destroy = true
}
ingress {
protocol = "tcp"
from_port = 443
to_port = 443
cidr_blocks = ["124.154.1.4/32","124.189.1.4/32"]
description = "HTTPS access"
}
ingress {
protocol = "tcp"
from_port = 80
to_port = 80
cidr_blocks = ["124.154.1.4/32","124.189.1.4/32"]
description = "HTTP access"
}
egress {
protocol = -1
from_port = 0
to_port = 0
cidr_blocks = ["0.0.0.0/0"]
}
}
moduleA / outputs.tf
output "cidrs_allowed_ingress"{
value = "${aws_security_group.test.ingress[0]}"
}
Это дает мне результат, подобный следующему:
cidrs_allowed_ingress = {
cidr_blocks = ["124.154.1.4/32","124.189.1.4/32"]
description = "HTTPS access"
from_port = "443"
to_port = "443"
protocol = "tcp"
...
}
Однако я не могу извлечь только cidr_blocks
с использованием функции поиска в terraform, поскольку значения карты не одного типа (некоторые из них являются списками, а некоторые - строками). Я не могу использовать другие расширенные функции в terraform12, потому что проект работает в terraform11.
Предложите способ извлечь только cidr_blocks из вышеприведенного вывода, как показано ниже.
Ожидаемый результат:
cidrs_allowed_ingress = ["124.154.1.4/32","124.189.1.4/32"]
или
cidrs_allowed_ingress = "124.154.1.4/32","124.189.1.4/32"
Заранее спасибо.
1 ответ
Я нашел способ получить ожидаемый результат, используя следующее:
output "cidrs_allowed_ingress"{
value = "${element(split("\"cidr_blocks\":[", element(split("\"],",
jsonencode(aws_security_group.test.ingress[0])),0)),1)}\""
}
Здесь я сначала конвертирую карту в объект json и выполняю несколько операций разделения и элементов списка, чтобы получить следующее.
cidrs_allowed_ingress = "124.154.1.4/32","124.189.1.4/32"
Я был бы признателен, если бы у кого-нибудь было лучшее и более чистое решение.