首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从terraform状态设置打包器变量

如何从terraform状态设置打包器变量
EN

Stack Overflow用户
提问于 2019-09-23 09:49:33
回答 3查看 875关注 0票数 3

使用openstack。我有一个使用packer构建镜像的两步过程:(1)基本上使用terraform创建基础设施,只需要一个路由到internet的网络和一些允许SSH的安全组(2)使用packer构建镜像

问题是我需要将terraform构建的网络的id提供给packer。我可以通过检查状态文件手动完成此操作,但我想知道自动执行此操作的最佳实践是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-24 00:01:32

您可以使用terraform output从状态中读取输出。您可以将它们作为打包器变量传递,例如

代码语言:javascript
复制
packer build -var network=$(terraform output network_uuid) template.json
票数 6
EN

Stack Overflow用户

发布于 2019-09-24 00:49:45

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

代码语言:javascript
复制
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

代码语言:javascript
复制
<...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...>
票数 0
EN

Stack Overflow用户

发布于 2021-09-02 19:32:16

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

如果您需要将所有变量从terraform输出传递到packer的'input':

代码语言:javascript
复制
packer build $(terraform output -json | jq -j -r 'to_entries[] | " -var \(.key)=\(.value | .value)"') template.pkr.hcl
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58054772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档