Terraform - 模块输出到文件

Posted

技术标签:

【中文标题】Terraform - 模块输出到文件【英文标题】:Terraform - module output to file with for 【发布时间】:2021-12-17 23:29:15 【问题描述】:

我有一个问题,我创建了许多返回 id 的 VM,我的输出如下所示:

output "master_id" 
  value = tomap(
    for k, master in cloudstack_instance.master :
    k => master.id
  )


output "worker_id" 
  value = tomap(
    for k, worker in cloudstack_instance.worker :
    k => worker.id
  )

结果如下:

master_id = tomap(
  "adm-1" = "0765b24e-1bd9-42a8-acf6-3463be494574"
  "adm-2" = "2a19ba2e-9aee-4a0a-aaf4-efdf228b6ab3"
)
worker_id = tomap(
  "wrk-1" = "643cbd23-0323-4738-9eab-d5c453772a37"
  "wrk-2" = "7b088d49-de02-4a67-bcb9-b18146a332d5"
  "wrk-3" = "c81761ae-23cc-4a47-b989-8d37574cc258"
)

我想使用模板将结果保存到文件中,不幸的是我不知道如何在 for 循环中连接它:

output "ansible_inventory" 
  value = templatefile("$path.module/templates/inventory.tpl",
    
????
    
  )

我会很感激你的帮助

【问题讨论】:

1. master_idworker_id 已经是 Map 类型,不需要 tomap 函数。 2. 请阐明这些输出应该如何使用和/或出现在您的渲染模板中。在将变量值传递给templatefile 的参数中,您希望使用???? 实现什么目标尚不清楚。 此外,根据您的标签和输出名为 ansible_inventory 的事实,您可能需要检查关于从动态 Terraform 输出生成静态 Ansible 清单的问题和答案。您可能会在其中之一中找到您的解决方案。 ***.com/a/63846090/9472275 这有帮助吗? :D local_file 资源 【参考方案1】:

我自己找到了答案:

data "template_file" "inventory" 
  template = file("$path.module/templates/inventory.tpl")

  vars = 
    list_master = join("\n", formatlist("%s-%s ansible_user=root %s", var.prefix, keys(module.kubernetes.master_id), values(module.kubernetes.master_id)))
    list_worker = join("\n", formatlist("%s-%s ansible_user=root %s", var.prefix, keys(module.kubernetes.worker_id), values(module.kubernetes.worker_id)))
  


resource "null_resource" "inventories" 
  provisioner "local-exec" 
    command = "echo '$data.template_file.inventory.rendered' > $var.inventory_file"
  

  triggers = 
    template = data.template_file.inventory.rendered
  

我知道这个问题是不准确的,有时你只是不知道如何正确地问它;-)

感谢您的帮助!

【讨论】:

以上是关于Terraform - 模块输出到文件的主要内容,如果未能解决你的问题,请参考以下文章

在其他 terraform 文件中使用输出 terraform 文件

Terraform 嵌套模块调用和输出

如何在Ansible set_fact中使用fact?

远程 terraform 模块的输出变量

Terraform - 创建 EBS 的快照,然后将快照转换为 EBS 并附加到 EC2

使用 github-script@v5 操作提取 terraform 资源更改