Matrix Docker Ansible eploy
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 

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