Общий IP-вывод Terraform на Azure - PullRequest
0 голосов
/ 14 декабря 2018

Я следую примеру [1], чтобы вывести общедоступный IP-адрес новой виртуальной машины, созданной в Azure с помощью Terraform.Он работает нормально при создании только 1 ВМ, но когда я добавляю счетчик (по умолчанию 2), он ничего не выводит.

Вот как я изменяю файл .tf:

variable "count" {
    default = "2"
}
...

resource "azurerm_public_ip" "test" {
  name                         = "test-pip"
  location                     = "${azurerm_resource_group.test.location}"
  resource_group_name          = "${azurerm_resource_group.test.name}"
  public_ip_address_allocation = "Dynamic"
  idle_timeout_in_minutes      = 30

  tags {
    environment = "test"
  }
}
...

data "azurerm_public_ip" "test" {
  count               = "${var.count}"
  name                = "${element(azurerm_public_ip.test.*.name, count.index)}"
  resource_group_name = "${azurerm_virtual_machine.test.resource_group_name}"
}

output "public_ip_address" {
  value = "${data.azurerm_public_ip.test.*.ip_address}"
}

После терраформы применить:

Outputs:

public_ip_address = [
    ,

]

[1] https://www.terraform.io/docs/providers/azurerm/d/public_ip.html

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Итак, я столкнулся с точно такой же проблемой при развертывании в Azure.Вышеупомянутые решения работали (решение Чарльза Сюя), с одним предупреждением ... Мне пришлось: жестко кодировать имя группы ресурсов , а также добавлять в зависимости от предложения к выходному блоку.

Я уверен, что приведенные выше ответы - правильный путь, однако значение ключа группы ресурсов в объекте данных "azurerm_public_ip" необходимо жестко закодировать ...

enter image description here

enter image description here

enter image description here

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

Причина, по которой вы не можете вывести несколько общедоступных IP-адресов, заключается в том, что вы не создаете несколько общедоступных IP-адресов.Поэтому, когда вы используете ${data.azurerm_public_ip.test.*.ip_address} для их вывода, эти ресурсы для вас отсутствуют.

Для terraform вы можете добавить count в ресурс azurerm_public_ip, чтобы создать несколько общедоступных IP-адресов и вывести их с помощьюazurerm_public_ip.test.*.ip_address вот так:

variable "count" {
    default = "2"
}
...

resource "azurerm_public_ip" "test" {
  count                        = "${var.count}"
  name                         = "test-${count.index}-pip"
  location                     = "${azurerm_resource_group.test.location}"
  resource_group_name          = "${azurerm_resource_group.test.name}"
  public_ip_address_allocation = "Static"
  idle_timeout_in_minutes      = 30

  tags {
    environment = "test-${count.index}"
  }
}
...

output "public_ip_address" {
  value = "${azurerm_public_ip.test.*.ip_address}"
}

Снимок экрана с результатом выглядит так:

enter image description here

Я сделал тест, просто создаюпублика.Поэтому я изменил метод выделения на статический и вывел его вместе с ресурсом.

Если вы хотите использовать data для ссылки на публичные IP-адреса.Код будет выглядеть так:

data "azurerm_public_ip" "test" {
  count               = "${var.count}"
  name                = "${element(azurerm_public_ip.test.*.name, count.index)}"
  resource_group_name = "${azurerm_resource_group.test.name}"
}

output "public_ip_address" {
  value = "${data.azurerm_public_ip.test.*.ip_address}"
}

Надеюсь, это поможет вам.Если вам нужна дополнительная помощь, пожалуйста, дайте мне знать.

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