--- # Create a Proxmox VM for Single Node OpenShift on VLAN40 (192.168.40.0/24). # Uses q35 machine type with UEFI (required for SNO / RHCOS). # An empty ide2 CD-ROM slot is created here so the boot order can reference it; # the deploy_openshift.yml play loads the actual ISO into it after generation. - name: Build net0 string ansible.builtin.set_fact: # Proxmox net format: model[=macaddr],bridge=[,tag=] _sno_net0: >- virtio{{ '=' + sno_mac if sno_mac | length > 0 else '' }},bridge={{ sno_bridge }},tag={{ sno_vlan }} - name: Create SNO VM in Proxmox community.proxmox.proxmox_kvm: api_host: "{{ hostvars['proxmox_api']['ansible_host'] }}" api_user: "{{ proxmox_api_user }}" api_port: "{{ hostvars['proxmox_api']['ansible_port'] }}" api_token_id: "{{ proxmox_api_token_id }}" api_token_secret: "{{ proxmox_api_token_secret }}" validate_certs: "{{ proxmox_validate_certs }}" node: "{{ proxmox_node }}" vmid: "{{ sno_vm_id | default(omit, true) }}" name: "{{ sno_vm_name }}" cores: "{{ sno_cpu }}" memory: "{{ sno_memory_mb }}" cpu: host numa_enabled: true machine: q35 bios: ovmf efidisk0: storage: "{{ proxmox_storage }}" format: raw efitype: 4m pre_enrolled_keys: false scsi: scsi0: "{{ proxmox_storage }}:{{ sno_disk_gb }},format=raw,iothread=1,cache=writeback" scsihw: virtio-scsi-single ide: ide2: none,media=cdrom net: net0: "{{ _sno_net0 }}" boot: "order=scsi0;ide2" onboot: true state: present register: proxmox_vm_result - name: Retrieve VM info community.proxmox.proxmox_vm_info: api_host: "{{ hostvars['proxmox_api']['ansible_host'] }}" api_user: "{{ proxmox_api_user }}" api_port: "{{ hostvars['proxmox_api']['ansible_port'] }}" api_token_id: "{{ proxmox_api_token_id }}" api_token_secret: "{{ proxmox_api_token_secret }}" validate_certs: "{{ proxmox_validate_certs }}" node: "{{ proxmox_node }}" name: "{{ sno_vm_name }}" type: qemu config: current register: proxmox_vm_info retries: 5 - name: Set VM ID fact for subsequent plays ansible.builtin.set_fact: sno_vm_id: "{{ proxmox_vm_info.proxmox_vms[0].vmid }}" cacheable: true - name: Extract MAC address from VM config ansible.builtin.set_fact: # net0 format: virtio=52:54:00:xx:xx:xx,bridge=vmbr0,tag=40 sno_mac: >- {{ proxmox_vm_info.proxmox_vms[0].config.net0 | regex_search('([0-9A-Fa-f]{2}(?::[0-9A-Fa-f]{2}){5})', '\1') | first }} cacheable: true when: sno_mac | length == 0 - name: Display VM details ansible.builtin.debug: msg: - "VM Name : {{ sno_vm_name }}" - "VM ID : {{ sno_vm_id }}" - "MAC : {{ sno_mac }}"