From d1c18d270a5d01eecbdce941064e52aa6eb99787 Mon Sep 17 00:00:00 2001 From: Michael Grote Date: Wed, 5 Jun 2024 18:58:28 +0200 Subject: [PATCH] docker: add housekeeping (#105) Reviewed-on: https://git.mgrote.net/mg/homeserver/pulls/105 Co-authored-by: Michael Grote Co-committed-by: Michael Grote --- playbooks/3_service/docker.yml | 3 ++ .../defaults/main.yml | 3 ++ .../handlers/main.yml | 14 ++++++++ .../mgrote_docker_housekeeping/tasks/main.yml | 36 +++++++++++++++++++ .../templates/docker_housekeeping.service.j2 | 8 +++++ .../templates/docker_housekeeping.timer.j2 | 11 ++++++ 6 files changed, 75 insertions(+) create mode 100644 roles/mgrote_docker_housekeeping/defaults/main.yml create mode 100644 roles/mgrote_docker_housekeeping/handlers/main.yml create mode 100644 roles/mgrote_docker_housekeeping/tasks/main.yml create mode 100644 roles/mgrote_docker_housekeeping/templates/docker_housekeeping.service.j2 create mode 100644 roles/mgrote_docker_housekeeping/templates/docker_housekeeping.timer.j2 diff --git a/playbooks/3_service/docker.yml b/playbooks/3_service/docker.yml index 568953f4..696a38fe 100644 --- a/playbooks/3_service/docker.yml +++ b/playbooks/3_service/docker.yml @@ -19,3 +19,6 @@ - role: mgrote_docker_compose_inline tags: "compose" become: true + - role: mgrote_docker_housekeeping + tags: "housekeeping" + become: true diff --git a/roles/mgrote_docker_housekeeping/defaults/main.yml b/roles/mgrote_docker_housekeeping/defaults/main.yml new file mode 100644 index 00000000..2766b870 --- /dev/null +++ b/roles/mgrote_docker_housekeeping/defaults/main.yml @@ -0,0 +1,3 @@ +--- +docker_housekeeping_schedule: "weekly" +... diff --git a/roles/mgrote_docker_housekeeping/handlers/main.yml b/roles/mgrote_docker_housekeeping/handlers/main.yml new file mode 100644 index 00000000..8b790b7f --- /dev/null +++ b/roles/mgrote_docker_housekeeping/handlers/main.yml @@ -0,0 +1,14 @@ +--- +- name: systemctl daemon-reload + become: true + ansible.builtin.systemd: + daemon_reload: true + notify: Start timer + +- name: Start timer + become: true + ansible.builtin.systemd: + name: docker_housekeeping.timer + state: restarted + enabled: true + notify: systemctl daemon-reload diff --git a/roles/mgrote_docker_housekeeping/tasks/main.yml b/roles/mgrote_docker_housekeeping/tasks/main.yml new file mode 100644 index 00000000..7037f603 --- /dev/null +++ b/roles/mgrote_docker_housekeeping/tasks/main.yml @@ -0,0 +1,36 @@ +--- +- name: Setup docker housekeeping tasks + become: true + ansible.builtin.template: + src: docker_housekeeping.service.j2 + dest: /etc/systemd/system/docker_housekeeping.service + owner: root + group: root + mode: "0644" + notify: + - systemctl daemon-reload + +- name: Setup timer + become: true + ansible.builtin.template: + src: docker_housekeeping.timer.j2 + dest: /etc/systemd/system/docker_housekeeping.timer + owner: root + group: root + mode: "0644" + notify: + - systemctl daemon-reload + - Start timer + +- name: Enable Units + become: true + ansible.builtin.systemd: + name: "{{ item }}" + enabled: true + masked: false + with_items: + - docker_housekeeping.service + - docker_housekeeping.timer + notify: + - Start timer +... diff --git a/roles/mgrote_docker_housekeeping/templates/docker_housekeeping.service.j2 b/roles/mgrote_docker_housekeeping/templates/docker_housekeeping.service.j2 new file mode 100644 index 00000000..ae40c6d4 --- /dev/null +++ b/roles/mgrote_docker_housekeeping/templates/docker_housekeeping.service.j2 @@ -0,0 +1,8 @@ +{{ file_header | default () }} +[Unit] +Description=Docker housekeeping tasks + +[Service] +Type=simple +ExecStart=/usr/bin/docker system prune --force --filter "until=24h" +# https://docs.docker.com/config/pruning diff --git a/roles/mgrote_docker_housekeeping/templates/docker_housekeeping.timer.j2 b/roles/mgrote_docker_housekeeping/templates/docker_housekeeping.timer.j2 new file mode 100644 index 00000000..62caca39 --- /dev/null +++ b/roles/mgrote_docker_housekeeping/templates/docker_housekeeping.timer.j2 @@ -0,0 +1,11 @@ +{{ file_header | default () }} +[Unit] +Description=Timer for docker_housekeeping backups. + +[Timer] +# https://wiki.archlinux.org/title/systemd/Timers +OnCalendar={{ docker_housekeeping_schedule }} +RandomizedDelaySec=30 min + +[Install] +WantedBy=timers.target multi-user.target