Direkt zum Hauptinhalt

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

-# vmvar_vmidhelp.txt

(optional): Die eindeutige ID der VM innerhalb des Proxmox-Clusters (Beispiel: 100). Wenn dieser Parameter nicht angegeben ist, wird automatisch die nächste freie VMID ermittelt.
- vmvar_disk_size: Größe der FestplatteBeispiel für die VMVerwendung (z.des B.Ansible-Playbooks 64Gzum fürErstellen 64einer GB).VM:

ansible-playbook -i vmvar_root_password:inventory.ini Passwortcreate_vm.yml

fürStellen denSie Root-Benutzersicher, dass Sie die Werte in der VMinventory.ini-Datei (Beispiel:an your_root_password).Ihre -Umgebung vmvar_public_key: Der öffentliche SSH-Schlüssel, der für den Root-Benutzer der VM hinzugefügt wird (Beispiel: "your_ssh_public_key").
- vmvar_ip_address:anpassen. Die IP-Adresse,wichtigsten Parameter, die derSie VManpassen zugewiesensollten, wirdsind:

(Beispiel: 192.168.178.121).
- vmvar_cores: Die Anzahl der CPU-Kerne, die der VM zugewiesen wird (Beispiel: 2).
- vmvar_memory: Die Menge an Arbeitsspeicher (RAM) in Megabyte, die der VM zugewiesen wird (Beispiel: 2048).
- vmvar_vmbr: Die Netzwerkbrücke, an die die VM angeschlossen wird (Beispiel: vmbr0).
- vmvar_gw: Das Gateway, das für die VM verwendet wird (Beispiel: 192.168.178.1).
- vmvar_dns: Der DNS-Server, der für die VM verwendet wird (Beispiel: 8.8.8.8).
- vmvar_searchdomain: Die Searchdomain, die für die VM verwendet wird (Beispiel: example.com).
- prox_api_host: Die IP-Adresse des1. Proxmox-Hosts (Beispiel: 192.168.178.120).Host-Parameter:
- prox_api_user: Der BenutzernameBenutzer, fürder die AnmeldungProxmox-API am Proxmox-Hostverwendet (z.normalerweise B. root@pam)"root@pam").
- prox_api_password: Das Passwort für den API-Benutzer.
- prox_api_host: Die IP-Adresse oder der Hostname Ihres Proxmox-Benutzer (Beispiel: 12345678).Servers.
- prox_node: Der Name des Proxmox-Node,Knotens, auf dem die VM erstellt werden sollsoll.

(Beispiel:2. pve).VM-Parameter:
- vmvar_ostype: Der BetriebssystemtypOS-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 (Beispiel:fest).
l26).- 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

[vm]proxmox]
vm1#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.121120 vmvar_vmid=100ansible_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_root_password=your_root_password vmvar_public_key="your_ssh_public_key" vmvar_ip_address=192.168.178.121vmvar_swap_partsize=32G
vmvar_cores=2
vmvar_memory=2048
vmvar_vmbr=vmbr0
vmvar_gw=vmvar_ip_address=192.168.178.1 vmvar_dns=8.8.8.8 vmvar_searchdomain=example.com prox_api_host=192.168.178.120 prox_api_user=root@pam prox_api_password=12345678 prox_node=pve vmvar_ostype=l26200