Как использовать внешний источник данных в terraform с помощью bash-скрипта - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть скрипт bash, который будет возвращать один идентификатор AMI.Я хочу использовать этот AMI ID, возвращенный из сценария bash, в качестве входных данных для моей конфигурации запуска.

data "external" "amiid" {
  program = ["bash", "${path.root}/scripts/getamiid.sh"]
}

resource "aws_launch_configuration" "bastion-lc" {
  name_prefix                 = "${var.lc_name}-"
  image_id                    = "${data.external.amiid.result}"
  instance_type               = "${var.instance_type}"
  placement_tenancy           = "default"
  associate_public_ip_address = false
  security_groups             = ["${var.bastion_sg_id}"]
  iam_instance_profile        = "${aws_iam_instance_profile.bastion-profile.arn}"

  lifecycle {
   create_before_destroy = true
  }
}

Когда я запускаю это с планом terraform, я получаю сообщение об ошибке

* module.bastion.data.external.amiid: 1 error(s) occurred:

* module.bastion.data.external.amiid: data.external.amiid: command "bash" produced invalid JSON: invalid character 'a' looking for beginning of object key string

Вот скрипт getamiid.sh:

#!/bin/bash
amiid=$(curl -s "https://someurl" | jq -r 'map(select(.tags.osVersion | startswith("os"))) | max_by(.tags.creationDate) | .id')
echo -n "{ami_id:\"${amiid}\"}"

при запуске скрипта он возвращает:

{ami_id:"ami-xxxyyyzzz"}

1 Ответ

0 голосов
/ 10 сентября 2018

Работает с:

#!/bin/bash
amiid=$(curl -s "someurl" | jq -r 'map(select(.tags.osVersion | startswith("someos"))) | max_by(.tags.creationDate) | .id')
echo -n "{\"ami_id\":\"${amiid}\"}"

, что возвращает

{"ami_id":"ami-xxxyyyzzz"}

Затем в ресурсе terraform мы вызываем его следующим образом:

image_id = "${element(split(",", data.external.amiid.result["ami_id"]), count.index)}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...