Matrix Docker Ansible eploy
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

156 lines
7.2 KiB

  1. # SPDX-FileCopyrightText: 2023 - 2024 Michael Hollister
  2. # SPDX-FileCopyrightText: 2024 Daniel A. Maierhofer
  3. # SPDX-FileCopyrightText: 2024 David Mehren
  4. # SPDX-FileCopyrightText: 2024 Slavi Pantaleev
  5. #
  6. # SPDX-License-Identifier: AGPL-3.0-or-later
  7. ---
  8. - name: Ensure media-repo paths exist
  9. ansible.builtin.file:
  10. path: "{{ item.path }}"
  11. state: directory
  12. mode: '0750'
  13. owner: "{{ matrix_user_name }}"
  14. group: "{{ matrix_group_name }}"
  15. with_items:
  16. - path: "{{ matrix_media_repo_base_path }}"
  17. when: true
  18. - path: "{{ matrix_media_repo_config_path }}"
  19. when: true
  20. - path: "{{ matrix_media_repo_data_path }}"
  21. when: true
  22. - path: "{{ matrix_media_repo_docker_src_files_path }}"
  23. when: "{{ matrix_media_repo_container_image_self_build }}"
  24. when: "item.when | bool"
  25. - name: Ensure media-repo support files installed
  26. ansible.builtin.template:
  27. src: "{{ role_path }}/templates/media-repo/{{ item }}.j2"
  28. dest: "{{ matrix_media_repo_base_path }}/{{ item }}"
  29. mode: '0640'
  30. owner: "{{ matrix_user_name }}"
  31. group: "{{ matrix_group_name }}"
  32. with_items:
  33. - env
  34. - labels
  35. - name: Ensure media-repo configuration installed
  36. ansible.builtin.template:
  37. src: "{{ role_path }}/templates/media-repo/media-repo.yaml.j2"
  38. dest: "{{ matrix_media_repo_config_path }}/media-repo.yaml"
  39. mode: '0640'
  40. owner: "{{ matrix_user_name }}"
  41. group: "{{ matrix_group_name }}"
  42. - name: Ensure media-repo Docker image is pulled
  43. community.docker.docker_image:
  44. name: "{{ matrix_media_repo_docker_image }}"
  45. source: "{{ 'pull' if ansible_version.major > 2 or ansible_version.minor > 7 else omit }}"
  46. force_source: "{{ matrix_media_repo_docker_image_force_pull if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}"
  47. force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_media_repo_docker_image_force_pull }}"
  48. when: "not matrix_media_repo_container_image_self_build | bool"
  49. register: result
  50. retries: "{{ devture_playbook_help_container_retries_count }}"
  51. delay: "{{ devture_playbook_help_container_retries_delay }}"
  52. until: result is not failed
  53. - when: "matrix_media_repo_container_image_self_build | bool"
  54. block:
  55. - name: Ensure media-repo repository is present on self-build
  56. ansible.builtin.git:
  57. repo: "{{ matrix_media_repo_container_image_self_build_repo }}"
  58. dest: "{{ matrix_media_repo_docker_src_files_path }}"
  59. version: "{{ matrix_media_repo_docker_image.split(':')[1] }}"
  60. force: "yes"
  61. become: true
  62. become_user: "{{ matrix_user_name }}"
  63. register: matrix_media_repo_git_pull_results
  64. - name: Check if media-repo Docker image exists
  65. ansible.builtin.command: "{{ devture_systemd_docker_base_host_command_docker }} images --quiet --filter 'reference={{ matrix_media_repo_docker_image }}'"
  66. register: matrix_media_repo_docker_image_check_result
  67. changed_when: false
  68. # Invoking the `docker build` command here, instead of calling the `docker_image` Ansible module,
  69. # because the latter does not support BuildKit.
  70. # See: https://github.com/ansible-collections/community.general/issues/514
  71. - name: Ensure media-repo Docker image is built
  72. ansible.builtin.command:
  73. cmd: "{{ devture_systemd_docker_base_host_command_docker }} build -t {{ matrix_media_repo_docker_image }} {{ matrix_media_repo_docker_src_files_path }}"
  74. environment:
  75. DOCKER_BUILDKIT: 1
  76. changed_when: true
  77. when: "matrix_media_repo_git_pull_results.changed | bool or matrix_media_repo_docker_image_check_result.stdout == ''"
  78. - name: Check existence of media-repo signing key
  79. ansible.builtin.stat:
  80. path: "{{ matrix_media_repo_config_path }}/{{ matrix_media_repo_identifier }}.signing.key"
  81. register: matrix_media_repo_signing_key_stat
  82. - when: "matrix_media_repo_generate_signing_key | bool and not (matrix_media_repo_signing_key_stat.stat.exists | bool)"
  83. block:
  84. - name: Generate media-repo signing key
  85. ansible.builtin.command:
  86. cmd: |
  87. {{ devture_systemd_docker_base_host_command_docker }} run
  88. --rm
  89. --name={{ matrix_media_repo_identifier }}-temp
  90. --user={{ matrix_synapse_uid }}:{{ matrix_synapse_gid }}
  91. --cap-drop=ALL
  92. --mount type=bind,src={{ matrix_media_repo_config_path }},dst=/config
  93. --workdir='/config'
  94. --entrypoint='generate_signing_key'
  95. {{ matrix_media_repo_docker_image }}
  96. -output {{ matrix_media_repo_identifier }}.signing.key.TEMP
  97. creates: "{{ matrix_media_repo_config_path }}/{{ matrix_media_repo_identifier }}.signing.key.TEMP"
  98. - name: Merge media-repo signing key with homeserver signing key
  99. ansible.builtin.command:
  100. cmd: |
  101. {{ devture_systemd_docker_base_host_command_docker }} run
  102. --rm
  103. --name={{ matrix_media_repo_identifier }}-temp
  104. --user={{ matrix_synapse_uid }}:{{ matrix_synapse_gid }}
  105. --cap-drop=ALL
  106. --mount type=bind,src={{ matrix_media_repo_config_path }},dst=/config
  107. --mount type=bind,src={{ matrix_media_repo_homeserver_signing_key | dirname }},dst=/homeserver-signing-key-dir
  108. --workdir='/config'
  109. --entrypoint='combine_signing_keys'
  110. {{ matrix_media_repo_docker_image }}
  111. -format {{ matrix_homeserver_implementation }} -output /homeserver-signing-key-dir/{{ matrix_media_repo_homeserver_signing_key | basename }}.merged /homeserver-signing-key-dir/{{ matrix_media_repo_homeserver_signing_key | basename }} {{ matrix_media_repo_identifier }}.signing.key.TEMP
  112. creates: "{{ matrix_media_repo_homeserver_signing_key }}.merged"
  113. - name: Backup existing homeserver signing key before replacing it
  114. ansible.builtin.copy:
  115. remote_src: true
  116. src: "{{ matrix_media_repo_homeserver_signing_key }}"
  117. dest: "{{ matrix_media_repo_homeserver_signing_key }}.{{ matrix_homeserver_implementation }}.backup"
  118. mode: '0644'
  119. owner: "{{ matrix_user_name }}"
  120. group: "{{ matrix_group_name }}"
  121. - name: Replace homeserver signing key with merged signing key
  122. ansible.builtin.command:
  123. cmd: "mv {{ matrix_media_repo_homeserver_signing_key }}.merged {{ matrix_media_repo_homeserver_signing_key }}"
  124. removes: "{{ matrix_media_repo_homeserver_signing_key }}.merged"
  125. - name: Finalize media-repo signing key setup
  126. ansible.builtin.command:
  127. cmd: "mv {{ matrix_media_repo_config_path }}/{{ matrix_media_repo_identifier }}.signing.key.TEMP {{ matrix_media_repo_config_path }}/{{ matrix_media_repo_identifier }}.signing.key"
  128. removes: "{{ matrix_media_repo_config_path }}/{{ matrix_media_repo_identifier }}.signing.key.TEMP"
  129. - name: Ensure media-repo container network is created
  130. community.general.docker_network:
  131. enable_ipv6: "{{ devture_systemd_docker_base_ipv6_enabled }}"
  132. name: "{{ matrix_media_repo_container_network }}"
  133. driver: bridge
  134. driver_options: "{{ devture_systemd_docker_base_container_networks_driver_options }}"
  135. - name: Ensure media-repo service installed
  136. ansible.builtin.template:
  137. src: "{{ role_path }}/templates/media-repo/systemd/matrix-media-repo.service.j2"
  138. dest: "{{ devture_systemd_docker_base_systemd_path }}/{{ matrix_media_repo_identifier }}.service"
  139. mode: '0640'