From 82c25edf8e6334aa9f7c42da12b20ee384dba0f7 Mon Sep 17 00:00:00 2001 From: Tobias Reisinger Date: Fri, 18 Oct 2024 16:34:53 +0200 Subject: [PATCH] Add playbook to stop and backup services --- playbooks/filter_plugins/service_filters.py | 10 +++++++ playbooks/stop-and-backup-unused.yml | 32 +++++++++++++++++++++ playbooks/tasks/get-unused.yml | 17 +++++++++++ playbooks/tasks/stop-unused.yml | 18 ++---------- 4 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 playbooks/stop-and-backup-unused.yml create mode 100644 playbooks/tasks/get-unused.yml diff --git a/playbooks/filter_plugins/service_filters.py b/playbooks/filter_plugins/service_filters.py index 5f22977..1ff7896 100644 --- a/playbooks/filter_plugins/service_filters.py +++ b/playbooks/filter_plugins/service_filters.py @@ -3,6 +3,7 @@ class FilterModule(object): return { 'my_service_attributes': self.my_service_attributes, 'services_to_dnscontrol': self.services_to_dnscontrol, + 'services_get_backups': self.services_get_backups, } def my_service_attributes(self, services, host, attribute="name"): @@ -23,6 +24,15 @@ class FilterModule(object): return result + def services_get_backups(self, all_services, wanted_services): + result = [] + for service in all_services: + if service.get("name") in wanted_services: + for backup in service.get("backup") or []: + result.append(backup["name"]) + return result + + def services_to_dnscontrol(self, services): result = {} for service in services: diff --git a/playbooks/stop-and-backup-unused.yml b/playbooks/stop-and-backup-unused.yml new file mode 100644 index 0000000..c126e24 --- /dev/null +++ b/playbooks/stop-and-backup-unused.yml @@ -0,0 +1,32 @@ +--- +- name: Stop and backup services + hosts: serguzim_net + vars: + host_services: "{{ all_services | my_service_attributes(inventory_hostname) | union(common_services) }}" + tasks: + - name: Get unused services + ansible.builtin.include_tasks: + file: tasks/get-unused.yml + + - name: Set unused services backups + ansible.builtin.set_fact: + unused_services_backups: "{{ all_services | services_get_backups(unused_services) }}" + - name: Debug unused services backups + ansible.builtin.debug: + msg: "{{ unused_services_backups }}" + + - name: Stop unused services + ansible.builtin.include_tasks: + file: tasks/stop-unused.yml + + - name: Backup unused services + ansible.builtin.command: + cmd: sudo autorestic -c .autorestic.all.yml backup -l {{ item }} + chdir: "{{ (services_path, 'backup') | path_join }}" + loop: "{{ unused_services_backups }}" + changed_when: true + become: true + register: cmd_result_backup + until: "cmd_result_backup is not failed" + retries: 10 + delay: 10 diff --git a/playbooks/tasks/get-unused.yml b/playbooks/tasks/get-unused.yml new file mode 100644 index 0000000..107fd34 --- /dev/null +++ b/playbooks/tasks/get-unused.yml @@ -0,0 +1,17 @@ +- name: Get running compose projects + ansible.builtin.shell: + executable: /usr/bin/bash + cmd: | + set -o pipefail + docker container ls --format json \ + | jq .Labels \ + | grep -oe 'com.docker.compose.project=[a-zA-Z0-9_-]*' \ + | sed -e 's/com.docker.compose.project=//' \ + | sort \ + | uniq + changed_when: false + register: docker_compose_projects_result + +- name: Set unused services + ansible.builtin.set_fact: + unused_services: "{{ docker_compose_projects_result.stdout_lines | difference(host_services) }}" diff --git a/playbooks/tasks/stop-unused.yml b/playbooks/tasks/stop-unused.yml index e51d00a..a60ccb0 100644 --- a/playbooks/tasks/stop-unused.yml +++ b/playbooks/tasks/stop-unused.yml @@ -1,19 +1,7 @@ -- name: Get running compose projects - ansible.builtin.shell: - cmd: | - set -o pipefail - docker container ls --format json \ - | jq .Labels \ - | grep -oe 'com.docker.compose.project=[a-zA-Z0-9_-]*' \ - | sed -e 's/com.docker.compose.project=//' \ - | sort \ - | uniq - changed_when: false - register: docker_compose_projects_result - - name: Get unused services - ansible.builtin.set_fact: - unused_services: "{{ docker_compose_projects_result.stdout_lines | difference(host_services) }}" + ansible.builtin.include_tasks: + file: tasks/get-unused.yml + when: "unused_services is undefined" - name: Stop unused services ansible.builtin.command: