Claude assisted cleanup
This commit is contained in:
58
roles/proxmox_sno_vm/README.md
Normal file
58
roles/proxmox_sno_vm/README.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# proxmox_sno_vm
|
||||
|
||||
Creates a Proxmox virtual machine configured for Single Node OpenShift (SNO) deployment. The VM uses q35 machine type with UEFI boot (required for RHCOS), VirtIO NIC with optional VLAN tagging, and an empty CD-ROM slot for the agent installer ISO.
|
||||
|
||||
After creation the role retrieves the VM ID and MAC address, setting them as cacheable facts for use by subsequent plays.
|
||||
|
||||
## Requirements
|
||||
|
||||
- `community.proxmox` collection
|
||||
- A `proxmox_api` inventory host with `ansible_host` and `ansible_port` set to the Proxmox API endpoint
|
||||
|
||||
## Role Variables
|
||||
|
||||
| Variable | Default | Description |
|
||||
|---|---|---|
|
||||
| `proxmox_node` | `pve1` | Proxmox cluster node |
|
||||
| `proxmox_api_user` | `ansible@pam` | API username |
|
||||
| `proxmox_api_token_id` | `ansible` | API token ID |
|
||||
| `proxmox_api_token_secret` | *required* | API token secret (sensitive) |
|
||||
| `proxmox_validate_certs` | `false` | Validate TLS certificates |
|
||||
| `proxmox_storage` | `local-lvm` | Storage pool for VM disks |
|
||||
| `proxmox_iso_storage` | `local` | Storage pool for ISOs |
|
||||
| `proxmox_iso_dir` | `/var/lib/vz/template/iso` | ISO filesystem path on Proxmox host |
|
||||
| `sno_credentials_dir` | `/root/sno-{{ ocp_cluster_name }}` | Credential persistence directory |
|
||||
| `sno_vm_name` | `sno-{{ ocp_cluster_name }}` | VM name in Proxmox |
|
||||
| `sno_cpu` | `8` | CPU cores |
|
||||
| `sno_memory_mb` | `32768` | Memory in MB |
|
||||
| `sno_disk_gb` | `120` | Disk size in GB |
|
||||
| `sno_bridge` | `vmbr0` | Network bridge |
|
||||
| `sno_vlan` | `40` | VLAN tag |
|
||||
| `sno_mac` | `""` | MAC address (empty = auto-assign) |
|
||||
| `sno_vm_id` | `0` | VM ID (0 = auto-assign) |
|
||||
|
||||
## Cacheable Facts Set
|
||||
|
||||
- `sno_vm_id` — assigned Proxmox VM ID
|
||||
- `sno_mac` — assigned or detected MAC address
|
||||
|
||||
## Example Playbook
|
||||
|
||||
```yaml
|
||||
- name: Create SNO VM in Proxmox
|
||||
hosts: sno.openshift.toal.ca
|
||||
gather_facts: false
|
||||
connection: local
|
||||
|
||||
roles:
|
||||
- role: proxmox_sno_vm
|
||||
tags: proxmox
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
## Author
|
||||
|
||||
ptoal
|
||||
83
roles/proxmox_sno_vm/meta/argument_specs.yml
Normal file
83
roles/proxmox_sno_vm/meta/argument_specs.yml
Normal file
@@ -0,0 +1,83 @@
|
||||
---
|
||||
argument_specs:
|
||||
main:
|
||||
short_description: Create a Proxmox VM for Single Node OpenShift
|
||||
description:
|
||||
- Creates a q35/UEFI virtual machine in Proxmox suitable for SNO deployment.
|
||||
- Retrieves the assigned VM ID and MAC address as cacheable facts.
|
||||
options:
|
||||
proxmox_node:
|
||||
description: Proxmox cluster node to create the VM on.
|
||||
type: str
|
||||
default: pve1
|
||||
proxmox_api_user:
|
||||
description: Proxmox API username.
|
||||
type: str
|
||||
default: ansible@pam
|
||||
proxmox_api_token_id:
|
||||
description: Proxmox API token ID.
|
||||
type: str
|
||||
default: ansible
|
||||
proxmox_api_token_secret:
|
||||
description: Proxmox API token secret.
|
||||
type: str
|
||||
required: true
|
||||
no_log: true
|
||||
proxmox_validate_certs:
|
||||
description: Whether to validate TLS certificates for the Proxmox API.
|
||||
type: bool
|
||||
default: false
|
||||
proxmox_storage:
|
||||
description: Proxmox storage pool for VM disks.
|
||||
type: str
|
||||
default: local-lvm
|
||||
proxmox_iso_storage:
|
||||
description: Proxmox storage pool name for ISO images.
|
||||
type: str
|
||||
default: local
|
||||
proxmox_iso_dir:
|
||||
description: Filesystem path on the Proxmox host where ISOs are stored.
|
||||
type: str
|
||||
default: /var/lib/vz/template/iso
|
||||
sno_credentials_dir:
|
||||
description: >-
|
||||
Directory on proxmox_host where kubeconfig and kubeadmin-password
|
||||
are persisted after installation.
|
||||
type: str
|
||||
default: "/root/sno-{{ ocp_cluster_name }}"
|
||||
sno_vm_name:
|
||||
description: Name of the VM in Proxmox.
|
||||
type: str
|
||||
default: "sno-{{ ocp_cluster_name }}"
|
||||
sno_cpu:
|
||||
description: Number of CPU cores for the VM.
|
||||
type: int
|
||||
default: 8
|
||||
sno_memory_mb:
|
||||
description: Memory in megabytes for the VM.
|
||||
type: int
|
||||
default: 32768
|
||||
sno_disk_gb:
|
||||
description: Primary disk size in gigabytes.
|
||||
type: int
|
||||
default: 120
|
||||
sno_bridge:
|
||||
description: Proxmox network bridge for the VM NIC.
|
||||
type: str
|
||||
default: vmbr0
|
||||
sno_vlan:
|
||||
description: VLAN tag for the VM NIC.
|
||||
type: int
|
||||
default: 40
|
||||
sno_mac:
|
||||
description: >-
|
||||
MAC address to assign. Leave empty for auto-assignment by Proxmox.
|
||||
Set explicitly to pin a MAC for static IP reservations.
|
||||
type: str
|
||||
default: ""
|
||||
sno_vm_id:
|
||||
description: >-
|
||||
Proxmox VM ID. Set to 0 for auto-assignment.
|
||||
Populated as a cacheable fact after VM creation.
|
||||
type: int
|
||||
default: 0
|
||||
17
roles/proxmox_sno_vm/meta/main.yml
Normal file
17
roles/proxmox_sno_vm/meta/main.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
galaxy_info:
|
||||
author: ptoal
|
||||
description: Create a Proxmox VM for Single Node OpenShift (SNO) deployment
|
||||
license: MIT
|
||||
min_ansible_version: "2.16"
|
||||
platforms:
|
||||
- name: GenericLinux
|
||||
versions:
|
||||
- all
|
||||
galaxy_tags:
|
||||
- proxmox
|
||||
- openshift
|
||||
- sno
|
||||
- vm
|
||||
|
||||
dependencies: []
|
||||
@@ -7,7 +7,7 @@
|
||||
- name: Build net0 string
|
||||
ansible.builtin.set_fact:
|
||||
# Proxmox net format: model[=macaddr],bridge=<bridge>[,tag=<vlan>]
|
||||
_sno_net0: >-
|
||||
__proxmox_sno_vm_net0: >-
|
||||
virtio{{
|
||||
'=' + sno_mac if sno_mac | length > 0 else ''
|
||||
}},bridge={{ sno_bridge }},tag={{ sno_vlan }}
|
||||
@@ -40,11 +40,11 @@
|
||||
ide:
|
||||
ide2: none,media=cdrom
|
||||
net:
|
||||
net0: "{{ _sno_net0 }}"
|
||||
net0: "{{ __proxmox_sno_vm_net0 }}"
|
||||
boot: "order=scsi0;ide2"
|
||||
onboot: true
|
||||
state: present
|
||||
register: proxmox_vm_result
|
||||
register: __proxmox_sno_vm_result
|
||||
|
||||
- name: Retrieve VM info
|
||||
community.proxmox.proxmox_vm_info:
|
||||
@@ -58,19 +58,19 @@
|
||||
name: "{{ sno_vm_name }}"
|
||||
type: qemu
|
||||
config: current
|
||||
register: proxmox_vm_info
|
||||
register: __proxmox_sno_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 }}"
|
||||
sno_vm_id: "{{ __proxmox_sno_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
|
||||
{{ __proxmox_sno_vm_info.proxmox_vms[0].config.net0
|
||||
| regex_search('([0-9A-Fa-f]{2}(?::[0-9A-Fa-f]{2}){5})', '\1')
|
||||
| first }}
|
||||
cacheable: true
|
||||
@@ -82,3 +82,4 @@
|
||||
- "VM Name : {{ sno_vm_name }}"
|
||||
- "VM ID : {{ sno_vm_id }}"
|
||||
- "MAC : {{ sno_mac }}"
|
||||
verbosity: 1
|
||||
|
||||
Reference in New Issue
Block a user