technique:adminserv:mattermost:change_team_url

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 :

snippet.bash
# 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 :

snippet.sql
SELECT id, name FROM teams WHERE name='rencontres-sc21';
             id             |      name        
----------------------------+----------------
 u8muibe6gfdx5xqauh7u83535o | rencontres-sc21

On met à jour ce nom :

snippet.sql
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 :

snippet.yaml
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 :

snippet.yaml
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.

  • technique/adminserv/mattermost/change_team_url.txt
  • de qduchemi