Matrix Docker Ansible eploy
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

129 строки
4.6 KiB

  1. # SPDX-FileCopyrightText: 2026 Slavi Pantaleev
  2. #
  3. # SPDX-License-Identifier: AGPL-3.0-or-later
  4. ---
  5. - name: Prepare matrix-alertmanager-receiver Molecule tests
  6. hosts: all
  7. become: true
  8. vars_files:
  9. - "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/../../../molecule-shared/vars.yml"
  10. gather_facts: true
  11. tasks:
  12. - name: Ensure apt cache is updated
  13. ansible.builtin.apt:
  14. update_cache: true
  15. cache_valid_time: 600
  16. when: ansible_os_family == 'Debian'
  17. - name: Ensure required packages are installed
  18. ansible.builtin.package:
  19. name:
  20. - python3-requests
  21. - fuse-overlayfs
  22. state: present
  23. - name: Ensure Docker is installed
  24. ansible.builtin.include_role:
  25. name: ansible-role-docker
  26. vars:
  27. docker_daemon_options:
  28. storage-driver: fuse-overlayfs
  29. # The role's file tasks set owner/group by name, and Ansible resolves those
  30. # through the passwd database - so they have to exist before it runs. In a
  31. # real deployment `matrix-base` creates them.
  32. - name: Ensure the matrix group exists
  33. ansible.builtin.group:
  34. name: "{{ matrix_group_name }}"
  35. gid: "{{ matrix_user_gid }}"
  36. state: present
  37. - name: Ensure the matrix user exists
  38. ansible.builtin.user:
  39. name: "{{ matrix_user_name }}"
  40. uid: "{{ matrix_user_uid }}"
  41. group: "{{ matrix_group_name }}"
  42. create_home: false
  43. system: true
  44. state: present
  45. - name: Ensure the base data path exists
  46. ansible.builtin.file:
  47. path: "{{ matrix_base_data_path }}"
  48. state: directory
  49. owner: "{{ matrix_user_name }}"
  50. group: "{{ matrix_group_name }}"
  51. mode: "0750"
  52. - name: Ensure the container network the role attaches to exists
  53. ansible.builtin.command:
  54. argv:
  55. - docker
  56. - network
  57. - create
  58. - "{{ matrix_alertmanager_receiver_container_network }}"
  59. register: matrix_alertmanager_receiver_molecule_network
  60. changed_when: matrix_alertmanager_receiver_molecule_network.rc == 0
  61. failed_when:
  62. - matrix_alertmanager_receiver_molecule_network.rc != 0
  63. - "'already exists' not in matrix_alertmanager_receiver_molecule_network.stderr"
  64. # matrix-alertmanager-receiver contacts the homeserver while starting up -
  65. # it fetches /_matrix/client/v3/joined_rooms to resolve its room mapping -
  66. # and exits 1 if that fails. So a homeserver has to exist for the service
  67. # to come up at all. A stub is enough: the scenario is testing this role,
  68. # not Synapse, and it keeps the run offline and fast.
  69. - name: Ensure the Matrix homeserver stub script exists
  70. ansible.builtin.copy:
  71. dest: /root/matrix-homeserver-stub.py
  72. mode: "0755"
  73. content: |
  74. import json
  75. from http.server import BaseHTTPRequestHandler, HTTPServer
  76. ROOMS = {"joined_rooms": ["{{ matrix_alertmanager_receiver_config_matrix_room_mapping['molecule-room'] }}"]}
  77. class Handler(BaseHTTPRequestHandler):
  78. def _send(self, payload):
  79. body = json.dumps(payload).encode()
  80. self.send_response(200)
  81. self.send_header("Content-Type", "application/json")
  82. self.send_header("Content-Length", str(len(body)))
  83. self.end_headers()
  84. self.wfile.write(body)
  85. def do_GET(self):
  86. if self.path.endswith("/joined_rooms"):
  87. self._send(ROOMS)
  88. else:
  89. self._send({})
  90. def do_POST(self):
  91. self._send({"event_id": "$molecule-event-id"})
  92. def log_message(self, *args):
  93. pass
  94. HTTPServer(("0.0.0.0", 8008), Handler).serve_forever()
  95. - name: Ensure the Matrix homeserver stub is running on the role's network
  96. ansible.builtin.command:
  97. argv:
  98. - docker
  99. - run
  100. - --detach
  101. - --rm
  102. - --name=matrix-homeserver-stub
  103. - --network={{ matrix_alertmanager_receiver_container_network }}
  104. - --network-alias=matrix.molecule.local
  105. - --volume=/root/matrix-homeserver-stub.py:/stub.py:ro
  106. - "{{ molecule_shared_image_python }}"
  107. - python3
  108. - /stub.py
  109. register: matrix_alertmanager_receiver_molecule_stub
  110. changed_when: matrix_alertmanager_receiver_molecule_stub.rc == 0
  111. failed_when:
  112. - matrix_alertmanager_receiver_molecule_stub.rc != 0
  113. - "'already in use' not in matrix_alertmanager_receiver_molecule_stub.stderr"