如何从Terraform状态设置Packer变量

时间:2019-09-23 01:49:33

标签: terraform packer

使用openstack。我有两步使用打包程序来构建映像: (1)基本上使用terraform创建基础架构,只是将网络路由到Internet和一些允许SSH的安全组 (2)使用打包程序构建图像

问题是我需要向打包程序提供terraform构建的网络的ID。我可以通过检查状态文件来手动完成此操作,但是我想知道什么是使它自动化的最佳实践?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

另一个建议:您可以从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...>