From c8b2969ccf5a43a112b576d3eeed324f3030f376 Mon Sep 17 00:00:00 2001 From: "pulsar89.5" Date: Fri, 24 Apr 2026 01:50:56 +0200 Subject: [PATCH] feat: Manage container --- defaults/main.yml | 17 ++++++++++ handlers/main.yml | 11 +++++++ tasks/instance_ct.yml | 77 +++++++++++++++++++++++++++++++++++++++++++ tasks/main.yml | 6 ++++ 4 files changed, 111 insertions(+) create mode 100644 tasks/instance_ct.yml diff --git a/defaults/main.yml b/defaults/main.yml index e631ec5..99ed761 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -74,6 +74,23 @@ proxmox_instance_cloudinit_nameservers: "" proxmox_instance_cloudinit_searchdomains: null proxmox_instance_cloudinit_sshkeys: "" +# Proxmox VE instance (CT) +proxmox_instance_cmode: tty +proxmox_instance_disk_volumes: {} +# Example: +# storage: truenas-nfs +# size: 5G +proxmox_instance_features: [] +proxmox_instance_mount_volumes: [] +proxmox_instance_netif: {} +proxmox_instance_ostemplate: "" +proxmox_instance_ostype: auto +proxmox_instance_password: "" +proxmox_instance_startup: "" +proxmox_instance_swap: 0 +proxmox_instance_timeout: 600 +proxmox_instance_unprivileged: true + ## HA configuration proxmox_instance_ha: max_restart: 3 diff --git a/handlers/main.yml b/handlers/main.yml index 0cf0cb8..002838f 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -91,3 +91,14 @@ current: "{{ proxmox_current_instances.proxmox_vms | map(attribute='name') | sort }}" expected: "{{ proxmox_node_instances.proxmox_vms | map(attribute='name') | sort }}" listen: Disable maintenance mode + +- name: Restart instance + community.proxmox.proxmox: + api_host: "{{ proxmox_api_host }}" + api_user: "{{ proxmox_api_user }}" + api_token_id: "{{ proxmox_api_token_id }}" + api_token_secret: "{{ proxmox_api_token_secret }}" + vmid: "{{ proxmox_instance_vmid }}" + node: "{{ proxmox_instance_node }}" + state: restarted + delegate_to: "{{ proxmox_delegate_to }}" diff --git a/tasks/instance_ct.yml b/tasks/instance_ct.yml new file mode 100644 index 0000000..7e75916 --- /dev/null +++ b/tasks/instance_ct.yml @@ -0,0 +1,77 @@ +--- +# tasks file for proxmox + +- name: Get instance configuration file informations + ansible.builtin.stat: + path: /etc/pve/lxc/{{ proxmox_instance_vmid }}.conf + become: true + delegate_to: "{{ proxmox_delegate_to }}" + register: proxmox_ct_configuration + +- name: Manage instance + community.proxmox.proxmox: + api_host: "{{ proxmox_api_host }}" + api_user: "{{ proxmox_api_user }}" + api_token_id: "{{ proxmox_api_token_id }}" + api_token_secret: "{{ proxmox_api_token_secret }}" + cores: "{{ proxmox_instance_cores }}" + disk_volume: "{{ proxmox_instance_disk_volumes }}" + features: "{{ proxmox_instance_features if proxmox_ct_configuration.stat.exists else omit }}" + hostname: "{{ inventory_hostname }}" + memory: "{{ proxmox_instance_memory }}" + mount_volumes: "{{ proxmox_instance_mount_volumes }}" + netif: "{{ proxmox_instance_netif }}" + node: "{{ proxmox_instance_node }}" + ostemplate: "{{ proxmox_instance_ostemplate }}" + ostype: "{{ proxmox_instance_ostype }}" + password: "{{ omit if proxmox_instance_password | length == 0 else proxmox_instance_password }}" + startup: "{{ omit if proxmox_instance_startup | length == 0 else proxmox_instance_startup }}" + swap: "{{ proxmox_instance_swap }}" + timeout: "{{ proxmox_instance_timeout }}" + unprivileged: "{{ (proxmox_instance_unprivileged | int) if proxmox_ct_configuration.stat.exists else omit }}" + update: true + vmid: "{{ proxmox_instance_vmid }}" + become: true + delegate_to: "{{ proxmox_delegate_to }}" + notify: Restart instance + +- name: Ensure instance is started + community.proxmox.proxmox: + api_host: "{{ proxmox_api_host }}" + api_user: "{{ proxmox_api_user }}" + api_token_id: "{{ proxmox_api_token_id }}" + api_token_secret: "{{ proxmox_api_token_secret }}" + vmid: "{{ proxmox_instance_vmid }}" + node: "{{ proxmox_instance_node }}" + state: started + delegate_to: "{{ proxmox_delegate_to }}" + +- name: Manage cmode option + ansible.builtin.lineinfile: + path: /etc/pve/lxc/{{ proxmox_instance_vmid }}.conf + regexp: '^cmode:' + line: "cmode: {{ proxmox_instance_cmode }}" + become: true + delegate_to: "{{ proxmox_delegate_to }}" + notify: Restart instance + +- name: Manage features option + ansible.builtin.lineinfile: + path: /etc/pve/lxc/{{ proxmox_instance_vmid }}.conf + regexp: '^features:' + line: "features: {{ proxmox_instance_features | join(' ') }}" + become: true + delegate_to: "{{ proxmox_delegate_to }}" + notify: Restart instance + +- name: Manage unprivileged option + ansible.builtin.lineinfile: + path: /etc/pve/lxc/{{ proxmox_instance_vmid }}.conf + regexp: '^unprivileged:' + line: "unprivileged: {{ proxmox_instance_unprivileged | int }}" + become: true + delegate_to: "{{ proxmox_delegate_to }}" + notify: Restart instance + +- name: Flush handlers + ansible.builtin.meta: flush_handlers diff --git a/tasks/main.yml b/tasks/main.yml index 4734590..bb01047 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -24,3 +24,9 @@ when: - proxmox_instance_type == "vm" - proxmox_instance_ha | length > 0 + +# Instance: ct +- name: Import instance creation tasks + ansible.builtin.include_tasks: + file: instance_ct.yml + when: proxmox_instance_type == "ct"