Terraform - как использовать экспортированные атрибуты?
Я изучаю terraform, в примере ниже первый раздел помещает виртуальную машину и возвращает идентификатор этой виртуальной машины. Во втором разделе к vm добавляется дополнительный диск. Мне нужно ввести идентификатор в параметр virtual_machine_id, но я не знаю, как это сделать (cloudstack_instance.worker[$name].id не работает). Может у кого-нибудь есть подсказка?
2 ответа
Выходные данные могут содержать несколько элементов. Если имеется более одного выхода, потребуется некоторая логика. Но для этого варианта использования предположим, что вывод из
cloudstack_instance
это 1 элемент.
Попробуй это:
virtual_machine_id = join(", ", cloudstack_instance.worker.*.id)
Судя по вашей конфигурации, вы собираетесь объявить один диск на каждую виртуальную машину, каждый из которых будет подключен к соответствующей виртуальной машине.
Эта ситуация хорошо подходит для объединения ресурсов в цепочку , что означает использование восходящего ресурса напрямую в качестве ресурса нисходящего и, таким образом, буквально заявляет, что диски коррелируют с виртуальными машинами:
resource "cloudstack_disk" "worker" {
for_each = cloudstack_instance.worker
name = "${var.prefix}-${each.key}"
attach = "true"
disk_offering = "Custom-RBD"
size = 50
virtual_machine_id = each.value.id
zone = var.zone
project = var.project_id
}
Поскольку
cloudstack_instance
ресурс также объявлен, оценивает сопоставление от ключей экземпляра к объектам. Это означает, что в приведенном выше примере
each.value
относится к любому значению элемента в
cloudstack_instance.worker
соответствует ключу
each.key
.
Я также удалил
depends_on
аргумент, потому что он избыточен: Terraform уже видит эту зависимость, потому что
for_each
содержит ссылку на этот ресурс.