gpt4 book ai didi

azure - Terraform local-exec Provisioner 在多个 Azure 虚拟机上运行

转载 作者:行者123 更新时间:2023-12-03 00:26:57 25 4
gpt4 key购买 nike

我有一个有效的 TF 设置,可以在 Azure 中启动多个 Linux VM。我在 null_resource 中运行本地执行配置程序来执行 Ansible playbook。我从 TF 状态文件中提取私有(private) IP 地址。状态文件存储在本地。

我最近配置了 Azure 后端,现在状态文件存储在存储帐户中。

我已经修改了本地配置程序,并尝试获取所有私有(private) IP 地址来运行 Ansible playbook,如下所示:

resource "null_resource" "Ansible4Ubuntu" {
provisioner "local-exec" {
command = "sleep 20;ansible-playbook -i '${element(azurerm_network_interface.unic.*.private_ip_address, count.index)}', vmlinux-playbook.yml"

我也尝试过:

resource "null_resource" "Ansible4Ubuntu" {
provisioner "local-exec" {
command = "sleep 20;ansible-playbook -i '${azurerm_network_interface.unic.private_ip_address}', vmlinux-playbook.yml"

它们都仅适用于第一个虚拟机,并忽略其余虚拟机。我也尝试过使用 count.index+1 和 self.private_ip_address,但没有运气。

实际结果:TF 仅向 Ansible 提供第一个虚拟机的私有(private) IP。

预期结果:TF 向 Ansible 提供所有私有(private) IP 的列表,以便它可以针对所有这些 IP 运行 playbook。

PS:我也在考虑使用 TF 的 remote_state 数据结构,但似乎状态文件也包含来自以前版本的 IP,因此很难提取适合当前版本的 IP。

如果有任何帮助,我将不胜感激。

谢谢阿斯加尔

最佳答案

正如 Matt 所说,null_resource 仅运行一次,因此它仅适用于第一个虚拟机,并忽略其余虚拟机。您需要使用网卡列表为 null_resource 配置触发器,使其多次运行。示例代码如下:

resource "null_resource" "Ansible4Ubuntu" {

triggers = {
network_interface_ids = "${join(",", azurerm_network_interface.unic.*.id)}"
}

provisioner "local-exec" {
command = "sleep 20;ansible-playbook -i '${join(" ", azurerm_network_interface.unic.*.private_ip_address)}, vmlinux-playbook.yml"
}

}

您可以根据需要更改其中的某些内容。有关信息,请参阅null_resource .

关于azure - Terraform local-exec Provisioner 在多个 Azure 虚拟机上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55955007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com