Проблема
После создания шаблона Ubuntu 20.04 (также пробовал 21.04) с помощью Packer я не могу установить новые настройки при создании экземпляра шаблона с помощью Terraform. Эта конфигурация не имела проблем с Debian 10.
Упаковщик
{
"строители": [
{
"ЦП": "{{пользователь `vm-cpu-num`}}",
"RAM": "{{пользователь `vm-mem-size`}}",
"RAM_reserve_all": правда,
"загрузочная_команда": [
"<esc><esc><esc><esc>e<ожидание>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"<дел><дел><дел><дел><дел><дел><дел><дел>",
"linux /casper/vmlinuz --- autoinstall ds=\"nocloud-net;seedfrom=http://{{.HTTPIP}}:{{.HTTPPort}}/\"<enter><wait>",
"initrd /casper/initrd<введите><ожидание>",
"загрузка <ввод>",
"<введите><f10><подождите>"
],
"boot_wait": "3 с",
"boot_order": "диск, компакт-диск",
"кластер": "{{пользователь `кластер`}}",
"convert_to_template": "истина",
"хранилище данных": "{{пользователь `хранилище данных`}}",
"disk_controller_type": "pvscsi",
"folder": "{{пользовательская `папка`}}",
"guest_os_type": "ubuntu64Guest",
"хост": "{{пользователь `хост`}}",
"http_directory": "http",
"http_port_min": "8000",
"http_port_max": "8000",
"небезопасное_соединение": "истина",
"iso_paths": ["{{пользовательские `iso-пути`}}"],
"сетевые адаптеры": [
{
"сеть": "{{пользователь `сеть`}}",
"сетевая_карта": "vmxnet3"
}
],
"пароль": "{{пользователь `vcenter-password`}}",
"shutdown_command": "echo '{{user `ssh-username`}}' | sudo -S shutdown -P сейчас",
"ssh_username": "{{пользователь `ssh-имя пользователя`}}",
"ssh_password": "{{пользователь `ssh-пароль`}}",
"ssh_timeout": "20 минут",
"ssh_handshake_attempts": "50",
"место хранения": [
{
"disk_size": "{{пользователь `vm-disk-1-size`}}",
"disk_thin_provisioned": правда
}
],
"тип": "vsphere-iso",
"имя пользователя": "{{пользователь `vcenter-username`}}",
"vcenter_server": "{{пользователь `vcenter-server`}}",
"vm_name": "{{пользователь `vm-name`}}"
}
],
"поставщики": [
{
"тип": "оболочка",
"inline": ["curl -sSL https://raw.githubusercontent.com/vmware/cloud-init-vmware-guestinfo/master/install.sh | sudo sh -"]
},
{
"тип": "оболочка",
"inline": ["mkdir $HOME/.ssh && echo {{пользователь `ssh-key` }} > $HOME/.ssh/authorized_keys"]
},
{
«тип»: «возможный»,
"playbook_file": "../../ansible/packer.yml"
},
{
"в линию": [
"echo 'Сборка шаблона Packer -- завершена'"
],
"тип": "оболочка"
}
]
}
файл пользовательских данных, распространяемый упаковщиком
#cloud-config
автоустановка:
версия: 1
локаль: en_US
пакеты:
- open-vm-инструменты
- питон-это-питон3
- облако-инициализация
клавиатура:
макет: en
вариант: мы
сеть:
сеть:
версия: 2
Ethernet:
ens192:
DHCP4: правда
DHCP-идентификатор: Mac
место хранения:
макет:
имя: лвм
личность:
имя хоста: убунту
имя пользователя: убунту
пароль: $6$rounds=4096$8dkK1P/oE$2DGKKt0wLlTVJ7USY.0jN9du8FetmEr51yjPyeiR.zKE3DGFcitNL/nF1l62BLJNR87lQZixObuXYny.Mf17K1
СШ:
сервер установки: да
данные пользователя:
отключить_корень: ложь
поздние команды:
- 'sed -i "s/dhcp4: true/&\n dhcp-identifier: mac/" /target/etc/netplan/00-installer-config.yaml'
- echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/ubuntu
сценарий очистки, вызываемый Ansible provisionner
#!/бин/ш
установить -е
# cloud init: перемещение файлов и изменение разрешений
#mv /tmp/cloud-init/* /etc/cloud/cloud.cfg.d/
chown -R корень:корень /etc/cloud/cloud.cfg.d/
# очистка данных cloud-init
rm -rf /var/lib/cloud/*
ln -s /var/lib/cloud/instances /var/lib/cloud/instance
# очистка логов cloud-init
rm -rf /var/log/cloud-init*
# очищаем файлы tmp
rm -rf /tmp/cloud-init
обрезать -s 0 /etc/machine-id
rm /var/lib/dbus/machine-id
ln -s /etc/идентификатор_машины /var/lib/dbus/идентификатор_машины
Терраформ
main.tf
ресурс "vsphere_virtual_machine" "VM" {
имя = "${var.hostname}"
#resource_pool_id = "${data.vsphere_compute_cluster.cluster.resource_pool_id}"
resource_pool_id = "${data.vsphere_resource_pool.pool.id}"
datastore_id = "${data.vsphere_datastore.datastore.id}"
num_cpus = var.vm_cpus
память = var.vm_ram
guest_id = "${data.vsphere_virtual_machine.template.guest_id}"
scsi_type = "${data.vsphere_virtual_machine.template.scsi_type}"
сетевой интерфейс {
network_id = "${data.vsphere_network.network.id}"
adapter_type = "${data.vsphere_virtual_machine.template.network_interface_types[0]}"
}
диск {
метка = "диск0"
размер = "${var.os_disk_size}"
нетерпеливо_scrub = "${data.vsphere_virtual_machine.template.disks.0.eagerly_scrub}"
thin_provisioned = "${data.vsphere_virtual_machine.template.disks.0.thin_provisioned}"
}
динамический "диск" {
for_each = var.data_disk ? [1] :[]
содержание {
# Все поля в ресурсе vsphere_virtual_disk в настоящее время неизменяемы, и в случае их изменения принудительно создается новый ресурс.
метка = "диск1"
прикрепить = правда
path = "${vsphere_virtual_disk.data-disk[0].vmdk_path}"
единица_номер = 1
datastore_id = "${data.vsphere_datastore.datastore.id}"
}
}
extra_config = {
"guestinfo.metadata" = base64gzip(templatefile("${path.module}/templates/metadata.tmpl", {hostname = var.hostname}))
"guestinfo.metadata.encoding" = "base64"
"guestinfo.userdata" = base64gzip(templatefile("${path.module}/templates/userdata.tmpl", {
имя хоста = var.имя хоста,
домен = var.domain
}))
"guestinfo.userdata.encoding" = "base64"
}
клон {
template_uuid = "${data.vsphere_virtual_machine.template.id}"
}
}
пользовательские данные.tmpl
#cloud-config
save_hostname: ложь
manage_etc_hosts: правда
Prefer_fqdn_over_hostname: правда
полное доменное имя: "${имя хоста}.${домен}"
выполнить команду:
- эхо привет > /корень/привет
- коснуться / корень / лол
Cloud-init v. 21.2-3-g899bfaa9-0ubuntu2~21.04.1 завершена во вторник, 28 сентября 2021 г., 15:55:02 +0000. Источник данных DataSourceNone. Вверх 19,12 секунды
2021-09-28 15:55:02,449 - cc_final_message.py[ПРЕДУПРЕЖДЕНИЕ]: использован резервный источник данных