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.
 
 

321 rivejä
15 KiB

  1. ---
  2. - name: Ensure dateutils and curl is installed in AWX
  3. delegate_to: 127.0.0.1
  4. yum:
  5. name: dateutils
  6. state: latest
  7. - name: Include vars in matrix_vars.yml
  8. include_vars:
  9. file: '/var/lib/awx/projects/clients/{{ member_id }}/{{ subscription_id }}/matrix_vars.yml'
  10. no_log: true
  11. - name: Ensure curl and jq intalled on target machine
  12. apt:
  13. pkg:
  14. - curl
  15. - jq
  16. state: present
  17. - name: Collect before shrink size of Synapse database
  18. shell: du -sh /matrix/postgres/data
  19. register: awx_db_size_before_stat
  20. when: (awx_purge_mode.find("Perform final shrink") != -1)
  21. no_log: true
  22. - name: Collect the internal IP of the matrix-synapse container
  23. shell: "/usr/bin/docker inspect --format '{''{range.NetworkSettings.Networks}''}{''{.IPAddress}''}{''{end}''}' matrix-synapse"
  24. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  25. register: awx_synapse_container_ip
  26. - name: Collect access token for @admin-janitor user
  27. shell: |
  28. curl -X POST -d '{"type":"m.login.password", "user":"admin-janitor", "password":"{{ awx_janitor_user_password }}"}' "{{ awx_synapse_container_ip.stdout }}:{{ matrix_synapse_container_client_api_port }}/_matrix/client/r0/login" | jq '.access_token'
  29. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  30. register: awx_janitors_token
  31. no_log: true
  32. - name: Copy build_room_list.py script to target machine
  33. copy:
  34. src: ./roles/matrix-awx/scripts/matrix_build_room_list.py
  35. dest: /usr/local/bin/matrix_build_room_list.py
  36. owner: matrix
  37. group: matrix
  38. mode: '0755'
  39. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  40. - name: Run build_room_list.py script
  41. shell: |
  42. runuser -u matrix -- python3 /usr/local/bin/matrix_build_room_list.py {{ awx_janitors_token.stdout[1:-1] }} {{ awx_synapse_container_ip.stdout }} {{ matrix_synapse_container_client_api_port.stdout }}
  43. register: awx_rooms_total
  44. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  45. - name: Fetch complete room list from target machine
  46. fetch:
  47. src: /tmp/room_list_complete.json
  48. dest: "/tmp/{{ subscription_id }}_room_list_complete.json"
  49. flat: true
  50. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  51. - name: Remove complete room list from target machine
  52. file:
  53. path: /tmp/room_list_complete.json
  54. state: absent
  55. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  56. - name: Generate list of rooms with no local users
  57. delegate_to: 127.0.0.1
  58. shell: |
  59. jq 'try .rooms[] | select(.joined_local_members == 0) | .room_id' < /tmp/{{ subscription_id }}_room_list_complete.json > /tmp/{{ subscription_id }}_room_list_no_local_users.txt
  60. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  61. - name: Count number of rooms with no local users
  62. delegate_to: 127.0.0.1
  63. shell: |
  64. wc -l /tmp/{{ subscription_id }}_room_list_no_local_users.txt | awk '{ print $1 }'
  65. register: awx_rooms_no_local_total
  66. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  67. - name: Setting host fact awx_room_list_no_local_users
  68. set_fact:
  69. awx_room_list_no_local_users: "{{ lookup('file', '/tmp/{{ subscription_id }}_room_list_no_local_users.txt') }}"
  70. no_log: true
  71. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  72. - name: Purge all rooms with no local users
  73. include_tasks: purge_database_no_local.yml
  74. loop: "{{ awx_room_list_no_local_users.splitlines() | flatten(levels=1) }}"
  75. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  76. - name: Collect epoche time from date
  77. delegate_to: 127.0.0.1
  78. shell: |
  79. date -d '{{ awx_purge_date }}' +"%s"
  80. when: (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  81. register: awx_purge_epoche_time
  82. - name: Generate list of rooms with more then N users
  83. delegate_to: 127.0.0.1
  84. shell: |
  85. jq 'try .rooms[] | select(.joined_members > {{ awx_purge_metric_value }}) | .room_id' < /tmp/{{ subscription_id }}_room_list_complete.json > /tmp/{{ subscription_id }}_room_list_joined_members.txt
  86. when: awx_purge_mode.find("Number of users [slower]") != -1
  87. - name: Count number of rooms with more then N users
  88. delegate_to: 127.0.0.1
  89. shell: |
  90. wc -l /tmp/{{ subscription_id }}_room_list_joined_members.txt | awk '{ print $1 }'
  91. register: awx_rooms_join_members_total
  92. when: awx_purge_mode.find("Number of users [slower]") != -1
  93. - name: Setting host fact awx_room_list_joined_members
  94. delegate_to: 127.0.0.1
  95. set_fact:
  96. awx_room_list_joined_members: "{{ lookup('file', '/tmp/{{ subscription_id }}_room_list_joined_members.txt') }}"
  97. when: awx_purge_mode.find("Number of users [slower]") != -1
  98. no_log: true
  99. - name: Purge all rooms with more then N users
  100. include_tasks: purge_database_users.yml
  101. loop: "{{ awx_room_list_joined_members.splitlines() | flatten(levels=1) }}"
  102. when: awx_purge_mode.find("Number of users [slower]") != -1
  103. - name: Generate list of rooms with more then N events
  104. delegate_to: 127.0.0.1
  105. shell: |
  106. jq 'try .rooms[] | select(.state_events > {{ awx_purge_metric_value }}) | .room_id' < /tmp/{{ subscription_id }}_room_list_complete.json > /tmp/{{ subscription_id }}_room_list_state_events.txt
  107. when: awx_purge_mode.find("Number of events [slower]") != -1
  108. - name: Count number of rooms with more then N events
  109. delegate_to: 127.0.0.1
  110. shell: |
  111. wc -l /tmp/{{ subscription_id }}_room_list_state_events.txt | awk '{ print $1 }'
  112. register: awx_rooms_state_events_total
  113. when: awx_purge_mode.find("Number of events [slower]") != -1
  114. - name: Setting host fact awx_room_list_state_events
  115. delegate_to: 127.0.0.1
  116. set_fact:
  117. awx_room_list_state_events: "{{ lookup('file', '/tmp/{{ subscription_id }}_room_list_state_events.txt') }}"
  118. when: awx_purge_mode.find("Number of events [slower]") != -1
  119. no_log: true
  120. - name: Purge all rooms with more then N events
  121. include_tasks: purge_database_events.yml
  122. loop: "{{ awx_room_list_state_events.splitlines() | flatten(levels=1) }}"
  123. when: awx_purge_mode.find("Number of events [slower]") != -1
  124. - name: Adjust 'Deploy/Update a Server' job template
  125. delegate_to: 127.0.0.1
  126. awx.awx.tower_job_template:
  127. name: "{{ matrix_domain }} - 0 - Deploy/Update a Server"
  128. description: "Creates a new matrix service with Spantaleev's playbooks"
  129. extra_vars: "{{ lookup('file', '/var/lib/awx/projects/clients/{{ member_id }}/{{ subscription_id }}/extra_vars.json') }}"
  130. job_type: run
  131. job_tags: "rust-synapse-compress-state"
  132. inventory: "{{ member_id }}"
  133. project: "{{ member_id }} - Matrix Docker Ansible Deploy"
  134. playbook: setup.yml
  135. credential: "{{ member_id }} - AWX SSH Key"
  136. state: present
  137. verbosity: 1
  138. tower_host: "https://{{ awx_host }}"
  139. tower_oauthtoken: "{{ awx_session_token.ansible_facts.tower_token.token }}"
  140. validate_certs: true
  141. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1) or (awx_purge_mode.find("Skip purging rooms [faster]") != -1)
  142. - name: Execute rust-synapse-compress-state job template
  143. delegate_to: 127.0.0.1
  144. awx.awx.tower_job_launch:
  145. job_template: "{{ matrix_domain }} - 0 - Deploy/Update a Server"
  146. wait: true
  147. tower_host: "https://{{ awx_host }}"
  148. tower_oauthtoken: "{{ awx_session_token.ansible_facts.tower_token.token }}"
  149. validate_certs: true
  150. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1) or (awx_purge_mode.find("Skip purging rooms [faster]") != -1)
  151. - name: Revert 'Deploy/Update a Server' job template
  152. delegate_to: 127.0.0.1
  153. awx.awx.tower_job_template:
  154. name: "{{ matrix_domain }} - 0 - Deploy/Update a Server"
  155. description: "Creates a new matrix service with Spantaleev's playbooks"
  156. extra_vars: "{{ lookup('file', '/var/lib/awx/projects/clients/{{ member_id }}/{{ subscription_id }}/extra_vars.json') }}"
  157. job_type: run
  158. job_tags: "setup-all,start"
  159. inventory: "{{ member_id }}"
  160. project: "{{ member_id }} - Matrix Docker Ansible Deploy"
  161. playbook: setup.yml
  162. credential: "{{ member_id }} - AWX SSH Key"
  163. state: present
  164. verbosity: 1
  165. tower_host: "https://{{ awx_host }}"
  166. tower_oauthtoken: "{{ awx_session_token.ansible_facts.tower_token.token }}"
  167. validate_certs: true
  168. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1) or (awx_purge_mode.find("Skip purging rooms [faster]") != -1)
  169. - name: Ensure matrix-synapse is stopped
  170. service:
  171. name: matrix-synapse
  172. state: stopped
  173. daemon_reload: true
  174. when: (awx_purge_mode.find("Perform final shrink") != -1)
  175. - name: Re-index Synapse database
  176. shell: docker exec -i matrix-postgres psql "host=127.0.0.1 port=5432 dbname=synapse user=synapse password={{ matrix_synapse_connection_password }}" -c 'REINDEX (VERBOSE) DATABASE synapse'
  177. when: (awx_purge_mode.find("Perform final shrink") != -1)
  178. - name: Ensure matrix-synapse is started
  179. service:
  180. name: matrix-synapse
  181. state: started
  182. daemon_reload: true
  183. when: (awx_purge_mode.find("Perform final shrink") != -1)
  184. - name: Adjust 'Deploy/Update a Server' job template
  185. delegate_to: 127.0.0.1
  186. awx.awx.tower_job_template:
  187. name: "{{ matrix_domain }} - 0 - Deploy/Update a Server"
  188. description: "Creates a new matrix service with Spantaleev's playbooks"
  189. extra_vars: "{{ lookup('file', '/var/lib/awx/projects/clients/{{ member_id }}/{{ subscription_id }}/extra_vars.json') }}"
  190. job_type: run
  191. job_tags: "run-postgres-vacuum,start"
  192. inventory: "{{ member_id }}"
  193. project: "{{ member_id }} - Matrix Docker Ansible Deploy"
  194. playbook: setup.yml
  195. credential: "{{ member_id }} - AWX SSH Key"
  196. state: present
  197. verbosity: 1
  198. tower_host: "https://{{ awx_host }}"
  199. tower_oauthtoken: "{{ awx_session_token.ansible_facts.tower_token.token }}"
  200. validate_certs: true
  201. when: (awx_purge_mode.find("Perform final shrink") != -1)
  202. - name: Execute run-postgres-vacuum job template
  203. delegate_to: 127.0.0.1
  204. awx.awx.tower_job_launch:
  205. job_template: "{{ matrix_domain }} - 0 - Deploy/Update a Server"
  206. wait: true
  207. tower_host: "https://{{ awx_host }}"
  208. tower_oauthtoken: "{{ awx_session_token.ansible_facts.tower_token.token }}"
  209. validate_certs: true
  210. when: (awx_purge_mode.find("Perform final shrink") != -1)
  211. - name: Revert 'Deploy/Update a Server' job template
  212. delegate_to: 127.0.0.1
  213. awx.awx.tower_job_template:
  214. name: "{{ matrix_domain }} - 0 - Deploy/Update a Server"
  215. description: "Creates a new matrix service with Spantaleev's playbooks"
  216. extra_vars: "{{ lookup('file', '/var/lib/awx/projects/clients/{{ member_id }}/{{ subscription_id }}/extra_vars.json') }}"
  217. job_type: run
  218. job_tags: "setup-all,start"
  219. inventory: "{{ member_id }}"
  220. project: "{{ member_id }} - Matrix Docker Ansible Deploy"
  221. playbook: setup.yml
  222. credential: "{{ member_id }} - AWX SSH Key"
  223. state: present
  224. verbosity: 1
  225. tower_host: "https://{{ awx_host }}"
  226. tower_oauthtoken: "{{ awx_session_token.ansible_facts.tower_token.token }}"
  227. validate_certs: true
  228. when: (awx_purge_mode.find("Perform final shrink") != -1)
  229. - name: Cleanup room_list files
  230. delegate_to: 127.0.0.1
  231. shell: |
  232. rm /tmp/{{ subscription_id }}_room_list*
  233. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  234. ignore_errors: true
  235. - name: Collect after shrink size of Synapse database
  236. shell: du -sh /matrix/postgres/data
  237. register: awx_db_size_after_stat
  238. when: (awx_purge_mode.find("Perform final shrink") != -1)
  239. no_log: true
  240. - name: Print total number of rooms processed
  241. debug:
  242. msg: '{{ awx_rooms_total.stdout }}'
  243. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  244. - name: Print the number of rooms purged with no local users
  245. debug:
  246. msg: '{{ awx_rooms_no_local_total.stdout }}'
  247. when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1)
  248. - name: Print the number of rooms purged with more then N users
  249. debug:
  250. msg: '{{ awx_rooms_join_members_total.stdout }}'
  251. when: awx_purge_mode.find("Number of users") != -1
  252. - name: Print the number of rooms purged with more then N events
  253. debug:
  254. msg: '{{ awx_rooms_state_events_total.stdout }}'
  255. when: awx_purge_mode.find("Number of events") != -1
  256. - name: Print before purge size of Synapse database
  257. debug:
  258. msg: "{{ awx_db_size_before_stat.stdout.split('\n') }}"
  259. when: ( awx_db_size_before_stat is defined ) and ( awx_purge_mode.find("Perform final shrink" ) != -1 )
  260. - name: Print after purge size of Synapse database
  261. debug:
  262. msg: "{{ awx_db_size_after_stat.stdout.split('\n') }}"
  263. when: (awx_db_size_after_stat is defined) and (awx_purge_mode.find("Perform final shrink") != -1)
  264. - name: Delete the AWX session token for executing modules
  265. awx.awx.tower_token:
  266. description: 'AWX Session Token'
  267. scope: "write"
  268. state: absent
  269. existing_token_id: "{{ awx_session_token.ansible_facts.tower_token.id }}"
  270. tower_host: "https://{{ awx_host }}"
  271. tower_oauthtoken: "{{ awx_session_token.ansible_facts.tower_token.token }}"
  272. - name: Set boolean value to exit playbook
  273. set_fact:
  274. awx_end_playbook: true
  275. - name: End playbook early if this task is called.
  276. meta: end_play
  277. when: awx_end_playbook is defined and awx_end_playbook|bool