diff options
Diffstat (limited to 'roles')
| -rw-r--r-- | roles/pve-lxc/defaults/main.yml | 7 | ||||
| -rw-r--r-- | roles/pve-lxc/meta/argument_specs.yml | 40 | ||||
| -rw-r--r-- | roles/pve-lxc/meta/main.yml | 14 | ||||
| -rw-r--r-- | roles/pve-lxc/tasks/main.yml | 50 |
4 files changed, 111 insertions, 0 deletions
diff --git a/roles/pve-lxc/defaults/main.yml b/roles/pve-lxc/defaults/main.yml new file mode 100644 index 00000000..eb270323 --- /dev/null +++ b/roles/pve-lxc/defaults/main.yml @@ -0,0 +1,7 @@ +--- +pve_lxc_disk: "local-lvm:4" +pve_lxc_cores: 1 +pve_lxc_memory: 512 +pve_lxc_ip: "10.0.0.100/24" +pve_lxc_gateway: "10.0.0.1" +pve_lxc_dns: "10.0.0.1" diff --git a/roles/pve-lxc/meta/argument_specs.yml b/roles/pve-lxc/meta/argument_specs.yml new file mode 100644 index 00000000..4a6c84e5 --- /dev/null +++ b/roles/pve-lxc/meta/argument_specs.yml @@ -0,0 +1,40 @@ +--- +argument_specs: + main: + options: + pve_lxc_id: + type: "int" + description: "Unique VM/CT ID in PVE" + required: true + pve_lxc_hostname: + type: "str" + description: "Container hostname" + required: true + pve_lxc_template: + type: "str" + description: "OS template filename fetched from PVE appliance repo into local storage" + required: true + pve_lxc_disk: + type: "str" + description: "Root disk in <storage>:<size> format (e.g. local-lvm:4)" + default: "local-lvm:4" + pve_lxc_cores: + type: "int" + description: "Number of vCPU cores" + default: 1 + pve_lxc_memory: + type: "int" + description: "RAM in MB" + default: 512 + pve_lxc_ip: + type: "str" + description: "Container IP in CIDR notation (e.g. 10.0.0.100/24)" + default: "10.0.0.100/24" + pve_lxc_gateway: + type: "str" + description: "Container default gateway" + default: "10.0.0.1" + pve_lxc_dns: + type: "str" + description: "Container DNS server" + default: "10.0.0.1" diff --git a/roles/pve-lxc/meta/main.yml b/roles/pve-lxc/meta/main.yml new file mode 100644 index 00000000..82db1bad --- /dev/null +++ b/roles/pve-lxc/meta/main.yml @@ -0,0 +1,14 @@ +--- +dependencies: + - role: "proxmoxer" + - role: "pve" + - role: "pve-network" +galaxy_info: + author: "a14m" + description: "Provision an LXC container on Proxmox VE" + license: "MIT" + min_ansible_version: "2.18" + platforms: + - name: "Debian" + versions: + - "bookworm" diff --git a/roles/pve-lxc/tasks/main.yml b/roles/pve-lxc/tasks/main.yml new file mode 100644 index 00000000..5d035270 --- /dev/null +++ b/roles/pve-lxc/tasks/main.yml @@ -0,0 +1,50 @@ +--- +- name: "Download LXC template" + community.general.proxmox_template: + api_host: "{{ ansible_facts['hostname'] }}" + api_user: "{{ pve_admin_user }}@pve" + api_password: "{{ pve_admin_password }}" + node: "{{ ansible_facts['hostname'] }}" + storage: "local" + content_type: "vztmpl" + template: "{{ pve_lxc_template }}" + state: present + no_log: true + tags: + # PVE API not available in containers — requires proxmox-ve package + - "molecule-notest" + +- name: "Provision LXC container" + community.general.proxmox: + api_host: "{{ ansible_facts['hostname'] }}" + api_user: "{{ pve_admin_user }}@pve" + api_password: "{{ pve_admin_password }}" + node: "{{ ansible_facts['hostname'] }}" + vmid: "{{ pve_lxc_id }}" + hostname: "{{ pve_lxc_hostname }}" + ostemplate: "local:vztmpl/{{ pve_lxc_template }}" + disk: "{{ pve_lxc_disk }}" + cores: "{{ pve_lxc_cores }}" + memory: "{{ pve_lxc_memory }}" + pubkey: "{{ user_public_keys | join('\n') }}" + netif: + net0: "name=eth0,ip={{ pve_lxc_ip }},gw={{ pve_lxc_gateway }},bridge=vmbr0" + nameserver: "{{ pve_lxc_dns }}" + onboot: true + unprivileged: true + state: present + tags: + # PVE API not available in containers — requires proxmox-ve package + - "molecule-notest" + +- name: "Start LXC container" + community.general.proxmox: + api_host: "{{ ansible_facts['hostname'] }}" + api_user: "{{ pve_admin_user }}@pve" + api_password: "{{ pve_admin_password }}" + vmid: "{{ pve_lxc_id }}" + state: started + no_log: true + tags: + # PVE API not available in containers — requires proxmox-ve package + - "molecule-notest" |
