Разбор стандартного текста на карту в ansible - PullRequest
0 голосов
/ 24 декабря 2018

Итак, я получил файл манифеста, который создает упаковщик.

Я хотел бы проанализировать зону доступности и AMI ID из нее на карте, чтобы позже я обновил свои переменные terraform соответствующими зонами.и AMIS.

Это файл:

{
  "builds": [
    {
      "name": "amazon-ebs",
      "builder_type": "amazon-ebs",
      "build_time": 1545650590,
      "files": null,
      "artifact_id": "us-east-1:ami-0caa33152d1160000",
      "packer_run_uuid": "ba1f3c4c-9da1-60ed-e45e-1dc374bc148b"
    }
  ],
  "last_run_uuid": "ba1f3c4c-9da1-60ed-e45e-1dc374bc148b"
}

grep соответствующей строки с регулярным выражением и очистка его была кусок пирога:

grep -E "ami-\w" manifest.json | tr -d "[:space:],\"" | tr ":" "," | sed 's/artifact_id,//g

(вывод: us-east-1, ami-0caa33152d1160000 )

однако я не смог найти, как зарегистрировать вывод на карту и получить к нему доступ позжецикл и условия.

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

Вам следует проанализировать файлы json с помощью jq и переписать его в файл json, который можно передать в terraform с аргументом -var-file, см. .

Sidenote: лучшая стратегия, чем передача состояния из Packer в Terraform, заключается в сохранении состояния в AWS.Устанавливая некоторые теги в результирующем AMI сборки Packer и затем используя data.aws_ami_id, чтобы найти последнюю версию.

0 голосов
/ 06 января 2019

Я бы так не поступил.На этом этапе я бы оставил упаковщика в покое, вы можете легко использовать ресурсы данных в Terraform, чтобы узнать идентификаторы ami, см. Пример здесь:

https://www.terraform.io/docs/providers/aws/d/ami.html

0 голосов
/ 24 декабря 2018

Учитывая, что переменная находится в файле packer-manifest.txt, вы можете использовать json_query .

vars_files:
  - packer-manifest.txt
tasks:
  - set_fact:
      ami_id: "{{ builds | json_query('[].artifact_id') }}"
  - debug:
      msg: "{{ ami_id[0].split(':')[1] }}"

Результат:

   "msg": "ami-0caa33152d1160000"
...