Основным ограничением большинства облачных платформ является то, что «пользовательские данные» или «настраиваемые метаданные» и c (терминология зависит от поставщика) представляют собой одну непрозрачную строку байтов. Интерпретация этих байтов зависит от того, какое программное обеспечение вы установили в образ виртуальной машины, которое его использует.
Обычно выбирается такое программное обеспечение cloud-init
. Если вы используете cloud-init
, то «пользовательские данные» могут быть предоставлены в нескольких различных форматах .
Основной способ предоставить несколько отдельных разделов для cloud-init
- через MIME-Multipart-архив , который представляет собой объединение нескольких значений, перемежающихся с заголовками, чтобы позволить cloud-init определить границы и понять, как вы собираетесь интерпретировать каждую часть.
Потому что cloud-init
является очень распространенным выбором программного обеспечения для интерпретации «пользовательских данных», Terraform имеет cloudinit
провайдера , который включает источник данных для создания архива 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
, чтобы увидеть, как она интерпретировала конфигурацию и что произошло, когда она попыталась предпринять эти действия.