--- - name: Ensure mastodon user '{{ mastodon_user }}' exists user: name: "{{ mastodon_user }}" state: present system: true register: mastodon_user_info - name: Ensure host directories are present file: path: "{{ item.path }}" state: directory owner: "{{ item.owner | default(mastodon_user) }}" group: "{{ item.group | default(mastodon_user) }}" mode: "{{ item.mode | default('0750') }}" loop: - path: "{{ mastodon_base_path }}" mode: '0755' - path: "{{ mastodon_config_path }}" - path: "{{ mastodon_data_path }}" - path: "{{ mastodon_repo_path }}" mode: '0700' loop_control: { label: "{{ item.path }}" } - name: Ensure environment file is templated template: src: env.j2 dest: "{{ mastodon_config_env_file }}" owner: "{{ mastodon_user_info.uid | default(mastodon_user) }}" group: "{{ mastodon_user_info.group | default(mastodon_user) }}" mode: "0640" notify: restart-mastodon - name: Ensure mastodon git repository is present and up-to-date git: repo: "{{ mastodon_git_upstream_url }}" dest: "{{ mastodon_repo_path }}" refspec: "v{{ mastodon_version }}" version: "v{{ mastodon_version }}" force: no recursive: yes track_submodules: yes register: git_repo_info - name: Ensure docker network for backend communication is created docker_network: name: "{{ mastodon_container_network_name }}" state: present - name: Ensure environment file is templated template: src: env.j2 dest: "{{ mastodon_config_env_file }}" owner: "{{ mastodon_user_info.uid | default(mastodon_user) }}" group: "{{ mastodon_user_info.group | default(mastodon_user) }}" mode: "0640" - name: Ensure mastodon docker image is built docker_image: name: "{{ mastodon_container_image_name }}" tag: "{{ mastodon_container_image_tag }}" state: present source: build build: path: "{{ mastodon_repo_path }}" args: UID: "{{ mastodon_user_info.uid }}" GID: "{{ mastodon_user_info.group }}" when: git_repo_info.before != git_repo_info.after - name: Ensure mastodon sidekiq container '{{ mastodon_container_name_sidekiq }}' is running docker_container: name: "{{ mastodon_container_name_sidekiq }}" image: "{{ mastodon_container_image_ref }}" networks: "{{ mastodon_container_networks }}" volumes: "{{ mastodon_container_volumes_sidekiq }}" env_file: "{{ mastodon_config_env_file }}" command: "bundle exex sidekiq" restart_policy: "{{ mastodon_container_restart_policy }}" healthcheck: test: ["CMD-SHELL", "ps aux | grep '[s]idekiq\ 6' || false"] interval: 5s retries: 3 start_period: 0s timeout: 5s - name: Ensure mastodon streaming container '{{ mastodon_container_name_streaming }}' is running docker_container: name: "{{ mastodon_container_name_streaming }}" image: "{{ mastodon_container_image_ref }}" networks: "{{ mastodon_container_networks }}" volumes: "{{ mastodon_container_volumes_streaming }}" env_file: "{{ mastodon_config_env_file }}" command: "node ./streaming" restart_policy: "{{ mastodon_container_restart_policy }}" ports: "{{ mastodon_container_ports_streaming }}" healthcheck: test: ["CMD-SHELL", "wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1"] interval: 5s retries: 3 start_period: 0s timeout: 5s - name: Ensure mastodon streaming container '{{ mastodon_container_name_streaming }}' is running docker_container: name: "{{ mastodon_container_name_streaming }}" image: "{{ mastodon_container_image_ref }}" networks: "{{ mastodon_container_networks }}" volumes: "{{ mastodon_container_volumes }}" env_file: "{{ mastodon_config_env_file }}" command: "bash -c \"rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000\"" restart_policy: "{{ mastodon_container_restart_policy }}" ports: "{{ mastodon_container_ports }}" healthcheck: test: ["CMD-SHELL", "wget -q --spider --proxy=off localhost:3000/health || exit 1"] interval: 5s retries: 3 start_period: 0s timeout: 5s