Important:
Cette opération n’est pas supportée officiellement par Mattermost et demande une manipulation en base de données de production.
Attention:
Cette méthode passant par Traefik, elle ne fonctionnera pas pour les clics sur un « ancien lien » directement dans Mattermost, car tout se fait côté client. Il faut ouvrir le lien dans un nouvel onglet. C’est donc plutôt destiné aux liens externes qu’aux liens internes. Les cas d’utilisations sont limités, mais vraisemblables.
Depuis que la gestion des redirections est gérée côté Traefik plutôt que côté labels Mattermost, il est possible de changer l’URL d’une équipe qui le demande en toute transparence et sans interruption de service.
Cette opération se fait en deux temps.
On se connecte à la base de données sur la machine où tourne Mattermost :
# Le nom du conteneur peut changer, voir le fichier Compose de Mattermost docker exec -it mattermost-db bash # Shell PostgreSQL avec utilisateur mattermost psql -U mattermost
Mattermost est bien fait de ce côté là : la chaîne servant à construire l’URL est stockée à un seul endroit et fait référence. Changer cette valeur est sans effet de bord, à part celui de casser les liens avant le changement (voir section suivante).
Exemple : on souhaite changer le nom de l’équipe rencontres-sc21
en rencontres-scenari
. On commence par chercher l’identifiant de l’équipe :
SELECT id, name FROM teams WHERE name='rencontres-sc21'; id | name ----------------------------+---------------- u8muibe6gfdx5xqauh7u83535o | rencontres-sc21
On met à jour ce nom :
UPDATE teams SET name='rencontres-scenari' WHERE id='u8muibe6gfdx5xqauh7u83535o'; UPDATE 1
Note:
On aurait pu directement faire un UPDATE
avec un WHERE
sur name
, mais sait-on jamais, mieux vaut s’en tenir à l’identifiant, clé primaire assurée d’être unique, et vérifier qu’il n’y a pas de doublon.
À partir de ce moment, l’URL https://team.picasoft.net/rencontres-scenari
est active et correspond à l’ancienne équipe https://team.picasoft.net/rencontres-sc21
.
Il faut modifier la configuration dynamique de Traefik. Le mieux est de le faire directement sur la machine, afin de tester/debug.
En effet, Mattermost utilise le middleware mattermost
, de type chain.
Question:
Middlewares ? Chain ?
Pour rappel, Traefik peut appliquer des opérations entre le moment où il reçoit la requête et le moment où il la transmet à Mattermost. Ce sont des middlewares. Le type chain
permet d’enchaîner plusieurs middlewares.
Il suffira pour l’occasion de créer un nouveau middleware :
mm-redirect-scenari: redirectRegex: regex: "https://team.picasoft.net/rencontres-sc21(.*)" replacement: "https://team.picasoft.net/rencontres-scenari${1}" permanent: true
A Savoir:
Astuce : pour être certain·es que ça fonctionne, tu peux tester avec un exemple sur ce bac à sable Go.
Il faut ensuite ajouter le middleware fraîchement créé au middleware Mattermost :
mattermost: chain: middlewares: - mm-redirect-scenari
Et sauvegarder le fichier. Le middleware est immédiatement appliqué sans besoin de redémarrage.
Si ça ne fonctionne pas, modifier par essai/erreur.
Note:
S’aider du dashboard Traefik en cas de doute : est-ce-que le middleware est bien pris en compte ? etc.
Plus qu’à commit, pousser.