From 2209d1b2a37f46c56f7e4f319b682827ccddf32c Mon Sep 17 00:00:00 2001 From: Murat Aybars <39916128+aybarsm@users.noreply.github.com> Date: Sat, 13 Jul 2024 11:39:51 +0100 Subject: [PATCH] PRE - Network role consolidation --- galaxy.yml | 1 + roles/proxmox/defaults/main.yml | 8 +--- roles/proxmox/meta/main.yml | 3 +- roles/proxmox/tasks/main.yml | 10 +++- .../templates/purpose_package_setup.j2 | 4 +- roles/proxmox/vars/main.yml | 46 +++++++++++++++++++ 6 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 roles/proxmox/vars/main.yml diff --git a/galaxy.yml b/galaxy.yml index 8cf9184..c74b2ae 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -20,6 +20,7 @@ dependencies: ansible.posix: "*" community.general: "*" aybarsm.helper: "*" + lae.proxmox: "*" repository: https://github.com/aybarsm/ansible-collection-linux documentation: https://github.com/aybarsm/ansible-collection-linux homepage: https://github.com/aybarsm/ansible-collection-linux diff --git a/roles/proxmox/defaults/main.yml b/roles/proxmox/defaults/main.yml index 0ef8dd1..0124b2b 100644 --- a/roles/proxmox/defaults/main.yml +++ b/roles/proxmox/defaults/main.yml @@ -3,7 +3,7 @@ proxmox__role_enabled: false proxmox__repo_url_enterprise: https://enterprise.proxmox.com/debian proxmox__repo_url_no_subscription: http://download.proxmox.com/debian -proxmox__purpose_names: ['pve', 'pbs', 'pmg', 'ceph-pacific', 'ceph-quincy', 'ceph-reef'] +proxmox__purpose_names: ['pve', 'pbs', 'pmg', 'ceph_pacific', 'ceph_quincy', 'ceph_reef'] proxmox__purpose_types: ['enterprise', 'no-subscription'] proxmox__purpose_packages: pve: pve-manager @@ -40,8 +40,4 @@ proxmox__host: {} # version: 3.2.4-1 # pmg: # type: no-subscription -# version: 8.1.0 - -# The combination strategy below is highly nested hierarchy compliant and recommended (Example provided below) -# proxmox__host > proxmox__group > proxmox__default -proxmox__all: "{{ proxmox__default | combine(proxmox__group, proxmox__host, recursive=true, list_merge='replace') }}" \ No newline at end of file +# version: 8.1.0 \ No newline at end of file diff --git a/roles/proxmox/meta/main.yml b/roles/proxmox/meta/main.yml index a7eebd5..ddf19d4 100644 --- a/roles/proxmox/meta/main.yml +++ b/roles/proxmox/meta/main.yml @@ -1,2 +1,3 @@ # dependencies: -# - role: aybarsm.linux.package_manager \ No newline at end of file +# - role: aybarsm.linux.package_manager +# - role: lae.proxmox \ No newline at end of file diff --git a/roles/proxmox/tasks/main.yml b/roles/proxmox/tasks/main.yml index 8b5dbb0..790eec9 100644 --- a/roles/proxmox/tasks/main.yml +++ b/roles/proxmox/tasks/main.yml @@ -1,9 +1,15 @@ --- +- name: Proxmox Query + become: true + proxmox_query: + query: storage + register: proxmox__query_storage - name: Debug ansible.builtin.debug: msg: + proxmox__query_storage: "{{ proxmox__query_storage }}" # role_path: "{{ role_path }}" - purpose_package_setup: "{{ lookup('template', proxmox__purpose_package_setup_template) }}" + # purpose_package_setup: "{{ lookup('template', proxmox__purpose_package_setup_template) }}" delegate_to: localhost # - name: Import aybarsm linux ansible role # ansible.builtin.import_role: @@ -16,4 +22,4 @@ # - name: Import aybarsm linux ansible role - settle local fact tasks # ansible.builtin.import_role: # name: aybarsm.linux.ansible -# tasks_from: settle_local_facts.yml \ No newline at end of file +# tasks_from: settle_local_facts.yml diff --git a/roles/proxmox/templates/purpose_package_setup.j2 b/roles/proxmox/templates/purpose_package_setup.j2 index e6da31e..8ef9ae2 100644 --- a/roles/proxmox/templates/purpose_package_setup.j2 +++ b/roles/proxmox/templates/purpose_package_setup.j2 @@ -3,7 +3,7 @@ {%- endif -%} {%- set proxmox_repos = [] -%} {%- set proxmox_packages = [] -%} -{%- if proxmox__all.purposes is defined -%} +{%- if proxmox__manage_purpose_package_setup is defined and proxmox__manage_purpose_package_setup and proxmox__all.purposes is defined -%} {%- for purpose in proxmox__purpose_names -%} {%- for purpose_type in proxmox__purpose_types -%} {%- set host_config = proxmox__all.purposes[purpose] if purpose in proxmox__all.purposes else none -%} @@ -29,7 +29,7 @@ }) -%} {%- endif -%} {%- elif purpose.startswith('ceph-') -%} -{%- set proxmox_repos = proxmox_repos.append({ +{%- set proxmox_repos = proxmox_repos.append({ 'type': 'repo', 'repo': 'deb ' + purpose_repo + '/' + purpose + ' ' + ansible_distribution_release + ' ' + purpose_type, 'filename': 'ceph', diff --git a/roles/proxmox/vars/main.yml b/roles/proxmox/vars/main.yml new file mode 100644 index 0000000..ac7f7d0 --- /dev/null +++ b/roles/proxmox/vars/main.yml @@ -0,0 +1,46 @@ +# The combination strategy below is highly nested hierarchy compliant and recommended (Example provided below) +# proxmox__host > proxmox__group > proxmox__default +proxmox__all: "{{ proxmox__default | combine(proxmox__group, proxmox__host, recursive=true, list_merge='replace') }}" + +__proxmox__purpose_packages: >- + {%- set proxmox_repos = [] -%} + {%- set proxmox_packages = [] -%} + {%- set purpose_packages = [] -%} + {%- if proxmox__manage_purpose_package_setup is defined and proxmox__manage_purpose_package_setup and proxmox__all.purposes is defined -%} + {%- for purpose in proxmox__purpose_names -%} + {%- for purpose_type in proxmox__purpose_types -%} + {%- set host_config = proxmox__all.purposes[purpose] if purpose in proxmox__all.purposes else none -%} + {%- set is_host_purpose = true if host_config else false -%} + {%- set is_host_purpose_type = true if host_config and host_config.type is defined and host_config.type == purpose_type else false -%} + {%- set host_purpose_version = host_config.version if host_config and host_config.version is defined else none -%} + {%- set purpose_repo_state = 'present' if is_host_purpose and is_host_purpose_type else 'absent' -%} + {%- set purpose_repo = proxmox__repo_url_enterprise if purpose_type == 'enterprise' else proxmox__repo_url_no_subscription -%} + {%- if purpose in ['pve', 'pbs', 'pmg'] -%} + {%- set proxmox_repos = proxmox_repos.append({ + 'type': 'repo', + 'repo': 'deb ' + purpose_repo + '/' + purpose + ' ' + ansible_distribution_release + ' ' + purpose + '-' + purpose_type, + 'filename': purpose + '-' + purpose_type, + 'state': purpose_repo_state + }) -%} + {%- if host_purpose_version and proxmox__purpose_packages[purpose] is defined and not purpose in purpose_packages -%} + {%- set purpose_packages = purpose_packages.append(purpose) -%} + {%- set package_name = proxmox__purpose_packages[purpose] if host_purpose_version == 'latest' else proxmox__purpose_packages[purpose] + '=' + host_purpose_version -%} + {%- set package_state = 'latest' if host_purpose_version == 'latest' else 'present' -%} + {%- set proxmox_packages = proxmox_packages.append({ + 'type': 'package', + 'name': package_name, + 'state': package_state + }) -%} + {%- endif -%} + {%- elif purpose.startswith('ceph-') or purpose.startswith('ceph_') -%} + {%- set proxmox_repos = proxmox_repos.append({ + 'type': 'repo', + 'repo': 'deb ' + purpose_repo + '/' + (purpose | replace('_', '-')) + ' ' + ansible_distribution_release + ' ' + purpose_type, + 'filename': 'ceph', + 'state': purpose_repo_state + }) -%} + {%- endif -%} + {%- endfor -%} + {%- endfor -%} + {%- endif -%} + {{ proxmox_repos + proxmox_packages }} \ No newline at end of file