From 329796f4d48ea8406a34467cb1331fccfd12e54d Mon Sep 17 00:00:00 2001 From: Slavi Pantaleev Date: Sat, 6 Jul 2024 10:59:28 +0300 Subject: [PATCH] Upgrade Traefik to v3 and adapt matrix-media-repo role `matrix-media-repo` is the only role that seems incompatible with the changes introduced by Traefik v3, due to its use of `PathPrefix` with regular expressions in a few places. Regular expressions should now be used with `PathRegexp`, not `PathPrefix`. Furthermore, they should follow the Golang regexp syntax, as described in the migration guide: https://doc.traefik.io/traefik/migration/v2-to-v3-details/#dynamic-configuration-changes --- requirements.yml | 2 +- roles/custom/matrix-media-repo/defaults/main.yml | 16 ++++++++-------- .../matrix-media-repo/tasks/validate_config.yml | 4 ++++ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/requirements.yml b/requirements.yml index 4082e8d88..d05919e8b 100644 --- a/requirements.yml +++ b/requirements.yml @@ -70,7 +70,7 @@ version: v1.0.0-0 name: timesync - src: git+https://github.com/devture/com.devture.ansible.role.traefik.git - version: v2.11.4-0 + version: v3.0.4-1 name: traefik - src: git+https://github.com/devture/com.devture.ansible.role.traefik_certs_dumper.git version: v2.8.3-2 diff --git a/roles/custom/matrix-media-repo/defaults/main.yml b/roles/custom/matrix-media-repo/defaults/main.yml index a09744401..42a28cc48 100755 --- a/roles/custom/matrix-media-repo/defaults/main.yml +++ b/roles/custom/matrix-media-repo/defaults/main.yml @@ -81,8 +81,8 @@ matrix_media_repo_container_labels_traefik_internal_media_entrypoints: "" # /_matrix/client/r0/logout # /_matrix/client/r0/logout/all -matrix_media_repo_container_labels_traefik_logout_path_prefix: "/_matrix/client/{version:(r0|v1|v3|unstable)}/{endpoint:(logout|logout/all)}" -matrix_media_repo_container_labels_traefik_logout_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathPrefix(`{{ matrix_media_repo_container_labels_traefik_logout_path_prefix }}`)" +matrix_media_repo_container_labels_traefik_logout_path_regexp: "^/_matrix/client/(?Pr0|v1|v3|unstable)/(?Plogout|logout/all)" +matrix_media_repo_container_labels_traefik_logout_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathRegexp(`{{ matrix_media_repo_container_labels_traefik_logout_path_regexp }}`)" matrix_media_repo_container_labels_traefik_logout_priority: 0 matrix_media_repo_container_labels_traefik_logout_entrypoints: "{{ matrix_media_repo_container_labels_traefik_entrypoints }}" matrix_media_repo_container_labels_traefik_logout_tls: "{{ matrix_media_repo_container_labels_traefik_logout_entrypoints != 'web' }}" @@ -90,8 +90,8 @@ matrix_media_repo_container_labels_traefik_logout_tls_certResolver: default # n # /_matrix/client/r0/admin/purge_media_cache # /_matrix/client/r0/admin/quarantine_media/{roomId:[^/]+} -matrix_media_repo_container_labels_traefik_admin_path_prefix: "/_matrix/client/{version:(r0|v1|v3|unstable)}/admin/{endpoint:(purge_media_cache|quarantine_media/.*)}" -matrix_media_repo_container_labels_traefik_admin_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathPrefix(`{{ matrix_media_repo_container_labels_traefik_admin_path_prefix }}`)" +matrix_media_repo_container_labels_traefik_admin_path_regexp: "^/_matrix/client/(?P(r0|v1|v3|unstable))/admin/(?P(purge_media_cache|quarantine_media/.*))" +matrix_media_repo_container_labels_traefik_admin_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathRegexp(`{{ matrix_media_repo_container_labels_traefik_admin_path_regexp }}`)" matrix_media_repo_container_labels_traefik_admin_priority: 0 matrix_media_repo_container_labels_traefik_admin_entrypoints: "{{ matrix_media_repo_container_labels_traefik_entrypoints }}" matrix_media_repo_container_labels_traefik_admin_tls: "{{ matrix_media_repo_container_labels_traefik_admin_entrypoints != 'web' }}" @@ -114,8 +114,8 @@ matrix_media_repo_container_labels_traefik_media_federation_tls_certResolver: de # /_matrix/client/r0/logout # /_matrix/client/r0/logout/all -matrix_media_repo_container_labels_traefik_logout_federation_path_prefix: "/_matrix/client/{version:(r0|v1|v3|unstable)}/{endpoint:(logout|logout/all)}" -matrix_media_repo_container_labels_traefik_logout_federation_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathPrefix(`{{ matrix_media_repo_container_labels_traefik_logout_path_prefix }}`)" +matrix_media_repo_container_labels_traefik_logout_federation_path_regexp: "{{ matrix_media_repo_container_labels_traefik_logout_path_regexp }}" +matrix_media_repo_container_labels_traefik_logout_federation_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathRegexp(`{{ matrix_media_repo_container_labels_traefik_logout_federation_path_regexp }}`)" matrix_media_repo_container_labels_traefik_logout_federation_priority: 0 matrix_media_repo_container_labels_traefik_logout_federation_entrypoints: "{{ matrix_federation_traefik_entrypoint_name }}" matrix_media_repo_container_labels_traefik_logout_federation_tls: "{{ matrix_media_repo_container_labels_traefik_logout_entrypoints != 'web' }}" @@ -123,8 +123,8 @@ matrix_media_repo_container_labels_traefik_logout_federation_tls_certResolver: d # /_matrix/client/r0/admin/purge_media_cache # /_matrix/client/r0/admin/quarantine_media/{roomId:[^/]+} -matrix_media_repo_container_labels_traefik_admin_federation_path_prefix: "/_matrix/client/{version:(r0|v1|v3|unstable)}/admin/{endpoint:(purge_media_cache|quarantine_media/.*)}" -matrix_media_repo_container_labels_traefik_admin_federation_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathPrefix(`{{ matrix_media_repo_container_labels_traefik_admin_path_prefix }}`)" +matrix_media_repo_container_labels_traefik_admin_federation_path_regexp: "{{ matrix_media_repo_container_labels_traefik_admin_path_regexp }}" +matrix_media_repo_container_labels_traefik_admin_federation_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathRegexp(`{{ matrix_media_repo_container_labels_traefik_admin_federation_path_regexp }}`)" matrix_media_repo_container_labels_traefik_admin_federation_priority: 0 matrix_media_repo_container_labels_traefik_admin_federation_entrypoints: "{{ matrix_federation_traefik_entrypoint_name }}" matrix_media_repo_container_labels_traefik_admin_federation_tls: "{{ matrix_media_repo_container_labels_traefik_admin_entrypoints != 'web' }}" diff --git a/roles/custom/matrix-media-repo/tasks/validate_config.yml b/roles/custom/matrix-media-repo/tasks/validate_config.yml index 2f31ba03c..57fdf8595 100644 --- a/roles/custom/matrix-media-repo/tasks/validate_config.yml +++ b/roles/custom/matrix-media-repo/tasks/validate_config.yml @@ -29,3 +29,7 @@ - {'old': 'matrix_media_repo_url_previews', 'new': ''} - {'old': 'matrix_media_repo_thumbnails', 'new': ''} - {'old': 'matrix_media_repo_feature_support', 'new': ''} + - {'old': 'matrix_media_repo_container_labels_traefik_logout_path_prefix', 'new': 'matrix_media_repo_container_labels_traefik_logout_path_regexp'} + - {'old': 'matrix_media_repo_container_labels_traefik_admin_path_prefix', 'new': 'matrix_media_repo_container_labels_traefik_admin_path_regexp'} + - {'old': 'matrix_media_repo_container_labels_traefik_logout_federation_path_prefix', 'new': 'matrix_media_repo_container_labels_traefik_logout_federation_path_regexp'} + - {'old': 'matrix_media_repo_container_labels_traefik_admin_federation_path_prefix', 'new': 'matrix_media_repo_container_labels_traefik_admin_federation_path_regexp'}