【问题标题】:Passing in variables from Terraform to Ansible with spaces使用空格将变量从 Terraform 传递到 Ansible
【发布时间】:2020-06-12 22:51:18
【问题描述】:

目前我在 json 中有一个 tfvars 文件,用空格设置键值。例如:

{
  "customer": "Test Customer",
}

然后,我将此变量传递给使用 cloud-config 在预置的 EC2 主机上本地运行的 ansible playbook 命令

sudo ansible-playbook /Playbook.yml --extra-vars 'customer=${var.customer}'

在那本剧本中,我有一个许可证文件,我想用 Ansible 的模板模块进行传播。目前许可证文件将获得测试,但不是测试客户(因为空间)。我该如何解决这个问题?

另外还有一点,除了 -e extra variables 之外,是否有更好/更简洁的方式将 terraform 变量传递给 Terraform 配置中的 ansible playbook 命令?

【问题讨论】:

    标签: json ansible jinja2 terraform


    【解决方案1】:

    我认为这对你有用:

    sudo ansible-playbook /Playbook.yml --extra-vars "customer='${var.customer}'"
    

    注意: 为了更好的设计,我真的建议您将这两个工具相互分离。不要在 ansible 和 terraform 之间进行紧密耦合,因为将来您可能会决定开始使用不同的工具,这将迫使您重写整个 IaC。

    【讨论】:

    • 我实际上同意你的观点,尽管我不太确定最好的方式去耦合它,至少一点点。我使用 Terraform 启动的实例需要我使用 Ansible playbook 进行的后期配置。你会怎么做?
    • 我仍然会保留 ansible 的后期配置责任。我同意你不能完全解耦它们,但是在考虑未来时,不要为这两种工具使用相同的变量文件(正如我理解你的帖子所做的那样)。顺便问一下,我的回答是否帮助您解决了问题?
    • 感谢 Gilad,您的评论确实有助于传递完整的字符串,所以谢谢您。我赞成它。然而,我现在面临的另一个问题是传递一个数字。你会碰巧知道怎么做吗?我正在尝试使用 jsonencode 函数并将变量现在作为 json 传递,但这仍然不起作用。 terraform.io/docs/configuration/functions/jsonencode.html
    • 你到底是什么意思?我建议你打开一个关于这个的不同帖子(并提交我提供的答案帮助你解决这个帖子),因为这是一个不同的问题。因此,请创建一个包含所有详细信息的新帖子,我会为您提供帮助。
    • 我做到了,最终找到了答案。感谢您对吉拉德的所有帮助!
    猜你喜欢
    • 2020-06-17
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2022-11-07
    • 1970-01-01
    • 2020-11-21
    相关资源
    最近更新 更多