【问题标题】:Iterate over multiple outputs in Terraform template file迭代 Terraform 模板文件中的多个输出
【发布时间】:2022-11-07 23:42:58
【问题描述】:

我正在尝试使用 Terraform 创建一个 Ansible 库存文件,格式如下

10.10.10.10  #test-vm

输出.tf

output "vm_name" {
  value = toset([
    for vm_names in azurerm_linux_virtual_machine.vm : vm_names.name
  ])
}

output "vm_ips" {
  value = toset([
    for vm_ips in azurerm_linux_virtual_machine.vm : vm_ips.private_ip_address  ])
}

地形模板文件:

%{ for vm in vm_ips}:
%{for vm in vm_names ~}:
${mc} ${mc_name}
%{ endfor ~}
%{ endfor ~}

以上产生

10.1.0.14 #vm1
10.1.0.14 #vm2
10.1.0.7 #vm1
10.1.0.7 #vm2

代替

10.1.0.14 #vm1
10.1.0.7 #vm2

任何建议如何正确迭代两个输出?

【问题讨论】:

    标签: for-loop ansible terraform ansible-inventory terraform-template-file


    【解决方案1】:

    您应该创建一个映射或元组列表,以便将虚拟机名称和 IP 链接起来。

    output "vms" {
      value = [for vm in azurerm_linux_virtual_machine.vm : {
        name = vm.name, 
        ip = vm.private_ip_address 
      }]
    }
    

    然后在您的模板中:

    %{ for vm in vms ~}
    ${vm.ip} #${vm.name}
    %{ endfor ~}
    

    这将呈现在预期的

    10.1.0.14 #vm1
    10.1.0.7 #vm2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-05
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 2021-12-17
      • 2020-07-26
      • 2023-03-17
      相关资源
      最近更新 更多