Как установить переменную упаковщика из состояния terraform - PullRequest
1 голос
/ 23 сентября 2019

Работа с открытым стеком.У меня есть двухэтапный процесс создания образов с помощью упаковщика: (1) создание инфраструктуры с использованием terraform в основном, просто сеть, маршрутизируемая в Интернет, и некоторая группа безопасности, которая позволяет SSH (2) создавать образ с использованием упаковщика

ПроблемаМне нужно предоставить идентификатор сети, созданной terraform для упаковщика.Я могу сделать это вручную, проверив файл состояния, но мне было интересно, как лучше это автоматизировать?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Вы можете использовать terraform output для чтения выходных данных из состояния.Вы можете передать их как переменные упаковщика, например

packer build -var network=$(terraform output network_uuid) template.json
0 голосов
/ 23 сентября 2019

Еще одно предложение: вы можете позвонить в Packer из Terraform.

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...>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...