У меня проблема с CloudInit на Proxmox 7.2 и Ubuntu 22.04: имя хоста VM, указанное в GUI Proxmox, не устанавливается в VM. В качестве основы я использую CloudImage jammy-server-cloudimg-amd64.img от Ubuntu с сайта . У меня есть два CloudInit-файла, один для пользователя и один для вендора (см. ниже), которые добавляются в шаблон. Шаблон создается следующими шагами:
```bash
#!/bin/bash
qm create 800001 --name ubuntu-2204-cloud-init --numa 0 --ostype l26 --cores 2 --sockets 1 --memory 2048 -net0 virtio,bridge=vmbr100,firewall=1
qm importdisk 800001 /mnt/pve/nas02-templates/template/iso/jammy-server-cloudimg-amd64.img nas02-images --format=qcow2
qm set 800001 --scsihw virtio-scsi-pci --scsi0 nas02-images:800001/vm-800001-disk-0.qcow2
qm resize 800001 scsi0 50G
qm set 800001 --boot c --bootdisk scsi0
qm set 800001 --serial0 socket --vga serial0
qm set 800001 --ide2 nas02-images:cloudinit
qm set 800001 --agent enabled=1
qm set 800001 --cicustom "user=nas02-templates:snippets/cloudinit-user.yml,vendor=nas02-templates:snippets/cloudinit-vendor.yml"
qm template 800001
```
После этого я клонирую мою VM в GUI Proxmox из шаблона, созданного, например, со следующими опциями:
* **ID VM:** 100044
* **Имя:** derufin – это должно быть именем хоста
* **Ресурсный пул:** test-VMs
* **Режим:** Полное клонирование
* **Целевое хранилище:** nas02-images-ssd
* **Формат:** qcow2
Затем я настраиваю следующие параметры CloudInit в VM:
* **DNS домен:** domain.info
* **DNS серверы:** 172.16.100.10
* **Настройка IP (net0):**
* **IPv4/CIDR:** 172.16.100.44/22
* **Шлюз (IPv4):** 172.16.100.1
Я не изменяю и не устанавливаю пользователя, пароль и SSH-ключ, так как это настраивается через cloudinit-user.yml.
При запуске VM все настраивается как ожидалось, но имя хоста VM по-прежнему ubuntu, а не derufin! Если я добавлю `hostname: derufin` в любой из моих двух CloudInit-файлов, имя хоста будет установлено правильно. Но, очевидно, я не хочу устанавливать имя хоста в шаблоне. Если я удалю файл CloudInit для пользователя cloudinit-user.yml из шаблона, имя хоста будет установлено правильно, но тогда не будет пользователя для входа.
Одна странная вещь, которую я обнаружил: при дампе конфигурации CloudInit из VM через `qm cloudinit dump 100044 user`, здесь можно найти имя хоста, manage\_etc\_hosts и fqdn. Почему это в user? Разве это не должно быть частью network или meta?
```yaml
#cloud-config
hostname: derufin
manage_etc_hosts: true
fqdn: derufin.domain.info
chpasswd:
expire: False
users:
- default
package_upgrade: true
```
В общем, я не знаю, как правильно установить имя хоста VM.
```yaml
#cloud-config
hostname: derufin
manage_etc_hosts: true
fqdn: derufin.domain.info
chpasswd:
expire: False
users:
- default
package_upgrade: true
```
```yaml
#cloud-config
hostname: derufin
manage_etc_hosts: true
fqdn: derufin.domain.info
chpasswd:
expire: False
users:
- default
package_upgrade: true
```
**Содержимое cloudinit-user.yml:**
```yaml
#cloud-config
users:
- name: someuser
gecos: Some User
uid: 1000
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD...
```
**Содержимое cloudinit-vendor.yml:**
```yaml
#cloud-config
packages:
- somepackage
```
**Содержимое /etc/network/interfaces:**
```
auto lo
iface lo inet loopback
auto enp3s0
iface enp3s0 inet static
address 172.16.100.44/22
gateway 172.16.100.1
```
**Версии:**
* **Proxmox:**
* **pve-manager:** 7.2-4 (running version: 7.2-4/ca9d43cc)
* **kernel:** 5.15.35-1-pve
* **Прочее:** (см. полный список в конце файла)
Надеюсь, это поможет в отладке проблемы.
```bash
#!/bin/bash
qm create 800001 --name ubuntu-2204-cloud-init --numa 0 --ostype l26 --cores 2 --sockets 1 --memory 2048 -net0 virtio,bridge=vmbr100,firewall=1
qm importdisk 800001 /mnt/pve/nas02-templates/template/iso/jammy-server-cloudimg-amd64.img nas02-images --format=qcow2
qm set 800001 --scsihw virtio-scsi-pci --scsi0 nas02-images:800001/vm-800001-disk-0.qcow2
qm resize 800001 scsi0 50G
qm set 800001 --boot c --bootdisk scsi0
qm set 800001 --serial0 socket --vga serial0
qm set 800001 --ide2 nas02-images:cloudinit
qm set 800001 --agent enabled=1
qm set 800001 --cicustom "user=nas02-templates:snippets/cloudinit-user.yml,vendor=nas02-templates:snippets/cloudinit-vendor.yml"
qm template 800001
```
После этого я клонирую мою VM в GUI Proxmox из шаблона, созданного, например, со следующими опциями:
* **ID VM:** 100044
* **Имя:** derufin – это должно быть именем хоста
* **Ресурсный пул:** test-VMs
* **Режим:** Полное клонирование
* **Целевое хранилище:** nas02-images-ssd
* **Формат:** qcow2
Затем я настраиваю следующие параметры CloudInit в VM:
* **DNS домен:** domain.info
* **DNS серверы:** 172.16.100.10
* **Настройка IP (net0):**
* **IPv4/CIDR:** 172.16.100.44/22
* **Шлюз (IPv4):** 172.16.100.1
Я не изменяю и не устанавливаю пользователя, пароль и SSH-ключ, так как это настраивается через cloudinit-user.yml.
При запуске VM все настраивается как ожидалось, но имя хоста VM по-прежнему ubuntu, а не derufin! Если я добавлю `hostname: derufin` в любой из моих двух CloudInit-файлов, имя хоста будет установлено правильно. Но, очевидно, я не хочу устанавливать имя хоста в шаблоне. Если я удалю файл CloudInit для пользователя cloudinit-user.yml из шаблона, имя хоста будет установлено правильно, но тогда не будет пользователя для входа.
Одна странная вещь, которую я обнаружил: при дампе конфигурации CloudInit из VM через `qm cloudinit dump 100044 user`, здесь можно найти имя хоста, manage\_etc\_hosts и fqdn. Почему это в user? Разве это не должно быть частью network или meta?
```yaml
#cloud-config
hostname: derufin
manage_etc_hosts: true
fqdn: derufin.domain.info
chpasswd:
expire: False
users:
- default
package_upgrade: true
```
В общем, я не знаю, как правильно установить имя хоста VM.
```yaml
#cloud-config
hostname: derufin
manage_etc_hosts: true
fqdn: derufin.domain.info
chpasswd:
expire: False
users:
- default
package_upgrade: true
```
```yaml
#cloud-config
hostname: derufin
manage_etc_hosts: true
fqdn: derufin.domain.info
chpasswd:
expire: False
users:
- default
package_upgrade: true
```
**Содержимое cloudinit-user.yml:**
```yaml
#cloud-config
users:
- name: someuser
gecos: Some User
uid: 1000
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD...
```
**Содержимое cloudinit-vendor.yml:**
```yaml
#cloud-config
packages:
- somepackage
```
**Содержимое /etc/network/interfaces:**
```
auto lo
iface lo inet loopback
auto enp3s0
iface enp3s0 inet static
address 172.16.100.44/22
gateway 172.16.100.1
```
**Версии:**
* **Proxmox:**
* **pve-manager:** 7.2-4 (running version: 7.2-4/ca9d43cc)
* **kernel:** 5.15.35-1-pve
* **Прочее:** (см. полный список в конце файла)
Надеюсь, это поможет в отладке проблемы.
