- name: Provision backups Proxmox VM
  hosts: backups
  connection: ansible.builtin.local
  gather_facts: false
  vars:
    api_user: "{{ lookup('ansible.builtin.env', 'PROXMOX_USER') }}"
    api_host: "{{ lookup('ansible.builtin.env', 'PROXMOX_HOST' ) }}"
    api_token_id: "{{ lookup('ansible.builtin.env', 'PROXMOX_TOKEN_ID') }}"
    api_token_secret: "{{ lookup('ansible.builtin.env', 'PROXMOX_TOKEN_SECRET') }}"
    ssh_public: "{{ lookup('ansible.builtin.env', 'SSH_PUBLIC') }}"
    vmname: "{{ inventory_hostname | regex_replace('^([^\\.]+)\\..+$', '\\1') }}"
    node: pve
  module_defaults:
    community.general.proxmox_kvm:
      api_user: "{{ api_user }}"
      api_host: "{{ api_host }}"
      api_token_id: "{{ api_token_id }}"
      api_token_secret: "{{ api_token_secret }}"
      name: "{{ vmname }}"
      node: "{{ node }}"
    community.general.proxmox_nic:
      api_user: "{{ api_user }}"
      api_host: "{{ api_host }}"
      api_token_id: "{{ api_token_id }}"
      api_token_secret: "{{ api_token_secret }}"
      name: "{{ vmname }}"
    community.general.proxmox_disk:
      api_user: "{{ api_user }}"
      api_host: "{{ api_host }}"
      api_token_id: "{{ api_token_id }}"
      api_token_secret: "{{ api_token_secret }}"
      name: "{{ vmname }}"
  tasks:
    # Initial setup
    - name: Create VM
      community.general.proxmox_kvm:
        clone: "{{ node }}-base"
        storage: nvme
    - name: Wait for status
      community.general.proxmox_kvm:
        state: current
      register: vm
      retries: 30
      delay: 10
      until: vm.status is defined

    # Networking and initial config
    - name: Add PUB NIC
      community.general.proxmox_nic:
        interface: net0
        firewall: false
        bridge: PUB
    - name: Add SRV NIC
      community.general.proxmox_nic:
        interface: net1
        firewall: false
        bridge: SRV

    # VM Configuration
    - name: Create CD disk
      community.general.proxmox_disk:
        disk: ide2
        media: cdrom
        iso_image: none
    - name: Create root disk
      community.general.proxmox_disk:
        disk: scsi0
        backup: true
        storage: nvme
        size: 32
    - name: Create data disk
      community.general.proxmox_disk:
        disk: scsi1
        backup: false
        storage: zfs
        size: 2048
    - name: Update VM
      community.general.proxmox_kvm:
        update: true
        boot: order=scsi0;ide2
        agent: enabled=1
        tags:
          - provisioned
        onboot: true
        cores: 4
        memory: 4096