Основным ограничением большинства облачных платформ является то, что «пользовательские данные» или «настраиваемые метаданные» и т. Д. (Терминология зависит от поставщика) представляют собой одну непрозрачную строку байтов. Интерпретация этих байтов зависит от того, какое программное обеспечение вы установили в образ виртуальной машины, которое его использует.
Обычный выбор такого программного обеспечения - cloud-init
. Если вы используете cloud-init
, то «пользовательские данные» могут быть предоставлены в ряде различных форматы.
Основной способ предоставить cloud-init
несколько отдельных разделов - использовать архив MIME-Multipart, который представляет собой объединение нескольких значений, перемежающихся с заголовками, чтобы позволить cloud-init определить границы и понять, как вы намереваетесь интерпретировать каждую часть.
Поскольку cloud-init
- очень распространенный выбор программного обеспечения для интерпретации "пользовательских данных", Terraform имеет cloudinit
провайдера < / a>, который включает источник данных для создания архива MIME-Multipart а>.
data "cloudinit_config" "example" {
gzip = false
base64_encode = false
part {
content_type = "text/x-shellscript"
filename = "userdata_lin1"
content = <<-EOF
#!/bin/bash
crontab cronjobfileremote
EOT
}
part {
content_type = "text/x-shellscript"
filename = "userdata_lin2"
content = <<-EOF
#!/bin/bash
echo "hello"
EOT
}
}
Затем вы можете установить свой user_data
аргумент для вывода из этого источника данных:
user_data = data.cloudinit_config.example.rendered
Важно отметить, что с точки зрения Terraform и вашего поставщика облачных вычислений содержимое user_data
- это просто произвольная строка. Любые проблемы при обработке строки должны быть отлажены в самой целевой операционной системе путем чтения cloud-init
журналов, чтобы увидеть, как она интерпретировала конфигурацию и что произошло, когда она попыталась выполнить эти действия.
person
Martin Atkins
schedule
28.05.2020