--- # Remove/stop/disable systemd units that belong to this SOFTWARE_NAME, # but are not for the current version. - name: "🤔 sys-service | Determine current software/version (lowercase)" ansible.builtin.set_fact: sys_service_sw_lc: "{{ SOFTWARE_NAME | string | trim | lower }}" sys_service_ver_lc: "{{ lookup('version') | string | trim | lower }}" - name: "📊 sys-service | Collect {{ SOFTWARE_NAME }} timers (all versions)" become: true ansible.builtin.command: argv: - systemctl - list-unit-files - "*.{{ sys_service_sw_lc }}*.timer" - --no-legend - --no-pager register: sys_service_all_timers changed_when: false failed_when: false - name: "📊 sys-service | Collect {{ SOFTWARE_NAME }} services (all versions)" become: true ansible.builtin.command: argv: - systemctl - list-unit-files - "*.{{ sys_service_sw_lc }}*.service" - --no-legend - --no-pager register: sys_service_all_services changed_when: false failed_when: false - name: "🔨 sys-service | Build old-version unit lists (exclude current version)" ansible.builtin.set_fact: sys_service_old_units_timers: >- {{ (sys_service_all_timers.stdout_lines | default([])) | map('split', ' ') | map('first') | select('search', '\\.' ~ sys_service_sw_lc ~ '(?:@)?\\.timer$') | reject('search', '\\.' ~ sys_service_ver_lc ~ '\\.' ~ sys_service_sw_lc) | list }} sys_service_old_units_services: >- {{ (sys_service_all_services.stdout_lines | default([])) | map('split', ' ') | map('first') | select('search', '\\.' ~ sys_service_sw_lc ~ '(?:@)?\\.service$') | reject('search', '\\.' ~ sys_service_ver_lc ~ '\\.' ~ sys_service_sw_lc) | list }} - name: "âšī¸ sys-service | Stop old-version services (best-effort)" become: true ansible.builtin.systemd: name: "{{ item }}" state: stopped loop: "{{ sys_service_old_units_services }}" when: sys_service_old_units_services | length > 0 failed_when: false - name: "âšī¸ sys-service | Stop old-version timers (best-effort)" become: true ansible.builtin.systemd: name: "{{ item }}" state: stopped loop: "{{ sys_service_old_units_timers }}" when: sys_service_old_units_timers | length > 0 failed_when: false - name: "🔴 sys-service | Disable old-version services (best-effort)" become: true ansible.builtin.systemd: name: "{{ item }}" enabled: false loop: "{{ sys_service_old_units_services }}" when: sys_service_old_units_services | length > 0 failed_when: false - name: "🔴 sys-service | Disable old-version timers (best-effort)" become: true ansible.builtin.systemd: name: "{{ item }}" enabled: false loop: "{{ sys_service_old_units_timers }}" when: sys_service_old_units_timers | length > 0 failed_when: false - name: "đŸ—‘ī¸ sys-service | Delete old-version unit files" become: true ansible.builtin.file: path: "{{ [ DIR_SYSTEM_SERVICE, item ] | path_join }}" state: absent loop: "{{ (sys_service_old_units_services + sys_service_old_units_timers) | unique }}" when: (sys_service_old_units_services | length > 0) or (sys_service_old_units_timers | length > 0) - name: "🔄 sys-service | systemd daemon-reload after pruning" become: true ansible.builtin.systemd: daemon_reload: true when: (sys_service_old_units_services | length > 0) or (sys_service_old_units_timers | length > 0)