diff --git a/roles/grub/templates/grub.cfg.j2 b/roles/grub/templates/grub.cfg.j2 index a2432cc..8572559 100644 --- a/roles/grub/templates/grub.cfg.j2 +++ b/roles/grub/templates/grub.cfg.j2 @@ -12,7 +12,7 @@ {% else %} {% set paramValPrefix = '' %} {% endif %} -{{ paramName }}="{{ paramValPrefix }}{{ param.value | aybarsm.helper.flatten_query('name', 'value', '=', ' ') }}" +{{ paramName }}="{{ paramValPrefix }}{{ param.value | aybarsm.helper.to_querystring('name', 'value', '=', ' ') }}" {% else %} {{ paramName }}="{{ param.value }}" {% endif %} diff --git a/roles/network_interfaces/templates/network_interfaces.j2 b/roles/network_interfaces/templates/network_interfaces.j2 index b57e258..b9a5870 100644 --- a/roles/network_interfaces/templates/network_interfaces.j2 +++ b/roles/network_interfaces/templates/network_interfaces.j2 @@ -36,7 +36,7 @@ iface lo inet loopback {% endif %} iface {{ iface.name }} {{ addr_family }} {{ ifaceMethod }} {% if ifaceParams | length > 0 %} -{{ ifaceParams | aybarsm.helper.flatten_query('name', 'value', ' ', '\n') | indent(4, true) }} +{{ ifaceParams | aybarsm.helper.to_querystring('name', 'value', ' ', '\n') | indent(4, true) }} {% endif %} {% endif %} diff --git a/roles/package_manager/defaults/main.yml b/roles/package_manager/defaults/main.yml index 8fde4c2..e77928c 100644 --- a/roles/package_manager/defaults/main.yml +++ b/roles/package_manager/defaults/main.yml @@ -5,6 +5,8 @@ linux_role_package_manager_enabled: false # Available options: specific, common linux_package_manager_package_strategy: specific +linux_package_manager_package_simulation: true + linux_package_manager_default: [] linux_package_manager_group: [] linux_package_manager_host: [] diff --git a/roles/package_manager/tasks/common.yml b/roles/package_manager/tasks/common.yml deleted file mode 100644 index 6fd9884..0000000 --- a/roles/package_manager/tasks/common.yml +++ /dev/null @@ -1,13 +0,0 @@ ---- -- name: Manage system packages with common package manager - ansible.builtin.package: - name: "{{ package_name }}" - state: "{{ item.state | default(omit) }}" - use: "{{ item.use | default(omit) }}" - vars: - package_name: "{{ item.name + '=' + item.version if 'version' in item else item.name }}" - register: linux_package_manager_common_packages_apply - when: - - linux_packages_all | type_debug == 'list' - - linux_packages_all | selectattr('type', 'defined') | selectattr('type', 'equalto', 'package') | length > 0 - loop: "{{ linux_packages_all | selectattr('type', 'defined') | selectattr('type', 'equalto', 'package') | length > 0 }}" diff --git a/roles/package_manager/tasks/common_packages.yml b/roles/package_manager/tasks/common_packages.yml new file mode 100644 index 0000000..b43429d --- /dev/null +++ b/roles/package_manager/tasks/common_packages.yml @@ -0,0 +1,11 @@ +--- +- name: Manage system packages with common package manager + ansible.builtin.package: + name: "{{ item.name }}" + state: "{{ item.state | default(omit) }}" + use: "{{ item.use | default(omit) }}" + register: linux_package_manager_common_packages_apply + when: + - linux_packages_all | type_debug == 'list' + - linux_packages_all | length > 0 + loop: "{{ linux_packages_all }}" diff --git a/roles/package_manager/tasks/deb_packages.yml b/roles/package_manager/tasks/deb_packages.yml index 08bf927..e6f80fa 100644 --- a/roles/package_manager/tasks/deb_packages.yml +++ b/roles/package_manager/tasks/deb_packages.yml @@ -2,7 +2,7 @@ - name: Manage DEB packages via APT become: true ansible.builtin.apt: - name: "{{ package_name }}" + name: "{{ item.name }}" allow_change_held_packages: "{{ item.allow_change_held_packages | default(omit) | bool }}" allow_downgrade: "{{ item.allow_downgrade | default(omit) | bool }}" allow_unauthenticated: "{{ item.allow_unauthenticated | default(omit) | bool }}" @@ -26,10 +26,11 @@ update_cache_retries: "{{ item.update_cache_retries | default(omit) }}" update_cache_retry_max_delay: "{{ item.update_cache_retry_max_delay | default(omit) }}" upgrade: "{{ item.upgrade | default(omit) }}" - vars: - package_name: "{{ item.name + '=' + item.version if 'version' in item else item.name }}" loop: "{{ linux_package_manager_packages_all }}" - register: linux_package_manager_deb_packages_apply + vars: + __is_simulation: "{{ __linux_package_manager_simulate_packages | default(false) | bool }}" + register: "{{ 'linux_package_manager_deb_packages_' + ('simulate' if __is_simulation else 'simulate') }}" + check_mode: "{{ __is_simulation }}" when: - linux_package_manager_packages_all | type_debug == 'list' - linux_package_manager_packages_all | length > 0 diff --git a/roles/package_manager/tasks/deb_simulations.yml b/roles/package_manager/tasks/deb_simulations.yml new file mode 100644 index 0000000..ec213f5 --- /dev/null +++ b/roles/package_manager/tasks/deb_simulations.yml @@ -0,0 +1,12 @@ +--- +- name: Simulate DEB package install via APT + ansible.builtin.command: + cmd: "apt --simulate install {{ packages | join(' ') }}" + register: linux_package_manager_deb_packages_simulate_install + changed_when: false + +- name: Simulate DEB package remove via APT + ansible.builtin.command: + cmd: "apt --simulate remove {{ packages | join(' ') }}" + register: linux_package_manager_deb_packages_simulate_remove + changed_when: false \ No newline at end of file diff --git a/roles/package_manager/tasks/main.yml b/roles/package_manager/tasks/main.yml index f8e7c0d..3683a67 100644 --- a/roles/package_manager/tasks/main.yml +++ b/roles/package_manager/tasks/main.yml @@ -12,6 +12,18 @@ - linux_role_package_manager_enabled | default(false) | bool - ansible_os_family | lower == 'debian' +- name: Simulate DEB package tasks (APT) + ansible.builtin.import_tasks: + file: deb_packages.yml + vars: + __linux_package_manager_simulate_packages: true + when: + - linux_role_package_manager_enabled | default(false) | bool + - linux_package_manager_package_strategy | lower == 'specific' + - ansible_os_family | lower == 'debian' + - linux_package_manager_package_simulation | default(true) | bool + - not ansible_check_mode + - name: Import DEB package tasks (APT) ansible.builtin.import_tasks: file: deb_packages.yml @@ -22,7 +34,7 @@ - name: Import common package manager tasks ansible.builtin.import_tasks: - file: common.yml + file: common_packages.yml when: - linux_role_package_manager_enabled | default(false) | bool - linux_package_manager_package_strategy | lower == 'common' diff --git a/roles/package_manager/vars/debian.yml b/roles/package_manager/vars/debian.yml index 07a78f4..41cfd19 100644 --- a/roles/package_manager/vars/debian.yml +++ b/roles/package_manager/vars/debian.yml @@ -10,6 +10,11 @@ __linux_package_manager_package_config: - ['type', 'equalto', 'package'] - when: "{{ __linux_package_manager_uniques_package | product(['defined']) | list }}" logic: or + replace_keys: + - before: package + after: name + - before: pkg + after: name setattr: - attribute: name value: package @@ -25,13 +30,9 @@ __linux_package_manager_package_config: - ['name', 'undefined'] - ['pkg', 'defined'] - attribute: state - value: absent - else: present - overwrite: true + value: present when: - - ['autoremove', 'defined'] - - ['autoremove', 'true'] - logic: and + - ['state', 'undefined'] splitattr: - srcAttr: name dstAttr: version diff --git a/roles/posix/defaults/sysctl.yml b/roles/posix/defaults/main.yml similarity index 89% rename from roles/posix/defaults/sysctl.yml rename to roles/posix/defaults/main.yml index 1bc4dfa..6445b96 100644 --- a/roles/posix/defaults/sysctl.yml +++ b/roles/posix/defaults/main.yml @@ -3,6 +3,6 @@ linux_role_posix_sysctl_enabled: false linux_posix_sysctl_default: [] linux_posix_sysctl_group: [] linux_posix_sysctl_host: [] -# The combination strategy below is highly nested hierarchy compliant and recommended (Example provided below) +# The combination strategy below is highly nested hierarchy compliant and recommended. # linux_posix_sysctl_host > linux_posix_sysctl_group > linux_posix_sysctl_default linux_posix_sysctl_all: "{{ (linux_posix_sysctl_host + linux_posix_sysctl_group + linux_posix_sysctl_default) | unique(attribute='name') }}" \ No newline at end of file diff --git a/roles/posix/tasks/sysctl.yml b/roles/posix/tasks/sysctl.yml index 4a93475..0d4d9f5 100644 --- a/roles/posix/tasks/sysctl.yml +++ b/roles/posix/tasks/sysctl.yml @@ -1,4 +1,5 @@ --- +# TODO: Implement handlers for sysctl - name: Deploy posix sysctl settings ansible.posix.sysctl: name: "{{ item.name }}" @@ -8,7 +9,8 @@ state: "{{ item.state | default(omit) }}" sysctl_file: "{{ item.sysctl_file | default(omit) }}" sysctl_set: "{{ item.sysctl_set | default(omit) | bool }}" + loop: "{{ linux_posix_sysctl_all }}" + register: linux_posix_sysctl_deploy when: - - linux_posix_sysctl_all | linux_type_debug == 'list' + - linux_posix_sysctl_all | type_debug == 'list' - linux_posix_sysctl_all | length > 0 - loop: "{{ linux_posix_sysctl_all }}" diff --git a/roles/proxmox/defaults/main.yml b/roles/proxmox/defaults/main.yml index 6c00d83..dab0300 100644 --- a/roles/proxmox/defaults/main.yml +++ b/roles/proxmox/defaults/main.yml @@ -1,7 +1,7 @@ linux_role_proxmox_enabled: false -linux_proxmox_default: [] -linux_proxmox_group: [] -linux_proxmox_host: [] +linux_proxmox_default: {} +linux_proxmox_group: {} +linux_proxmox_host: {} -linux_proxmox_all: "{{ linux_proxmox_default + linux_proxmox_group + linux_proxmox_host }}" \ No newline at end of file +linux_proxmox_all: "{{ linux_proxmox_default | combine(linux_proxmox_group, linux_proxmox_host) }}" \ No newline at end of file diff --git a/roles/proxmox/tasks/debug.yml b/roles/proxmox/tasks/debug.yml new file mode 100644 index 0000000..ab3178d --- /dev/null +++ b/roles/proxmox/tasks/debug.yml @@ -0,0 +1,7 @@ +--- +- name: Debug + ansible.builtin.debug: + msg: + linux_proxmox_role_repos: "{{ linux_proxmox_role_repos }}" + linux_proxmox_all: "{{ linux_proxmox_all }}" + delegate_to: localhost diff --git a/roles/proxmox/tasks/main.yml b/roles/proxmox/tasks/main.yml new file mode 100644 index 0000000..2ba59a6 --- /dev/null +++ b/roles/proxmox/tasks/main.yml @@ -0,0 +1,4 @@ +--- +- name: Include Debug Tasks + ansible.builtin.import_tasks: + file: debug.yml diff --git a/roles/proxmox/vars/main.yml b/roles/proxmox/vars/main.yml index 315d146..a70e738 100644 --- a/roles/proxmox/vars/main.yml +++ b/roles/proxmox/vars/main.yml @@ -31,25 +31,4 @@ linux_proxmox_role_repos: filename: ceph ceph_reef_no_subscription: repo: "deb {{ linux_proxmox_repo_url_no_subscription }}/ceph-reef {{ ansible_distribution_release }} no-subscription" - filename: ceph - -# ' ' -# if is empty, there won't be any prefix at the end of the repo line -# (i.e. /pve bookworm pve-enterprise vs /ceph-pacific bookworm enterprise) -# if is empty, it will be the same as - -# (i.e. pve-no-subscription vs ceph) -# linux_proxmox_role_repos: -# - ['pve', 'pve-'] -# - ['pbs', 'pbs-'] -# - ['pmg', 'pmg-'] -# - ['ceph-reef', '', 'ceph'] -# - ['ceph-quincy', '', 'ceph'] -# - ['ceph-pacific', '', 'ceph'] - -# linux_proxmox_role_repos: -# pve: ['pve-'] -# pbs: ['pbs-'] -# pmg: ['pmg-'] -# ceph_reef: ['ceph-reef', '', 'ceph'] -# ceph_quincy: ['ceph-quincy', '', 'ceph'] -# ceph_pacific: ['ceph-pacific', '', 'ceph'] \ No newline at end of file + filename: ceph \ No newline at end of file diff --git a/roles/systemd/defaults/network.yml b/roles/systemd/defaults/network.yml deleted file mode 100644 index 67b4bc9..0000000 --- a/roles/systemd/defaults/network.yml +++ /dev/null @@ -1,35 +0,0 @@ ---- -linux_role_systemd_network_enabled: false - -linux_systemd_network_apply_changes: false - -linux_systemd_network_backup: true -linux_systemd_network_cleanup: false -linux_systemd_network_cleanup_patterns_use_regex: true - -# Consult: https://manpages.debian.org/bookworm/systemd/systemd.net-naming-scheme.7.en.html -linux_systemd_network_naming_scheme: "v252" - -linux_systemd_network_dir: /etc/systemd/network -linux_systemd_network_template: network.j2 - -linux_systemd_network_default: [] -linux_systemd_network_group: [] -linux_systemd_network_host: [] -# The combination strategy below is highly nested hierarchy compliant and recommended -# linux_systemd_network_host > linux_systemd_network_group > linux_systemd_network_default -linux_systemd_network_all: "{{ (linux_systemd_network_host + linux_systemd_network_group + linux_systemd_network_default) | - selectattr('name', 'defined') | selectattr('name', 'search', '\\.(network|link|netdev)$') | - selectattr('config', 'defined') | unique(attribute='name') }}" - -linux_systemd_network_names: "{{ linux_systemd_network_all | map(attribute='name') }}" -# Escape file names defined in linux_systemd_network_all -linux_systemd_network_cleanup_regex: - - "^({{ linux_systemd_network_names | select('match', '.*\\.link$') | map('replace', '.link', '') | join('|') }})\\.link$" - - "^({{ linux_systemd_network_names | select('match', '.*\\.netdev$') | map('replace', '.netdev', '') | join('|') }})\\.netdev$" - - "^({{ linux_systemd_network_names | select('match', '.*\\.network$') | map('replace', '.network', '') | join('|') }})\\.network$" -# Escape backup files: - - "^.*\\.\\d+\\.\\d{4}-\\d{2}-\\d{2}@\\d{2}:\\d{2}:\\d{2}~$" - -# Join regex expressions -linux_systemd_network_cleanup_patterns: ["(?!{{ linux_systemd_network_cleanup_regex | join('|') }})"]