Как иметь буквенную строку $ {что-то} в файле данных шаблона - PullRequest
0 голосов
/ 28 августа 2018

У меня есть файл шаблона, который создает файл fluentd и вставляет различные переменные. Я сейчас пытаюсь включить этот плагин , который ожидает найти свои собственные переменные в файле конфигурации. Проблема заключается в том, что Terraform определяет переменную в шаблоне, например ${variable}, и этот плагин ожидает, что его переменные в файле будут найдены как литерал ${variable}

Как я могу сказать terraform не интерполировать ${} в файле, но фактически передавать всю эту строку?

Фрагмент файла:

<filter tomcat.logs>
  @type record_transformer
  <record>
    customer ${customer}
    environment ${environment}
    application ${application}
  </record>
</filter>

Выше ${} - все переменные, которые я определил для своего шаблона. Теперь мне нужно добавить такой раздел.

  <record>
    hostname      ${tagset_name}
    instance_id   ${instance_id}
    instance_type ${instance_type}
    az            ${availability_zone}
    private_ip    ${private_ip}
    vpc_id        ${vpc_id}
    ami_id        ${image_id}
    account_id    ${account_id}
  </record>

Где все это не переменные, а то, как это на самом деле должно выглядеть в отображаемом шаблоне. Я попытался поменять их местами, чтобы они походили на $${account_id}, но это просто приводит к отображению account_id в файле.

data "template_file" "app" {
  template = "${file("templates/${var.application}.tpl")}"

  vars {
    customer               = "${var.customer}"
    environment            = "${var.environment}"
    application            = "${var.application}"
  }
}

Вот разбивка того, что происходит.

In the user data I have "instance_type $${instance_type}"  
The launch    configuration that is created for the instances, shows "instance_type    ${instance_type}"  
The actual file that is present on AWS shows    "instance_type"

1 Ответ

0 голосов
/ 29 августа 2018

Наконец-то понял это. Ответ на помеченный повторяющийся вопрос является неправильным для этого экземпляра.

template.tpl содержит

cat <<EOT > /root/test.file
db.type=${db_type}
instance_type \$${instance_type}
EOT

Результат

Error: Error refreshing state: 1 error(s) occurred:

* module.autoscaling_connect.data.template_file.app: 1 error(s) occurred:

* module.autoscaling_connect.data.template_file.app: data.template_file.app: failed to render : 27:16: unknown variable accessed: bogus_value

template.tpl содержит

cat <<EOT > /root/test.file
db.type=${db_type}
instance_type \$${instance_type}
EOT

Результаты в конфигурации запуска, содержащей

cat <<EOT > /root/test.file
db.type=mysql
instance_type \${instance_type}
EOT

Результаты в файле, который мы создали в экземпляре, содержащем

db.type=mysql
instance_type ${instance_type}

Короче говоря, чтобы получить ${something} в файле, созданном из файла шаблона terraform, вы должны использовать \$${something} в файле .tpl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...