Использование нескольких файлов user_data в Terraform

Я пытаюсь создать общий файл user_data для общих задач, таких как создание папки и установка определенного пакета, а также отдельный файл user_data для конфигурации конкретного приложения.

Я пробую следующее -

user_data = "${data.template_file.userdata_common.rendered}", "${data.template_file.userdata_master.rendered}"

С этими конфигами -

Стандартный шаблон данных пользователя

data "template_file" "userdata_common" {
  template = "${file("${path.module}/userdata_common.sh")}"

  vars {
    "ALBTarget"          = "${var.ALBTarget}"
    "s3bucket"           = "${var.s3bucket}"
    "centrifydomain"     = "${lookup(var.centrifydomain, format("%s-%s", lower(var.env),var.region))}"
    "centrifyadgroup"    = "${lookup(var.centrifyadgroup, format("%s-%s", lower(var.env),var.region))}"
  }
}

Конфигурация для конкретного приложения

data "template_file" "userdata_master" {
  template = "${file("${path.module}/userdata_master.sh")}"

  vars {
    "ALBTarget"          = "${var.ALBTarget}"
    "s3bucket"           = "${var.s3bucket}"
    "centrifydomain"     = "${lookup(var.centrifydomain, format("%s-%s", lower(var.env),var.region))}"
    "centrifyadgroup"    = "${lookup(var.centrifyadgroup, format("%s-%s", lower(var.env),var.region))}"
  }
}

Когда я планирую, я получаю следующую ошибку:

Failed to load root config module: Error parsing /terraform/main.tf: key ${data.template_file.userdata_common.rendered}"' expected start of object ('{') or assignment ('=')

Возможно ли это с помощью Terraform (0.9.3)?

Если нет, как лучше всего это сделать с помощью Terraform?


person Rohit Sarkar    schedule 26.04.2017    source источник


Ответы (2)


Вы пробовали template_cloudinit_config?

Добавьте ниже коды.

data "template_cloudinit_config" "master" {
  gzip          = true
  base64_encode = true

  # get common user_data
  part {
    filename     = "common.cfg"
    content_type = "text/part-handler"
    content      = "${data.template_file.userdata_common.rendered}"
  }

  # get master user_data
  part {
    filename     = "master.cfg"
    content_type = "text/part-handler"
    content      = "${data.template_file.userdata_master.rendered}"
  }

}

# sample code to use it.
resource "aws_instance" "web" {
  ami           = "ami-d05e75b8"
  instance_type = "t2.micro"
  user_data     = "${data.template_cloudinit_config.master.rendered}"
}

Сообщите мне, если это сработает.

person BMW    schedule 27.04.2017
comment
Это полностью работает ... Я просто тестирую, чтобы убедиться, что результаты согласованы .... Спасибо ... - person Rohit Sarkar; 27.04.2017
comment
что такое common_cfg и master.cfg? - person user389955; 20.12.2017
comment
@ user389955 terraform.io/docs/providers/template/d/ - person shwz; 03.08.2018
comment
Я думал, part-handler предназначен для скриптов Python - cloudinit.readthedocs.io/ ru / latest / themes / - person Snowcrash; 17.01.2019

Вы можете использовать «Provisioner» для изменения инфраструктуры, которую вы создаете с помощью Terraform. Вот их пример https://www.terraform.io/intro/getting-started/provision.html

person JeswinKNinan    schedule 21.03.2018