Привет всем, я пытаюсь клонировать шаблон моей ВМ, настраивая статический IP. Я использую Ansible и пытаюсь использовать модуль `community.general.proxmox_kvm`. Однако у меня не получается присвоить ВМ статический IP. Для шаблона я использую шаблон Debian 12 (bookworm) по руководству Learn Linux Tv. Ниже я добавил шесть сценариев, которые должны работать (согласно множеству форумов, например, 1 2 3). Но они не работают. Либо задача завершается ошибкой 'Bad Request: Parameter verification failed', либо ВМ получает IP по DHCP при запуске. Кроме того, создание клона напрямую в Proxmox с помощью `qm clone 1001 123 --name test-123` и установка IP с помощью `qm set 123 --ipconfig0 ip=[redacted].23/24,gw=[redacted]` как описано в руководстве Proxmox также не помогло. Есть ли у кого-нибудь идеи, как клонировать ВМ, которую можно инициализировать Cloud-init, и присвоить ей статический IP?
---
Чтобы увидеть проблему самостоятельно, запустите следующее с помощью Ansible. Измените значения [redacted] на свои собственные. Раньше у меня были проблемы с установкой памяти в начальной задаче. Я выяснил, что это нужно делать во второй задаче. Если это необходимо и для сети, я добавил тест 4-6. Таким образом, тесты 4-6 такие же, как тесты 1-3, но часть, касающаяся сети, выделена.
Код:
```yaml
- name: 'ТЕСТ скрипт'
hosts: [redacted]
check_mode: false
gather_facts: true
become: true
become_method: enable # Необходимо на Proxmox, так как пользователь не имеет 'повышения привилегий'
tasks:
- name: 'ТЕСТ 1: Создать ВМ со статическим IP xx.24 через ipconfig ключ.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-1'
newid: 201
node: [redacted]
state: 'present'
timeout: 300
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
ipconfig:
ipconfig0: 'ip=[redacted].24/24,gw=[redacted].254'
- name: 'ТЕСТ 2: Создать ВМ со статическим IP xx.25 через cicustom inline.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-2'
newid: 202
node: [redacted]
state: 'present'
timeout: 300
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
cicustom: 'network-config="$(cat <<EOF
version: 2
ethernets:
[redacted]:
addresses: [[redacted].25/24]
gateway4: [redacted].254
nameservers:
addresses: [[redacted]]
EOF
)"'
- name: 'ТЕСТ 3: Создать ВМ со статическим IP xx.26 через cicustom из файла.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-3'
newid: 303
node: [redacted]
state: 'present'
timeout: 300
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
cicustom: 'network-config=local:/[redacted]/test3.yaml'
- name: 'ТЕСТ 4: Создать ВМ со статическим IP xx.27 через ipconfig ключ во второй задаче.'
block:
- name: 'ТЕСТ 4: задача 1: создать ВМ.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-4'
newid: 301
node: [redacted]
state: 'present'
timeout: 300
- name: 'ТЕСТ 4: задача 2: установить статический IP xx.27 через ipconfig ключ. Как PoC изменить память.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
memory: 2048
name: 'iptest-4'
node: [redacted]
state: 'present'
timeout: 300
update: true
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
ipconfig:
ipconfig0: 'ip=[redacted].27/24,gw=[redacted].254'
- name: 'ТЕСТ 5: Создать ВМ со статическим IP xx.28 через cicustom inline.'
block:
- name: 'ТЕСТ 5: задача 1: создать ВМ.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-5'
newid: 302
node: [redacted]
state: 'present'
timeout: 300
- name: 'ТЕСТ 5: задача 2: установить статический IP xx.28 через cicustom inline.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
memory: 2048
name: 'iptest-5'
node: [redacted]
state: 'present'
timeout: 300
update: true
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
cicustom: 'network-config="$(cat <<EOF
version: 2
ethernets:
[redacted]:
addresses: [[redacted].28/24]
gateway4: [redacted].254
nameservers:
addresses: [[redacted]]
EOF
)"'
- name: 'ТЕСТ 6: Создать ВМ со статическим IP xx.29 через cicustom из файла.'
block:
- name: 'ТЕСТ 6: задача 1: создать ВМ.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-6'
newid: 303
node: [redacted]
state: 'present'
timeout: 300
- name: 'ТЕСТ 6: задача 2: установить статический IP xx.29 через cicustom из файла. Как PoC изменить память.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
memory: 2048
name: 'iptest-6'
node: [redacted]
state: 'present'
timeout: 300
update: true
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
cicustom: 'network-config=local:snippets/[redacted]/test6.yaml'
```
Это содержимое для файла test6.yaml:
```yaml
version: 2
ethernets:
[redacted]:
addresses:
- [redacted].29/24
gateway4: [redacted]
```
Это содержимое для файла test3.yaml:
```yaml
version: 2
ethernets:
[redacted]:
addresses:
- [redacted].26/24
```
---
Чтобы увидеть проблему самостоятельно, запустите следующее с помощью Ansible. Измените значения [redacted] на свои собственные. Раньше у меня были проблемы с установкой памяти в начальной задаче. Я выяснил, что это нужно делать во второй задаче. Если это необходимо и для сети, я добавил тест 4-6. Таким образом, тесты 4-6 такие же, как тесты 1-3, но часть, касающаяся сети, выделена.
Код:
```yaml
- name: 'ТЕСТ скрипт'
hosts: [redacted]
check_mode: false
gather_facts: true
become: true
become_method: enable # Необходимо на Proxmox, так как пользователь не имеет 'повышения привилегий'
tasks:
- name: 'ТЕСТ 1: Создать ВМ со статическим IP xx.24 через ipconfig ключ.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-1'
newid: 201
node: [redacted]
state: 'present'
timeout: 300
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
ipconfig:
ipconfig0: 'ip=[redacted].24/24,gw=[redacted].254'
- name: 'ТЕСТ 2: Создать ВМ со статическим IP xx.25 через cicustom inline.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-2'
newid: 202
node: [redacted]
state: 'present'
timeout: 300
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
cicustom: 'network-config="$(cat <<EOF
version: 2
ethernets:
[redacted]:
addresses: [[redacted].25/24]
gateway4: [redacted].254
nameservers:
addresses: [[redacted]]
EOF
)"'
- name: 'ТЕСТ 3: Создать ВМ со статическим IP xx.26 через cicustom из файла.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-3'
newid: 303
node: [redacted]
state: 'present'
timeout: 300
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
cicustom: 'network-config=local:/[redacted]/test3.yaml'
- name: 'ТЕСТ 4: Создать ВМ со статическим IP xx.27 через ipconfig ключ во второй задаче.'
block:
- name: 'ТЕСТ 4: задача 1: создать ВМ.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-4'
newid: 301
node: [redacted]
state: 'present'
timeout: 300
- name: 'ТЕСТ 4: задача 2: установить статический IP xx.27 через ipconfig ключ. Как PoC изменить память.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
memory: 2048
name: 'iptest-4'
node: [redacted]
state: 'present'
timeout: 300
update: true
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
ipconfig:
ipconfig0: 'ip=[redacted].27/24,gw=[redacted].254'
- name: 'ТЕСТ 5: Создать ВМ со статическим IP xx.28 через cicustom inline.'
block:
- name: 'ТЕСТ 5: задача 1: создать ВМ.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-5'
newid: 302
node: [redacted]
state: 'present'
timeout: 300
- name: 'ТЕСТ 5: задача 2: установить статический IP xx.28 через cicustom inline.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
memory: 2048
name: 'iptest-5'
node: [redacted]
state: 'present'
timeout: 300
update: true
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
cicustom: 'network-config="$(cat <<EOF
version: 2
ethernets:
[redacted]:
addresses: [[redacted].28/24]
gateway4: [redacted].254
nameservers:
addresses: [[redacted]]
EOF
)"'
- name: 'ТЕСТ 6: Создать ВМ со статическим IP xx.29 через cicustom из файла.'
block:
- name: 'ТЕСТ 6: задача 1: создать ВМ.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
clone: 'tmpl-deb12'
full: true
name: 'iptest-6'
newid: 303
node: [redacted]
state: 'present'
timeout: 300
- name: 'ТЕСТ 6: задача 2: установить статический IP xx.29 через cicustom из файла. Как PoC изменить память.'
community.general.proxmox_kvm:
api_host: [redacted]
api_user: [redacted]
api_token_id: [redacted]
api_token_secret: [redacted]
memory: 2048
name: 'iptest-6'
node: [redacted]
state: 'present'
timeout: 300
update: true
### Network
net:
net0: 'virtio,bridge=vmbr0,firewall=0'
cicustom: 'network-config=local:snippets/[redacted]/test6.yaml'
```
Это содержимое для файла test6.yaml:
```yaml
version: 2
ethernets:
[redacted]:
addresses:
- [redacted].29/24
gateway4: [redacted]
```
Это содержимое для файла test3.yaml:
```yaml
version: 2
ethernets:
[redacted]:
addresses:
- [redacted].26/24
```
