Рейтинг:0

Terraform DataSource DataSourceNone с Ubuntu 20.04

флаг fr

Проблема

После создания шаблона 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[ПРЕДУПРЕЖДЕНИЕ]: использован резервный источник данных
Рейтинг:0
флаг fr

Проблема специфична для VMware vSphere. Починить это :

rm -rf /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
rm -rf /etc/cloud/cloud.cfg.d/99-installer.cfg

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.