diff --git a/README.md b/README.md index 6db6bee..aa825b2 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,9 @@ available. ## Roles +- [`fediwall`](roles/fediwall/README.md): deployment of [Fediwall](https://fediwall.social), + a media wall for mastodon inspired by mastowall. + - [`gotosocial`](roles/gotosocial/README.md): deployment of [GoToSocial.org](https://gotosocial.org/), an ActivityPub social network server, in a docker container. diff --git a/galaxy.yml b/galaxy.yml index 5a7d4ec..484e0d7 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -12,3 +12,6 @@ build_ignore: - '*.tar.gz' repository: https://git.finally.coffee/finallycoffee/fediverse issues: https://codeberg.org/finallycoffee/ansible-collection-fediverse/issues +tags: + - fediwall + - gotosocial diff --git a/playbooks/fediwall.yml b/playbooks/fediwall.yml new file mode 100644 index 0000000..6f240ff --- /dev/null +++ b/playbooks/fediwall.yml @@ -0,0 +1,6 @@ +--- +- name: Install and configure fediwall + hosts: "{{ fediwall_hosts | default('fediwall') }}" + become: "{{ fediwall_become | default(false) }}" + roles: + - role: fediwall diff --git a/roles/fediwall/README.md b/roles/fediwall/README.md new file mode 100644 index 0000000..67fe4c0 --- /dev/null +++ b/roles/fediwall/README.md @@ -0,0 +1,4 @@ +# `finallycoffee.fediverse.fediwall` ansible role + +Ansible role for [`fediwall`](https://fediwall.social) deployment. + diff --git a/roles/fediwall/defaults/main/config.yml b/roles/fediwall/defaults/main/config.yml new file mode 100644 index 0000000..882c13f --- /dev/null +++ b/roles/fediwall/defaults/main/config.yml @@ -0,0 +1,50 @@ +--- +fediwall_config_servers: + - mastodon.social +fediwall_config_tags: + - cats +fediwall_config_accounts: [] +fediwall_config_load_public: false +fediwall_config_load_federated: false +fediwall_config_load_trends: false +fediwall_config_languages: [] +fediwall_config_bad_words: [] +fediwall_config_hide_sensitive: true +fediwall_config_hide_bots: true +fediwall_config_hide_replies: true +fediwall_config_hide_boosts: false +fediwall_config_limit: 20 +fediwall_config_interval: 10 +fediwall_config_title: "Fediwall" +fediwall_config_theme: "auto" +fediwall_config_show_infobar: true +fediwall_config_show_text: true +fediwall_config_show_media: true +fediwall_config_play_videos: true + +fediwall_default_config: + servers: "{{ fediwall_config_servers }}" + tags: "{{ fediwall_config_tags }}" + accounts: "{{ fediwall_config_accounts }}" + loadPublic: "{{ fediwall_config_load_public }}" + loadFederated: "{{ fediwall_config_load_federated }}" + loadTrends: "{{ fediwall_config_load_trends }}" + languages: "{{ fediwall_config_languages }}" + badWords: "{{ fediwall_config_bad_words }}" + hideSensitive: "{{ fediwall_config_hide_sensitive }}" + hideBots: "{{ fediwall_config_hide_bots }}" + hideReplies: "{{ fediwall_config_hide_replies }}" + hideBoosts: "{{ fediwall_config_hide_boosts }}" + limit: "{{ fediwall_config_limit }}" + interval: "{{ fediwall_config_interval }}" + title: "{{ fediwall_config_title }}" + theme: "{{ fediwall_config_theme }}" + showInfobar: "{{ fediwall_config_show_infobar }}" + showText: "{{ fediwall_config_show_text }}" + showMedia: "{{ fediwall_config_show_media }}" + playVideos: "{{ fediwall_config_play_videos }}" + +fediwall_config: {} +fediwall_final_config: >-2 + {{ fediwall_default_config | default({}, true) + | combine(fediwall_config | default({}, true)) }} diff --git a/roles/fediwall/defaults/main/container.yml b/roles/fediwall/defaults/main/container.yml new file mode 100644 index 0000000..58b605f --- /dev/null +++ b/roles/fediwall/defaults/main/container.yml @@ -0,0 +1,45 @@ +--- +fediwall_container_name: fediwall +fediwall_container_image_registry: ghcr.io +fediwall_container_image_namespace: defnull +fediwall_container_image_name: fediwall +fediwall_container_image_repository: >-2 + {{ + [ + fediwall_container_image_registry | default([], true), + fediwall_container_image_namespace | default([], true), + fediwall_container_image_name + ] | flatten | join('/') + }} +fediwall_container_image_tag: ~ +fediwall_container_image_source: pull +fediwall_container_image_force_source: >-2 + {{ fediwall_container_image_tag | default(false, true) | bool }} +fediwall_container_image: >-2 + {{ + [ + fediwall_container_image_repository, + fediwall_container_image_tag | default(fediwall_version, true) + ] | join(':') + }} +fediwall_container_env: ~ +fediwall_container_user: ~ +fediwall_container_ports: ~ +fediwall_container_labels: ~ +fediwall_container_volumes: [] +fediwall_container_networks: ~ +fediwall_container_network_mode: ~ +fediwall_container_dns_servers: ~ +fediwall_container_etc_hosts: ~ +fediwall_container_memory: ~ +fediwall_container_memory_swap: ~ +fediwall_container_memory_reservation: ~ +fediwall_container_restart_policy: "on-failure" + +fediwall_container_config_file: "/usr/share/nginx/html/wall-config.json" +fediwall_container_base_volumes: + - "{{ fediwall_config_file }}:{{ fediwall_container_config_file }}:ro" +fediwall_container_final_volumes: >-2 + {{ fediwall_container_base_volumes + fediwall_container_volumes }} +fediwall_container_state: >-2 + {{ (fediwall_state == 'present') | ternary('started', 'absent') }} diff --git a/roles/fediwall/defaults/main/main.yml b/roles/fediwall/defaults/main/main.yml new file mode 100644 index 0000000..e563844 --- /dev/null +++ b/roles/fediwall/defaults/main/main.yml @@ -0,0 +1,8 @@ +--- +fediwall_user: fediwall +fediwall_version: "1.4.0" +fediwall_config_file: "/etc/fediwall/config.json" +fediwall_config_file_path: "{{ fediwall_config_file | dirname }}" + +fediwall_state: "present" +fediwall_deployment_method: "docker" diff --git a/roles/fediwall/tasks/deploy-docker.yml b/roles/fediwall/tasks/deploy-docker.yml new file mode 100644 index 0000000..2c06697 --- /dev/null +++ b/roles/fediwall/tasks/deploy-docker.yml @@ -0,0 +1,26 @@ +--- +- name: Ensure container image '{{ fediwall_container_image }}' is {{ fediwall_state }} + community.docker.docker_image: + name: "{{ fediwall_container_image }}" + state: "{{ fediwall_state }}" + source: "{{ fediwall_container_image_source }}" + force_source: "{{ fediwall_container_image_force_source }}" + +- name: Ensure container '{{ fediwall_container_name }}' is {{ fediwall_container_state }} + community.docker.docker_container: + name: "{{ fediwall_container_name }}" + image: "{{ fediwall_container_image }}" + env: "{{ fediwall_container_env | default(omit, true) }}" + user: "{{ fediwall_container_user | default(omit, true) }}" + ports: "{{ fediwall_container_ports | default(omit, true) }}" + labels: "{{ fediwall_container_labels | default(omit, true) }}" + volumes: "{{ fediwall_container_final_volumes | default(omit, true) }}" + networks: "{{ fediwall_container_networks | default(omit, true) }}" + network_mode: "{{ fediwall_container_network_mode | default(omit, true) }}" + dns_servers: "{{ fediwall_container_dns_servers | default(omit, true) }}" + etc_hosts: "{{ fediwall_container_etc_hosts | default(omit, true) }}" + memory: "{{ fediwall_container_memory | default(omit, true) }}" + memory_swap: "{{ fediwall_container_memory_swap | default(omit, true) }}" + memory_reservation: "{{ fediwall_container_memory_reservation | default(omit, true) }}" + restart_policy: "{{ fediwall_container_restart_policy }}" + state: "{{ fediwall_container_state }}" diff --git a/roles/fediwall/tasks/main.yml b/roles/fediwall/tasks/main.yml new file mode 100644 index 0000000..436605a --- /dev/null +++ b/roles/fediwall/tasks/main.yml @@ -0,0 +1,43 @@ +--- +- name: Ensure 'fediwall_state' is valid + ansible.builtin.fail: + msg: >-2 + Unsupported state '{{ fediwall_state }}'. Supported + states are {{ fediwall_states | map(quote) | join(', ') }} + when: fediwall_state not in fediwall_states + +- name: Ensure 'fediwall_deployment_method' is valid + ansible.builtin.fail: + msg: >-2 + Unsupported deployment method '{{ fediwall_deployment_method }}'. + upported deployment methods are {{ fediwall_deployment_methods | join(', ') }} + when: fediwall_deployment_method not in fediwall_deployment_methods + +- name: Ensure user '{{ fediwall_user }}' is {{ fediwall_state }} + ansible.builtin.user: + name: "{{ fediwall_user }}" + state: "{{ fediwall_state }}" + system: "{{ fediwall_user_system | default(true, true) }}" + create_home: "{{ fediwall_user_system | default(false, true) }}" + +- name: Ensure configuration folder '{{ fediwall_config_file_path }}' is {{ fediwall_state }} + ansible.builtin.file: + path: "{{ fediwall_config_file_path }}" + state: directory + when: fediwall_state == 'present' + +- name: Ensure configuration in '{{ fediwall_config_file }}' is {{ fediwall_state }} + ansible.builtin.copy: + content: "{{ fediwall_final_config | to_nice_json(indent=2) }}" + dest: "{{ fediwall_config_file }}" + state: "{{ fediwall_state }}" + +- name: Ensure configuration folder is {{ fediwall_state }} + ansible.builtin.file: + path: "{{ fediwall_config_file_path }}" + state: absent + when: fediwall_state == 'absent' + +- name: Deploy using {{ fediwall_deployment_method }} + ansible.builtin.include_tasks: + file: "deploy-{{ fediwall_deployment_method }}.yml" diff --git a/roles/fediwall/vars/main.yml b/roles/fediwall/vars/main.yml new file mode 100644 index 0000000..1ae41ff --- /dev/null +++ b/roles/fediwall/vars/main.yml @@ -0,0 +1,6 @@ +--- +fediwall_states: + - "present" + - "absent" +fediwall_deployment_methods: + - "docker"