Skip to content

Commit

Permalink
PRE - Change repo backup strategy #3
Browse files Browse the repository at this point in the history
  • Loading branch information
aybarsm committed Jul 5, 2024
1 parent 7481315 commit bc7f9ed
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 20 deletions.
63 changes: 44 additions & 19 deletions roles/package_manager/tasks/upgrade.yml
Original file line number Diff line number Diff line change
@@ -1,35 +1,48 @@
---
- name: Create temporary directory for repo lists (Clean Upgrade)
- name: Gather main repo list file stats (Clean Upgrade)
become: true
ansible.builtin.tempfile:
state: directory
suffix: clean_upgrade
register: package_manager__upgrade_create_temp_repo_dir
when: __package_manager__upgrade_clean | default(false) | bool
ansible.builtin.stat:
path: "{{ package_manager__repo_list_file }}"
register: package_manager__upgrade_main_repo_list_stat
when:
- __package_manager__upgrade_clean | default(false) | bool
- __package_manager__has_main_repo_list | default(ansible_os_family | lower == 'debian') | bool
- package_manager__repo_list_file is defined

- name: Gather main repo list file and repo list directory stats (Clean Upgrade)
- name: Find repo source files (Clean Upgrade)
become: true
ansible.builtin.stat:
path: "{{ item }}"
loop: "{{ backup_targets }}"
vars:
backup_targets: "{{ (__package_manager__has_main_repo_list) |
ternary([package_manager__repo_list_file, package_manager__repo_list_dir], [package_manager__repo_list_dir]) }}"
register: package_manager__upgrade_repo_lists_file_stat
when: __package_manager__upgrade_clean | default(false) | bool
ansible.builtin.find:
paths: "{{ package_manager__repo_list_dir }}"
patterns: "{{ package_manager__repo_list_patterns }}"
use_regex: "{{ package_manager__repo_list_use_regex | bool }}"
register: package_manager__upgrade_find_repo_list_files
when:
- __package_manager__upgrade_clean | default(false) | bool

- name: Set facts for backup and restore (Clean Upgrade)
ansible.builtin.set_fact:
__package_manager__clean_upgrade_backup: "{{ {'src': backup_src, 'dest': backup_dest} | aybarsm.helper.to_list_of_dicts }}"
__package_manager__clean_upgrade_restore: "{{ {'src': backup_dest, 'dest': backup_src} | aybarsm.helper.to_list_of_dicts }}"
vars:
tmp_dir: "{{ package_manager__upgrade_create_temp_repo_dir.path }}"
backup_src: "{{ package_manager__upgrade_repo_lists_file_stat.results | selectattr('stat.exists', 'truthy') | map(attribute='stat.path') | list }}"
backup_dest: "{{ [tmp_dir] | product(backup_src | map('basename')) | map('path_join') | list }}"
main_repo_list: "{{
(package_manager__upgrade_main_repo_list_stat.stat.exist is defined and package_manager__upgrade_main_repo_list_stat.stat.exist is truthy ) |
ternary(
[package_manager__upgrade_main_repo_list_stat.stat.path],
[]
)
}}"
repo_lists: "{{ (package_manager__upgrade_find_repo_list_files.files.length > 0) |
ternary(
(package_manager__upgrade_find_repo_list_files.files | map(attribute='path') | list),
[]
)
}}"
backup_src: "{{ main_repo_list + repo_lists }}"
backup_dest: "{{ backup_src | map('regex_replace', '^(.*)$', '\\1.' + now().utcnow().strftime('%Y%m%dT%H%M%S.%fZ') + '.disabled') }}"
register: package_manager__upgrade_set_facts_backup_restore
when:
- __package_manager__upgrade_clean | default(false) | bool
- package_manager__upgrade_repo_lists_file_stat.results | selectattr('stat.exists', 'truthy') | list | length > 0
- package_manager__upgrade_main_repo_list_stat.stat.exist is defined

- name: Copy (Backup) repo list files and directory (Clean Upgrade)
become: true
Expand All @@ -44,6 +57,18 @@
- __package_manager__clean_upgrade_backup is defined
- __package_manager__clean_upgrade_backup | length > 0

- name: Temproarily remove repo list files and directory (Clean Upgrade)
become: true
ansible.builtin.file:
path: "{{ item.src }}"
state: absent
loop: "{{ __package_manager__clean_upgrade_backup }}"
register: package_manager__upgrade_repo_list_remove
when:
- __package_manager__upgrade_clean | default(false) | bool
- __package_manager__clean_upgrade_backup is defined
- __package_manager__clean_upgrade_backup | length > 0

- name: Perform DEB package upgrade via APT
become: true
ansible.builtin.apt:
Expand Down
4 changes: 3 additions & 1 deletion roles/package_manager/vars/debian.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ __package_manager__has_main_repo_list: true
package_manager__repo_dir: /etc/apt
package_manager__repo_list_file: "{{ package_manager__repo_dir}}/sources.list"
package_manager__repo_list_dir: "{{ package_manager__repo_dir}}/sources.list.d"
package_manager__default_repo_template: etc/apt/default.sources.list.j2
package_manager__repo_list_use_regex: true
package_manager__repo_list_patterns: [".*\\.list$"]

package_manager__default_repo_template: etc/apt/default.sources.list.j2
package_manager__upgrade_dpkg_options: ''
package_manager__upgrade_update_repo_cache: true

Expand Down
2 changes: 2 additions & 0 deletions roles/package_manager/vars/redhat.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
__package_manager__has_main_repo_list: false
package_manager__repo_list_dir: /etc/yum.repos.d
package_manager__repo_list_use_regex: true
package_manager__repo_list_patterns: [".*\\.repo$"]

__package_manager__upgrade_modes: ['full']
__package_manager__clean_upgrade_modes: "{{ ['clean_'] | product(__package_manager__upgrade_modes) | map('join') }}"
Expand Down

0 comments on commit bc7f9ed

Please sign in to comment.