Terraform 引用循环资源值
Terraform reference looped resources value
我正在尝试使用配置器将新创建的 Azure 实例的 public IP 地址写入文件。
我能够为一个实例做到这一点。
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"
}
}
问题是,当我尝试在 VM 通过 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' 没有变量 'azurerm_public_ip.mysvcs-k8sip.*.ip_address'
的属性 'ip_address'
我正在深入研究 Terraform 的语义并尝试各种方法,但到目前为止它不起作用,而且每次迭代创建所有资源也需要时间。任何帮助或提示都会非常有用。
谢谢,
我能够做到并使它正常工作的一个解决方法是 运行 "terraform apply -target=azurerm_virtual_machine.master-vm" 首先创建虚拟机。然后 运行 terraform 再次应用,然后 运行 一个拥有这个
的供应商
resource "null_resource" "ansible-k8snodes"{
count = "${var.node-count}"
provisioner "local-exec" {
command = "echo \"\n[nodes]\n ${element(azurerm_public_ip.mysvcs-k8sip.*.ip_address,count.index+1)} ansible_ssh_user=testadmin ansible_ssh_pass=Password1234! \" >> /home/osboxes/ansible-kube/ansible/inventory/inventory"
}
}
@Martin - 计数或不计数,没关系,每次都失败。事实上,我的问题上面发布的单个实例代码似乎只工作了一次,当我再次尝试时,它没有工作。感谢您的帮助。
我正在尝试使用配置器将新创建的 Azure 实例的 public IP 地址写入文件。
我能够为一个实例做到这一点。
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"
}
}
问题是,当我尝试在 VM 通过 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' 没有变量 'azurerm_public_ip.mysvcs-k8sip.*.ip_address'
的属性 'ip_address'我正在深入研究 Terraform 的语义并尝试各种方法,但到目前为止它不起作用,而且每次迭代创建所有资源也需要时间。任何帮助或提示都会非常有用。
谢谢,
我能够做到并使它正常工作的一个解决方法是 运行 "terraform apply -target=azurerm_virtual_machine.master-vm" 首先创建虚拟机。然后 运行 terraform 再次应用,然后 运行 一个拥有这个
的供应商resource "null_resource" "ansible-k8snodes"{
count = "${var.node-count}"
provisioner "local-exec" {
command = "echo \"\n[nodes]\n ${element(azurerm_public_ip.mysvcs-k8sip.*.ip_address,count.index+1)} ansible_ssh_user=testadmin ansible_ssh_pass=Password1234! \" >> /home/osboxes/ansible-kube/ansible/inventory/inventory"
}
}
@Martin - 计数或不计数,没关系,每次都失败。事实上,我的问题上面发布的单个实例代码似乎只工作了一次,当我再次尝试时,它没有工作。感谢您的帮助。