Мне нужно, чтобы мой модуль возвратил либо список элементов, если вход является непустым списком, либо пустым списком
Мой модуль занимает possibly-empty-list
в качестве входных данных, и если этот список не пуст, создает некоторые ресурсы и возвращает определенный атрибут, который мне нужен вне модуля, например, так:
variable contexts {
type = "list"
}
resource "pagerduty_service" "p1" {
count = "${length(var.contexts)}"
name = "p1-${element(var.contexts, count.index)}"
description = "p1-${element(var.contexts, count.index)}"
auto_resolve_timeout = 14400
acknowledgement_timeout = 1800
escalation_policy = "${pagerduty_escalation_policy.p1.id}"
alert_creation = "create_alerts_and_incidents"
incident_urgency_rule {
type = "constant"
urgency = "high"
}
}
data "pagerduty_vendor" "cloudwatch" {
name = "Cloudwatch"
}
resource "pagerduty_service_integration" "p1_cloudwatch" {
count = "${length(var.contexts)}"
name = "Amazon Cloudwatch"
vendor = "${data.pagerduty_vendor.cloudwatch.id}"
service = "${element(pagerduty_service.p1.*.id, count.index)}"
}
output "integration_keys" {
value = "${pagerduty_service_integration.*.integration_keys}"
}
Проблема у меня в том, что когда этот модуль запускается первым с непустым списком, создавая таким образом ресурсы, он работает нормально. Если я запустлю его снова, произойдет сбой с этим исключением:
* module.pagerduty.output.integration_keys: Resource 'pagerduty_service_integration.possibly_empty_resource_list' does not have attribute 'integration_key' for variable 'pagerduty_service_integration.possibly_empty_resource_list.*.integration_key'
Я не могу придумать хороший способ получить это output
вернуть пустой список, если possibly_empty_resource_list
пустой.
Есть идеи?
РЕДАКТИРОВАТЬ:
Я попытался выполнить троичную проверку выходных данных, но по какой-то причине использование списка не поддерживается, поэтому это не сработает, однако я надеюсь, что это иллюстрирует то, что я пытаюсь сделать:
"${length(var.contexts) > 0 ? pagerduty_service_integration.*.integration_keys : list()}"
Решение:
output "instance_id" {
value = "${element(concat(aws_instance.example.*.id, list("")), 0)}"
}
1 ответ
В самом низу руководства по обновлению terraform до версии 0.11 есть раздел: https://www.terraform.io/upgrade-guides/0-11.html который показывает, что я использую для подсчитанных ресурсов.
например:output "instance_id" { value = "${element(concat(aws_instance.example.*.id, list("")), 0)}" }
(перенесено из комментария)