【问题标题】:How to set a packer variable from a terraform state如何从 terraform 状态设置打包程序变量
【发布时间】:2020-01-23 01:42:25
【问题描述】:

使用 openstack。我有两个步骤来使用打包器构建图像: (1) 基本上使用 terraform 创建基础设施,只是一个路由到互联网的网络和一些允许 SSH 的安全组 (2) 使用打包器构建镜像

问题是我需要将 terraform 构建的网络的 ID 提供给打包机。我可以通过检查状态文件手动执行此操作,但我想知道自动执行此操作的最佳做​​法是什么?

【问题讨论】:

    标签: terraform packer


    【解决方案1】:

    您可以使用terraform output 读取状态的输出。您可以将它们作为 Packer 变量传递,即

    packer build -var network=$(terraform output network_uuid) template.json
    

    【讨论】:

    • 这正是我要找的,我完全错过了输出变量的机制以及如何查询它们。谢谢!
    • 使用terraform output --raw 避免字符串变量周围出现虚假引号
    【解决方案2】:

    另一个建议:你可以从 Terraform 调用 Packer。

    resource "null_resource" "packer_runner" {
      triggers = {
        install_script = "${sha1(file("${path.module}/scripts/app/install.sh"))}"
        packer_file    = "${sha1(file("${path.module}/packer/packer.json"))}"
      }
    
      provisioner "local-exec" {
        working_dir = "${path.module}"
        command     = "packer build -var 'ami_name=${var.ami_name}' -var 'aws_region=${var.aws_region}' -var 'network_id=${var.network_id}' -var -parallel-builds=1 ./packer/packer.json"
        interpreter = ["PowerShell", "-Command"]
      }
    }
    

    然后,在packer.json

    <...stuff...>
      "provisioners": [
        {
          "type": "shell",
          "inline": "/usr/bin/cloud-init status --wait"
        },
        {
          "type": "shell",
          "environment_vars": [
            "NETWOR_ID={{user `network_id`}}"
          ],
          "script": "./scripts/app/install.sh"
        },
    <...more stuff...>
    

    【讨论】:

    • 这也可以,但不能很好地集成到我的工作流程中。谢谢!
    【解决方案3】:

    想将其作为建议添加到答案above,但编辑队列已满。然后单独添加。

    如果您需要将所有变量从 terraform 输出传递到打包器的“输入”:

    packer build $(terraform output -json | jq -j -r 'to_entries[] | " -var \(.key)=\(.value | .value)"') template.pkr.hcl
    

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 2019-12-05
      • 2022-01-05
      • 2021-12-11
      • 1970-01-01
      • 2019-08-31
      • 2017-06-16
      • 2019-07-18
      • 1970-01-01
      相关资源
      最近更新 更多