Proxmox Debian VM mit Ansible und Cloudinit Provisionieren
Beschreibung:
Ein Playbook zum erstellen einer Debian 11 VM per Ansible.
---
- name: Erstelle eine VM auf Proxmox
hosts: localhost
gather_facts: no
tasks:
- name: Lade Debian 11 Cloud-Image herunter
ansible.builtin.get_url:
url: "https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-generic-amd64.qcow2"
dest: "/tmp/debian-11-cloud-image.qcow2"
mode: '0644'
- name: Ermittle die nächste freie VMID
community.general.proxmox_nextid:
api_user: "{{ prox_api_user }}"
api_password: "{{ prox_api_password }}"
api_host: "{{ prox_api_host }}"
register: next_vmid
when: vmvar_vmid is not defined
- name: Setze die VMID
set_fact:
vmid: "{{ vmvar_vmid if vmvar_vmid is defined else next_vmid.nextid }}"
- name: Verschiebe Cloud-Image in den VM-Speicherbereich
ansible.builtin.shell: "mv /tmp/debian-11-cloud-image.qcow2 /var/lib/vz/images/{{ vmid }}/vm-{{ vmid }}-disk-0.qcow2"
become: yes
- name: Erstelle Preseed-Datei
template:
src: preseed.cfg.j2
dest: /tmp/preseed.cfg
vars:
timezone: "{{ vmvar_timezone }}"
keyboard_layout: "{{ vmvar_keyboard_layout }}"
- name: Erstelle VM
community.general.proxmox:
api_user: "{{ prox_api_user }}"
api_password: "{{ prox_api_password }}"
api_host: "{{ prox_api_host }}"
node: "{{ prox_node }}"
ostype: "{{ vmvar_ostype }}"
disk: "virtio,size={{ vmvar_disk_size }}"
cores: "{{ vmvar_cores }}"
memory: "{{ vmvar_memory }}"
net: '{"net0":"virtio,bridge={{ vmvar_vmbr }}"}'
virtio: '{"virtio0":"local:{{ vmid }}/vm-{{ vmid }}-disk-0.qcow2,size={{ vmvar_disk_size }}"}'
ciuser: "root"
name: "{{ inventory_hostname }}"
ipconfig0: "ip={{ vmvar_ip_address }}/24,gw={{ vmvar_gw }}"
cipassword: "{{ vmvar_root_password }}"
sshkeys: "{{ vmvar_public_key }}"
nameserver: "{{ vmvar_dns }}"
searchdomain: "{{ vmvar_searchdomain }}"
custom_preseed: "{{ lookup('file', '/tmp/preseed.cfg') }}"
state: "present"
force: yes
vmid: "{{ vmid }}"
register: vm_result
- name: Warte auf VM-Start
pause:
seconds: 30
- name: VM-Details
debug:
var: vm_result
Nun ein neues Verzeichnis template erstellen.
Darin eine neue Datei mit dem namen preeseed.cfg.j2 erstellen
Und diesen Inhalt einfügen
Die Hilfe zu den Parametern
# help.txt
Beispiel für die Verwendung des Ansible-Playbooks zum Erstellen einer VM:
ansible-playbook -i inventory.ini create_vm.yml
Stellen Sie sicher, dass Sie die Werte in der inventory.ini-Datei an Ihre Umgebung anpassen. Die wichtigsten Parameter, die Sie anpassen sollten, sind:
1. Proxmox-Host-Parameter:
- prox_api_user: Der Benutzer, der die Proxmox-API verwendet (normalerweise "root@pam").
- prox_api_password: Das Passwort für den API-Benutzer.
- prox_api_host: Die IP-Adresse oder der Hostname Ihres Proxmox-Servers.
- prox_node: Der Name des Proxmox-Knotens, auf dem die VM erstellt werden soll.
2. VM-Parameter:
- vmvar_ostype: Der OS-Typ (z. B. l26 für Linux 2.6/3.x/4.x/5.x Kernel).
- vmvar_disk_size: Die Größe der Festplatte in Gigabyte (z. B. 64G).
- vmvar_cores: Die Anzahl der CPU-Kerne.
- vmvar_memory: Der Arbeitsspeicher in Megabyte.
- vmvar_vmbr: Die Netzwerkbrücke (z. B. vmbr0).
- vmvar_ip_address: Die IP-Adresse der VM.
- vmvar_swap_partsize: Die Größe der Swap-Partition (z. B. 32G).
Die VM wird mit folgendem Partitionslayout erstellt:
- Erste Partition: Boot-Partition mit einer Größe von 512 MB (fest).
- Zweite Partition: Swap-Partition mit einer Größe, die durch den Parameter vmvar_swap_partsize fest
Liste der OS-Typen:
- l26: Linux 2.6/3.x/4.x/5.x Kernel
- other: Anderes OS
- wxp: Windows XP
- w2k: Windows 2000
- w2k3: Windows 2003
- w2k8: Windows 2008
- wvista: Windows Vista
- win7: Windows 7
- win8: Windows 8/2012
- win10: Windows 10/2016/2019
Beispiel einer Inventory Datei
[proxmox]
#wenn das skript direkt auf dem proxmox host ausgeführt wird
myvm ansible_connection=localhost
#oder remote von einem laptop oder so
myvm ansible_host=192.168.178.120 ansible_user=root
[proxmox:vars]
prox_api_user=root@pam
prox_api_password=12345678
prox_api_host=192.168.178.120
prox_node=my-node
vmvar_gw=192.168.178.1
vmvar_root_password=mysecretpassword
vmvar_public_key="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6..."
vmvar_dns=8.8.8.8
vmvar_searchdomain=mydomain.local
vmvar_timezone=Europe/Berlin
vmvar_keyboard_layout=de
[myvm:vars]
vmvar_ostype=l26
vmvar_disk_size=64G
vmvar_swap_partsize=32G
vmvar_cores=2
vmvar_memory=2048
vmvar_vmbr=vmbr0
vmvar_ip_address=192.168.178.200