Я пытаюсь использовать провайдер для записи общедоступного IP-адреса вновь созданного экземпляра Azure в файл.
Мне удалось это сделать в единственном экземпляре.
resource "azurerm_public_ip" "helloterraformips" {
name = "terraformtestip"
location = "East US"
resource_group_name = "${azurerm_resource_group.test.name}"
public_ip_address_allocation = "dynamic"
tags {
environment = "TerraformDemo"
}
}
resource "null_resource" "ansible-provision" {
depends_on = ["azurerm_virtual_machine.master-vm"]
count = "${var.node-count}"
provisioner "local-exec" {
command = "echo \"[masters]\n ansible_ssh_host=${azurerm_public_ip.helloterraformips.ip_address} \" >> /home/osboxes/ansible-kube/ansible/inventory/testinv"
}
}
Проблема в том, что когда я пытаюсь сделать то же самое с созданной виртуальной машиной через цикл Terraform, я сталкиваюсь с проблемами при попытке получить к ним доступ.
resource "azurerm_public_ip" "mysvcs-k8sip" {
count = "${var.node-count}"
name = "mysvcs-k8s-ip-${count.index}"
location = "East US"
resource_group_name = "${azurerm_resource_group.mysvcs-res.name}"
public_ip_address_allocation = "dynamic"
}
resource "null_resource" "ansible-provision" {
provisioner "local-exec" {
command = "echo \"[masters]\n${element(azurerm_public_ip.mysvcs-k8sip.*.ip_address,count.index)} \" >> /home/osboxes/ansible-kube/ansible/inventory/inventory"
}
}
Я получаю эту ошибку
Ресурс 'azurerm_public_ip.mysvcs-k8sip' не имеет атрибута 'ip_address' для переменной 'azurerm_public_ip.mysvcs-k8sip. *. Ip_address'
Я копаюсь в семантике Terraform и пробую разные вещи, но пока это не работает, и каждая итерация для создания всех ресурсов также требует времени. Любая помощь или подсказка были бы очень полезны.
Спасибо,
count = "${var.node-count}"
наnull_resource
, чтобы гарантировать, что вы получите один экземпляр этого для каждого экземпляраazurerm_public_ip
- person Martin Atkins   schedule 21.04.2017count
. Если проблема заключается в том, что для выделения IP-адреса требуется некоторое время, вы можете попробовать сначала запустить terraform с-target=azurerm_public_ip.mysvcs=k8sip
, временно игнорируяnull_resource
, а затем снова запустить Terraform без специальных флагов, подождав некоторое время, пока IP-адреса не отобразятся. вверх, чтобы Terraform мог их найти при обновлении. Не идеально, я знаю ... - person Martin Atkins   schedule 22.04.2017