Если вы хотите передать переменную Terraform в шаблонный файл, вам нужно использовать шаблон.
В Terraform <0,12 вы захотите использовать источник данных <a href="https://www.terraform.io/docs/providers/template/d/file.html" rel="nofollow noreferrer">template_file
вот так:
resource "random_string" "pass" {
length = 20
}
data "template_file" "init" {
template = "${file("./startup.sh")}"
vars = {
password = "${random_string.pass.result}"
}
}
resource "google_compute_instance" "coreos-host" {
name = "my-vm"
machine_type = "n1-stantard-2"
zone = "us-central1-a"
boot_disk {
initialize_params {
image = "debian-cloud/debian-9"
size = 20
type = "pd-standard"
}
}
network_interface {
network = "default"
access_config {
network_tier = "STANDARD"
}
}
metadata_startup_script = "${data.template_file.startup_script.rendered}"
}
и измените ваш скрипт startup.sh
на:
echo myuser:${password} | chpasswd
Обратите внимание, что шаблон использует ${}
для интерполяции переменных, которые Terraform передает вскрипт. Если вам нужно использовать $
где-нибудь еще в вашем скрипте, вам нужно будет его избежать, используя $$
, чтобы получить литерал $
в вашем отрендеренном скрипте.
В Terraform 0.12+ естьновая templatefile
функция , которую можно использовать вместо template_file
источника данных, если вы предпочитаете:
resource "random_string" "pass" {
length = 20
}
resource "google_compute_instance" "coreos-host" {
name = "my-vm"
machine_type = "n1-stantard-2"
zone = "us-central1-a"
boot_disk {
initialize_params {
image = "debian-cloud/debian-9"
size = 20
type = "pd-standard"
}
}
network_interface {
network = "default"
access_config {
network_tier = "STANDARD"
}
}
metadata_startup_script = templatefile("./startup.sh", {password = random_string.pass.result})
}
В дополнение вы также должны заметитьпредупреждение о random_string
:
Этот ресурс использует криптографический генератор случайных чисел.
Исторически предполагаемое использование этого ресурса было неоднозначным, как в первоначальном примереэто в пароле. Для обратной совместимости он будет продолжать существовать. Для уникальных идентификаторов, пожалуйста, используйте random_id, для чувствительных случайных значений, пожалуйста, используйте random_password.
В качестве такового вы должны вместо этого использовать random_password
ресурс :
resource "random_password" "password" {
length = 16
special = true
override_special = "_%@"
}