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.

212 lines
9.4 KiB

  1. ---
  2. # Below is a huge hack for dynamically building a list of workers and finally assigning it to `matrix_synapse_workers_enabled_list`.
  3. #
  4. # set_fact within a loop does not work reliably in Ansible (it only executes on the first iteration for some reason),
  5. # so we're forced to do something much uglier.
  6. - name: Build room workers
  7. ansible.builtin.set_fact:
  8. worker:
  9. id: "room-worker-{{ item }}"
  10. name: "matrix-synapse-worker-room-{{ item }}"
  11. type: 'room_worker'
  12. app: 'generic_worker'
  13. webserving: true
  14. port: "{{ matrix_synapse_workers_room_workers_port_range_start + item }}"
  15. metrics_port: "{{ matrix_synapse_workers_room_workers_metrics_range_start + item }}"
  16. register: "matrix_synapse_workers_list_results_room_workers"
  17. loop: "{{ range(0, matrix_synapse_workers_room_workers_count | int) | list }}"
  18. - name: Build client sync workers
  19. ansible.builtin.set_fact:
  20. worker:
  21. id: "sync-worker-{{ item }}"
  22. name: "matrix-synapse-worker-sync-{{ item }}"
  23. type: 'sync_worker'
  24. app: 'generic_worker'
  25. webserving: true
  26. port: "{{ matrix_synapse_workers_sync_workers_port_range_start + item }}"
  27. metrics_port: "{{ matrix_synapse_workers_sync_workers_metrics_range_start + item }}"
  28. register: "matrix_synapse_workers_list_results_sync_workers"
  29. loop: "{{ range(0, matrix_synapse_workers_sync_workers_count | int) | list }}"
  30. - name: Build client reader workers
  31. ansible.builtin.set_fact:
  32. worker:
  33. id: "client-reader-{{ item }}"
  34. name: "matrix-synapse-worker-client-reader-{{ item }}"
  35. type: 'client_reader'
  36. app: 'generic_worker'
  37. webserving: true
  38. port: "{{ matrix_synapse_workers_client_reader_workers_port_range_start + item }}"
  39. metrics_port: "{{ matrix_synapse_workers_client_reader_workers_metrics_range_start + item }}"
  40. register: "matrix_synapse_workers_list_results_client_reader_workers"
  41. loop: "{{ range(0, matrix_synapse_workers_client_reader_workers_count | int) | list }}"
  42. - name: Build federation reader workers
  43. ansible.builtin.set_fact:
  44. worker:
  45. id: "federation-reader-{{ item }}"
  46. name: "matrix-synapse-worker-federation-reader-{{ item }}"
  47. type: 'federation_reader'
  48. app: 'generic_worker'
  49. webserving: true
  50. port: "{{ matrix_synapse_workers_federation_reader_workers_port_range_start + item }}"
  51. metrics_port: "{{ matrix_synapse_workers_federation_reader_workers_metrics_range_start + item }}"
  52. register: "matrix_synapse_workers_list_results_federation_reader_workers"
  53. loop: "{{ range(0, matrix_synapse_workers_federation_reader_workers_count | int) | list }}"
  54. - name: Build generic workers
  55. ansible.builtin.set_fact:
  56. worker:
  57. id: "generic-worker-{{ item }}"
  58. name: "matrix-synapse-worker-generic-{{ item }}"
  59. type: 'generic_worker'
  60. app: 'generic_worker'
  61. webserving: true
  62. port: "{{ matrix_synapse_workers_generic_workers_port_range_start + item }}"
  63. metrics_port: "{{ matrix_synapse_workers_generic_workers_metrics_range_start + item }}"
  64. register: "matrix_synapse_workers_list_results_generic_workers"
  65. loop: "{{ range(0, matrix_synapse_workers_generic_workers_count | int) | list }}"
  66. - name: Build stream writer workers
  67. ansible.builtin.set_fact:
  68. worker:
  69. id: "stream-writer-{{ idx }}-{{ item.stream }}"
  70. # Names must not include underscores. Certain stream writer streams (to_device, account_data, ..) do, so we fix them up.
  71. name: "matrix-synapse-worker-stream-writer-{{ idx }}-{{ item.stream | replace('_', '-') }}"
  72. type: 'stream_writer'
  73. app: "generic_worker"
  74. webserving: "{{ item.stream in matrix_synapse_workers_webserving_stream_writer_types }}"
  75. stream_writer_stream: "{{ item.stream }}"
  76. port: "{{ matrix_synapse_workers_stream_writer_workers_http_port_range_start + idx }}"
  77. replication_port: "{{ matrix_synapse_workers_stream_writer_workers_replication_port_range_start + idx }}"
  78. metrics_port: "{{ matrix_synapse_workers_stream_writer_workers_metrics_range_start + idx }}"
  79. register: "matrix_synapse_workers_list_results_stream_writer_workers"
  80. loop: "{{ matrix_synapse_workers_stream_writers }}"
  81. loop_control:
  82. index_var: idx
  83. - name: Populate matrix_synapse_stream_writers from enabled stream writer workers list
  84. ansible.builtin.set_fact:
  85. matrix_synapse_stream_writers: "{{ matrix_synapse_stream_writers | combine({item.ansible_facts.worker.stream_writer_stream: [item.ansible_facts.worker.name]}, list_merge='append') }}"
  86. with_items: "{{ matrix_synapse_workers_list_results_stream_writer_workers.results }}"
  87. - name: Build federation sender workers
  88. ansible.builtin.set_fact:
  89. worker:
  90. id: "federation-sender-{{ item }}"
  91. name: "matrix-synapse-worker-federation-sender-{{ item }}"
  92. type: 'federation_sender'
  93. app: 'generic_worker'
  94. webserving: false
  95. port: 0
  96. metrics_port: "{{ matrix_synapse_workers_federation_sender_workers_metrics_range_start + item }}"
  97. register: "matrix_synapse_workers_list_results_federation_sender_workers"
  98. loop: "{{ range(0, matrix_synapse_workers_federation_sender_workers_count | int) | list }}"
  99. - name: Populate matrix_synapse_federation_sender_instances from enabled federation sender workers list
  100. ansible.builtin.set_fact:
  101. matrix_synapse_federation_sender_instances: "{{ matrix_synapse_federation_sender_instances + [item.ansible_facts.worker.name] }}"
  102. with_items: "{{ matrix_synapse_workers_list_results_federation_sender_workers.results }}"
  103. - name: Build pusher workers
  104. ansible.builtin.set_fact:
  105. worker:
  106. id: "pusher-{{ item }}"
  107. name: "matrix-synapse-worker-pusher-{{ item }}"
  108. type: 'pusher'
  109. app: 'generic_worker'
  110. webserving: false
  111. port: 0
  112. metrics_port: "{{ matrix_synapse_workers_pusher_workers_metrics_range_start + item }}"
  113. register: "matrix_synapse_workers_list_results_pusher_workers"
  114. loop: "{{ range(0, matrix_synapse_workers_pusher_workers_count | int) | list }}"
  115. # This type of worker can only have a count of 1, at most
  116. - name: Build appservice workers
  117. ansible.builtin.set_fact:
  118. worker:
  119. id: "appservice-{{ item }}"
  120. name: "matrix-synapse-worker-appservice-{{ item }}"
  121. type: 'appservice'
  122. app: 'generic_worker'
  123. webserving: false
  124. port: 0
  125. metrics_port: "{{ matrix_synapse_workers_appservice_workers_metrics_range_start + item }}"
  126. register: "matrix_synapse_workers_list_results_appservice_workers"
  127. loop: "{{ range(0, matrix_synapse_workers_appservice_workers_count | int) | list }}"
  128. # This type of worker can only have a count of 1, at most
  129. - name: Build user_dir workers
  130. ansible.builtin.set_fact:
  131. worker:
  132. id: "user-dir-{{ item }}"
  133. name: "matrix-synapse-worker-user-dir-{{ item }}"
  134. type: 'user_dir'
  135. app: 'generic_worker'
  136. webserving: true
  137. port: "{{ matrix_synapse_workers_user_dir_workers_port_range_start + item }}"
  138. metrics_port: "{{ matrix_synapse_workers_user_dir_workers_metrics_range_start + item }}"
  139. register: "matrix_synapse_workers_list_results_user_dir_workers"
  140. loop: "{{ range(0, matrix_synapse_workers_user_dir_workers_count | int) | list }}"
  141. # This type of worker can only have a count of 1, at most
  142. - name: Build background workers
  143. ansible.builtin.set_fact:
  144. worker:
  145. id: "background-{{ item }}"
  146. name: "matrix-synapse-worker-background-{{ item }}"
  147. type: 'background'
  148. app: 'generic_worker'
  149. webserving: false
  150. port: 0
  151. metrics_port: "{{ matrix_synapse_workers_background_workers_metrics_range_start + item }}"
  152. register: "matrix_synapse_workers_list_results_background_workers"
  153. loop: "{{ range(0, matrix_synapse_workers_background_workers_count | int) | list }}"
  154. - name: Build media_repository workers
  155. ansible.builtin.set_fact:
  156. worker:
  157. id: "media-repository-{{ item }}"
  158. name: "matrix-synapse-worker-media-repository-{{ item }}"
  159. type: 'media_repository'
  160. app: 'media_repository'
  161. webserving: true
  162. port: "{{ matrix_synapse_workers_media_repository_workers_port_range_start + item }}"
  163. metrics_port: "{{ matrix_synapse_workers_media_repository_workers_metrics_range_start + item }}"
  164. register: "matrix_synapse_workers_list_results_media_repository_workers"
  165. loop: "{{ range(0, matrix_synapse_workers_media_repository_workers_count | int) | list }}"
  166. - ansible.builtin.set_fact:
  167. matrix_synapse_dynamic_workers_list: "{{ matrix_synapse_dynamic_workers_list | default([]) + [item.ansible_facts.worker] }}"
  168. with_items: |
  169. {{
  170. matrix_synapse_workers_list_results_room_workers.results
  171. +
  172. matrix_synapse_workers_list_results_sync_workers.results
  173. +
  174. matrix_synapse_workers_list_results_client_reader_workers.results
  175. +
  176. matrix_synapse_workers_list_results_federation_reader_workers.results
  177. +
  178. matrix_synapse_workers_list_results_generic_workers.results
  179. +
  180. matrix_synapse_workers_list_results_stream_writer_workers.results
  181. +
  182. matrix_synapse_workers_list_results_federation_sender_workers.results
  183. +
  184. matrix_synapse_workers_list_results_pusher_workers.results
  185. +
  186. matrix_synapse_workers_list_results_appservice_workers.results
  187. +
  188. matrix_synapse_workers_list_results_user_dir_workers.results
  189. +
  190. matrix_synapse_workers_list_results_media_repository_workers.results
  191. +
  192. matrix_synapse_workers_list_results_background_workers.results
  193. }}
  194. - ansible.builtin.set_fact:
  195. matrix_synapse_workers_enabled_list: "{{ matrix_synapse_dynamic_workers_list }}"