Как я могу вывести источник данных, который использует счетчик? - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу вывести каждую созданную виртуальную машину и их UUID, например,

data "vsphere_virtual_machine" "vms" {
  count            = "${length(var.vm_names)}"
  name             = "${var.vm_names[count.index]}"
  datacenter_id = "12345"
}

output "vm_to_uuid" {
  # value = "${data.vsphere_virtual_machine.newvms[count.index].name}"
  value = "${data.vsphere_virtual_machine.newvms[count.index].id}"
}

Пример вывода, который я ищу:

"vm_to_uuids":[
    {
      "name":"node1",
      "id":"123456",
    },
    {
      "name":"node2",
      "id":"987654",
    }
]

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Одна вещь, которую вы могли бы сделать (если вы хотели именно этот вывод), это использовать formatlist(format, args, ...)

data "vsphere_virtual_machine" "vms" {
    count            = "${length(var.vm_names)}"
    name             = "${var.vm_names[count.index]}"
    datacenter_id = "12345"
}

output "vm_to_uuid" {
    value = "${join(",", formatlist("{\"name\": \"%s\", \"id\": \"%s\"}", data.vsphere_virtual_machine.newvms.*.name, data.vsphere_virtual_machine.newvms.*.id))}"   
}

Не проверял код, но вы поняли идею.В частности, экранирование кавычек - всего лишь предположение, но отсюда его легко понять.

Что происходит, если вы берете два списка (имена и идентификаторы) и форматируете строки dict из каждой записи, после чего вы объединяете их вместеиспользуя запятую.

0 голосов
/ 03 декабря 2018

Используйте атрибут подстановочного знака в выражении, заданном для вывода значение , чтобы получить список идентификаторов для созданных виртуальных машин. Например,

output "vm_to_uuids" {
  value = "${data.vsphere_virtual_machine.*.id}"
}

Необходимый синтаксис, представленный в вашем вопросе, является одним из исключений, когда предпочтение отдается функции над формой.Написание конфигурации terraform, которая обеспечивает это не просто.Возможно, я предлагаю использовать другие более простые способы вывода этой же информации.

Могут быть выведены имена, сопоставленные с идентификаторами:

output "vm_to_uuids" {
  value = "${zipmap(
              data.vsphere_virtual_machine.*.name,
              data.vsphere_virtual_machine.*.id)}"
}

Карта имен и идентификаторов может быть выведена в столбцеманера:

output "vm_to_uuids" {
  value = "${map("name",
              data.vsphere_virtual_machine.*.name,
              "id",
              data.vsphere_virtual_machine.*.id)}"
}

Список имен и идентификаторов может быть выведен в виде столбцов:

output "vm_to_uuids" {
  value = "${list(
              data.vsphere_virtual_machine.*.name,
              data.vsphere_virtual_machine.*.id)}"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...