#SPDX-License-Identifier: MIT-0 --- # tasks file for mastodon - name: Create quadlet staging directory ansible.builtin.tempfile: state: directory prefix: mastodon-quadlets- register: mastodon_quadlet_tmp - name: Setup local directories ansible.builtin.file: name: "{{ item }}" state: directory loop: "{{ mastodon_local_dirs }}" - name: Populate database variables ansible.builtin.include_vars: file: db.yml - name: Populate active record variables ansible.builtin.include_vars: file: web.yml - name: Populate smtp variables ansible.builtin.include_vars: file: smtp.yml - name: Stop legacy generated services ansible.builtin.systemd_service: name: "{{ item }}" state: stopped enabled: false scope: user failed_when: false loop: - container-database.service - container-redis.service - container-mastodon.service - container-sidekiq.service - name: Remove legacy generated service files ansible.builtin.file: path: "~/.config/systemd/user/{{ item }}" state: absent loop: - container-database.service - container-redis.service - container-mastodon.service - container-sidekiq.service - name: Stage mastodon network quadlets ansible.builtin.copy: src: "{{ item }}" dest: "{{ mastodon_quadlet_tmp.path }}/{{ item }}" mode: "0644" loop: - mastodon_internal.network - mastodon_external.network - name: Install mastodon network quadlets containers.podman.podman_quadlet: state: present src: "{{ mastodon_quadlet_tmp.path }}/{{ item }}" reload_systemd: false loop: - mastodon_internal.network - mastodon_external.network notify: Reload systemd user units - name: Install database quadlet ansible.builtin.include_tasks: db.yml - name: Schedule postgres database backup ansible.builtin.cron: name: "Backup mastodon postgres database" minute: "0" hour: "3" job: >- podman exec database pg_dump -U {{ mastodon_database.username }} mastodon | gzip > ~/backups/mastodon-$(date +\%Y\%m\%d\%H\%M\%S).sql.gz && find ~/backups/ -type f -mtime 7 -delete - name: Find backup files ansible.builtin.find: paths: "~/backups" patterns: "mastodon-*.sql.gz" register: mastodon_backup_files tags: - backup - name: Identify latest backup file ansible.builtin.set_fact: mastodon_latest_backup: "{{ (mastodon_backup_files.files | sort(attribute='mtime') | last).path }}" tags: - backup - name: Ensure local backup directory exists ansible.builtin.file: path: "{{ mastodon_local_backup_dir }}" state: directory delegate_to: localhost become: false tags: - backup - name: Download latest backup file to local machine ansible.builtin.fetch: src: "{{ mastodon_latest_backup }}" dest: "{{ mastodon_local_backup_dir }}/{{ mastodon_latest_backup | basename }}" flat: true tags: - backup - name: Install redis quadlet ansible.builtin.include_tasks: redis.yml - name: Install elasticsearch quadlet ansible.builtin.include_tasks: elasticsearch.yml - name: Install web quadlet ansible.builtin.include_tasks: web.yml - name: Install sidekiq quadlet ansible.builtin.include_tasks: sidekiq.yml - name: Remove quadlet staging directory ansible.builtin.file: path: "{{ mastodon_quadlet_tmp.path }}" state: absent - name: Flush handlers so unit changes are reloaded before activation ansible.builtin.meta: flush_handlers - name: Activate mastodon services ansible.builtin.systemd_service: name: "{{ item }}" state: started enabled: true scope: user loop: - database.service - redis.service - elasticsearch.service - mastodon.service - sidekiq.service