diff --git a/group_vars/all b/group_vars/all index 542ce8a5..e04a3249 100644 --- a/group_vars/all +++ b/group_vars/all @@ -18,4 +18,5 @@ on_calendar_deploy_mailu_certificates: "*-*-* 12,00:50:00" # Space Variables size_percent_maximum_backup: 75 -size_percent_disc_space_warning: 85 \ No newline at end of file +size_percent_disc_space_warning: 85 +size_percent_free_disc_space: 90 \ No newline at end of file diff --git a/roles/native-free-disc-space/README.md b/roles/native-free-disc-space/README.md new file mode 100644 index 00000000..16328dae --- /dev/null +++ b/roles/native-free-disc-space/README.md @@ -0,0 +1,4 @@ +# free-disc-space +Frees disc space +## More information +- https://askubuntu.com/questions/380238/how-to-clean-tmp \ No newline at end of file diff --git a/roles/native-free-disc-space/handlers/main.yml b/roles/native-free-disc-space/handlers/main.yml new file mode 100644 index 00000000..51f329b5 --- /dev/null +++ b/roles/native-free-disc-space/handlers/main.yml @@ -0,0 +1,12 @@ +- name: "reload free-disc-space.service" + systemd: + name: free-disc-space.service + state: reloaded + enabled: yes + daemon_reload: yes +- name: "restart free-disc-space.timer" + systemd: + name: free-disc-space.timer + state: restarted + enabled: yes + daemon_reload: yes diff --git a/roles/native-free-disc-space/meta/main.yml b/roles/native-free-disc-space/meta/main.yml new file mode 100644 index 00000000..9d9d34e2 --- /dev/null +++ b/roles/native-free-disc-space/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - native-systemd-email diff --git a/roles/native-free-disc-space/tasks/main.yml b/roles/native-free-disc-space/tasks/main.yml new file mode 100644 index 00000000..91d84e66 --- /dev/null +++ b/roles/native-free-disc-space/tasks/main.yml @@ -0,0 +1,22 @@ +- name: "create {{free_disc_space_folder}" + file: + path: "{{free_disc_space_folder}" + state: directory + mode: 0755 + +- name: create free-disc-space.sh + template: + src: free-disc-space.sh.j2 + dest: "{{free_disc_space_folder}free-disc-space.sh" + +- name: create free-disc-space.service + template: + src: free-disc-space.service.j2 + dest: /etc/systemd/system/free-disc-space.service + notify: reload free-disc-space.service + +- name: create free-disc-space.timer + template: + src: free-disc-space.timer.j2 + dest: /etc/systemd/system/free-disc-space.timer + notify: restart free-disc-space.timer diff --git a/roles/native-free-disc-space/templates/free-disc-space.service.j2 b/roles/native-free-disc-space/templates/free-disc-space.service.j2 new file mode 100644 index 00000000..e957ae6e --- /dev/null +++ b/roles/native-free-disc-space/templates/free-disc-space.service.j2 @@ -0,0 +1,7 @@ +[Unit] +Description=freeing disc space +OnFailure=systemd-email@%n.service + +[Service] +Type=oneshot +ExecStart=/bin/bash {{free_disc_space_folder}}free-disc-space.sh {{size_percent_free_disc_space}} diff --git a/roles/native-free-disc-space/templates/free-disc-space.sh.j2 b/roles/native-free-disc-space/templates/free-disc-space.sh.j2 new file mode 100644 index 00000000..f6cf93b8 --- /dev/null +++ b/roles/native-free-disc-space/templates/free-disc-space.sh.j2 @@ -0,0 +1,52 @@ +#!/bin/sh +# @param $1 mimimum free disc space +# @param $2 --force to for execution indepentend on how much disc space is free + +execute_free_disc_space=0 +minimum_percent_free_disc_space="$1" +force_freeing=false +echo "Checking free disc space..." +df +if [ $# -gt 0 ] && [ "$2" == "--force" ]; then + echo "Forcing disc space freeing." + force_freeing=true +fi +for disc_use_percent in $(df --output=pcent | sed 1d) +do + disc_use_percent_number=$(echo "$disc_use_percent" | sed "s/%//") + if [ "$disc_use_percent_number" -gt "$minimum_percent_free_disc_space" ]; then + echo "WARNING: $disc_use_percent_number exceeds the limit of {{size_percent_disc_space_warning}}%." + execute_free_disc_space+=1; + fi +done +if [ "$disc_use_percent_number" -gt "$minimum_percent_free_disc_space" ] || [ "$force_freeing" = true ]; then + echo "cleaning up /tmp" && + find /tmp -type f -atime +10 -delete || exit 1 + + {% if backups_folder_path is defined and size_percent_maximum_backup is defined %} + echo "cleaning up backups" && + python /home/administrator/scripts/backups-cleanup/backups-cleanup.py --backups-folder-path {{backups_folder_path}} --maximum-backup-size-percent {{size_percent_maximum_backup}} || exit 2 + {% endif %} + + if pacman -Qs $package > /dev/null ; then + echo "cleaning up docker" && + docker system prune -f || exit 3 + + nextcloud_application_container="nextcloud-application-1" + if [ "$(docker ps -a -q -f name=$nextcloud_application_container)" ] ; then + docker exec -it -u www-data $nextcloud_application_container /var/www/html/occ files:cleanup || exit 4 + docker exec -it -u www-data $nextcloud_application_container /var/www/html/occ trashbin:cleanup --all-users || exit 5 + docker exec -it -u www-data $nextcloud_application_container /var/www/html/occ versions:cleanup || exit 6 + fi + + fi + + echo "cleaning pacman cache" && + yes | pacman -Sc || exit 7 + + echo "cleanup finished." +elif + echo "Sufficiend disc space available." + echo "To force the freeing of disc space pass the parameter --force." +fi +exit 0 \ No newline at end of file diff --git a/roles/native-free-disc-space/templates/free-disc-space.timer.j2 b/roles/native-free-disc-space/templates/free-disc-space.timer.j2 new file mode 100644 index 00000000..e9caf523 --- /dev/null +++ b/roles/native-free-disc-space/templates/free-disc-space.timer.j2 @@ -0,0 +1,10 @@ +[Unit] +Description=starts free-disc-space.service + +[Timer] +OnCalendar={{on_calendar_disc_space_check}} +RandomizedDelaySec={{randomized_delay_sec}} +Persistent=true + +[Install] +WantedBy=timers.target diff --git a/roles/native-free-disc-space/vars/main.yml b/roles/native-free-disc-space/vars/main.yml new file mode 100644 index 00000000..417f8d5e --- /dev/null +++ b/roles/native-free-disc-space/vars/main.yml @@ -0,0 +1 @@ +free_disc_space_folder: "/home/administrator/scripts/free-disc-space/" \ No newline at end of file