Объединить общедоступный IP-вывод с именем сервера - PullRequest
0 голосов
/ 11 марта 2019

Я написал скрипт Terraform для создания нескольких виртуальных машин Azure.

Количество созданных виртуальных машин основано на переменной type в моем .tfvars файле:

type = [ "Master-1", "Master-2", "Master-3", "Slave-1", "Slave-2", "Slave-3" ]

Мой variables.tf файл содержит local:

count_of_types = "${length(var.type)}"

И мой resources.tf файл содержит код, необходимый для фактического создания соответствующего количества виртуальных машин из этой информации:

resource "azurerm_virtual_machine" "vm" {
  count                 = "${local.count_of_types}"
  name                  = "${replace(local.prefix_specific,"##TYPE##",var.type[count.index])}-VM"
  location              = "${azurerm_resource_group.main.location}"
  resource_group_name   = "${azurerm_resource_group.main.name}"
  network_interface_ids = ["${azurerm_network_interface.main.*.id[count.index]}"]
  vm_size               = "Standard_B2ms"
  tags                  = "${local.tags}"

Наконец, в моем файле output.tf я вывел IP-адрес каждого сервера:

output "public_ip_address" {
  value = ["${azurerm_public_ip.main.*.ip_address}"]
}

Я создаю кластер Kubernetes с 1x Master и 1x Slave VM. С этой целью скрипт работает нормально - первый IP-выход является ведущим, а второй IP-выход - ведомым.

Однако, когда я перехожу на 8+ виртуальных машин, мне хотелось бы знать, какой IP относится к какой виртуальной машине.

Есть ли способ изменить вывод, включив type local или просто имя хоста сервера вместе с Public IP?

например. 54.10.31.100 // Master-1.

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Взгляните на formatlist (который является одной из функций для работы со строками) и может использоваться для перебора атрибутов экземпляра, тегов списка и других интересующих атрибутов.

output "ip-address-hostname" {
  value = "${
      formatlist(
        "%s:%s",
        azurerm_public_ip.resource_name.*.fqdn,
        azurerm_public_ip.resource_name.*.ip_address
      )
    }"
}

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

Доступно дополнительное чтение - https://www.terraform.io/docs/configuration/functions/formatlist.html

0 голосов
/ 11 марта 2019

Ответ Раунака Джавара указал мне правильное направление и поэтому получил зеленую галочку.

Для справки, вот точный код, который я использовал в конце:

output "public_ip_address" {
  value = "${formatlist("%s: %s", azurerm_virtual_machine.vm.*.name, azurerm_public_ip.main.*.ip_address)}"
}

Это привело к следующему выводу:

Hostname/IP output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...