Projet

Général

Profil

Development #58908

Infrastructure de base pour pouvoir changer le nom de domaine d'un service

Ajouté par Emmanuel Cazenave il y a plus de 2 ans. Mis à jour il y a environ 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
23 novembre 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Genre ... change_domain src.bar.com target.foo.com.

Pour un premier pas au plus simple, se cantonner à un seul service qui ne soit ni hobo, ni authentic, ni wcs.

L'idée est qu'au final, du coté du service dont on change le nom de domaine, ce soit géré par un hobo_deploy "classique", et que c'est cette commande qui doit être enrichie pour pouvoir gérer la situation changement de nom de domaine.


Fichiers


Demandes liées

Lié à Publik - Support #57729: Migration d'instances de Publik : changement de nom de domaineFermé11 octobre 2021

Actions

Révisions associées

Révision f8041c44 (diff)
Ajouté par Emmanuel Cazenave il y a environ 2 ans

hobo_deploy: handle url change on a service (#58908)

Historique

#1

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

  • Lié à Support #57729: Migration d'instances de Publik : changement de nom de domaine ajouté
#2

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

Par dessus #59094.

1. 0001 : enrichissement de hobo_deploy

Ajout de legacy_urls dans le modèle des services, on met tous les URLS de "l'ancien" service plus un timestamp (voir le hobo.json ci-joint pour voir ce que ça donne), en pratique pour ce patch je n'avais pas besoin de tous les URLS ni du timestamp mais je me dis que ça mange pas de pain et donc pour l'avenir, ça parait raisonnable de tout mettre.

Ensuite l'agent hobo se sert de cette donné pour comprendre qu'on lui demande de changer un tenant existant plutôt que d'en créer un nouveau, pas bien compliqué.

2. 0002 la commande migrate_service : hobo-manage tenant_command migrate_service https://passerelle.dev.publik.love/ https://toto-passerelle.dev.publik.love/ -d hobo.dev.publik.love

Qui s'occupe permet de changer l'URL d'un service et pas seulement son nom de domaine parce que ce n'est pas plus compliqué donc autant avoir cette souplesse qui servira peut-être un jour.
Commande dont sont exclues pour l'instant wcs (parce qu'il a son propre agent qui attend son ticket et son patch), hobo (parce que ça va plutôt passer par un enrichissement de create_hobo_tenant je pense, façon #59094), authentic (parce que je ne mesure pas pour l'instant si ça demande des choses particulières, il faut que je me plonge dedans).

Il y a aussi l'aspect multi-collectivités que je dois tester pour voir si ça nécessite une attention particulière mais bref, un pas après l'autre.

#3

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

Emmanuel Cazenave a écrit :

Ajout de legacy_urls dans le modèle des services,

Avec aussi l'idée qu'on pourra se servir de cette info pour faire des substitutions d'URL, genre dans les actions d'appel websevcices wcs (plutôt que chercher à aller modifier en masse toutes les données relatives à des URL en DB) et partout ailleurs où ce sera nécessaire.

#4

Mis à jour par Emmanuel Cazenave il y a environ 2 ans

  • Statut changé de Solution proposée à En cours

Il y a des trous dans la requête pour les muticollectivités, en l'état un hobo non primaire ne comprends pas qu'il y a eu changement d'URL sur un service, il créé un service supplémentaire.

#5

Mis à jour par Emmanuel Cazenave il y a environ 2 ans

  • Sujet changé de Commande pour changer le nom de domaine d'un service à Infrastrcuture de base pour pouvoir changer le nom de domaine d'un service

Enrichie pour les muticollectivité, ie l'agent hobo/hobo (et pas l'agent hobo/common) qui sait interpréter les "legacy_urls" dans les hobo.json.

Ça commence à faire un gros premier patch, pour faciliter les relectures je réduis la portée de ce ticket à "infra de base pour le changement de nom de domaine".

Je met le deuxième patch dans un ticket à part (la commande qui exploite cette infra).

#7

Mis à jour par Emmanuel Cazenave il y a environ 2 ans

  • Statut changé de Solution proposée à En cours

Relecture avec Thomas sur mes genoux.

Arrêter les for/else qui font mal à la tête, plutôt for tout court puis if machin (on se comprend).

#8

Mis à jour par Thomas Noël il y a environ 2 ans

On pourrait sans doute éviter cette partie :

                if service_dict.get('base_url') == me['base_url']:
                    # URL might have changed, need to update emitter hobo
                    local_hobo = get_or_create_local_hobo()
                    if local_hobo and local_hobo.get_base_url_path() != service_dict.get('base_url'):
                        local_hobo.change_base_url(service_dict.get('base_url'))
                        local_hobo.save()
                    continue

en gérant ça directement au niveau du create_tenant (qui aura reçu le --legacy-hostname et donc aura crée ou mis à jour le local_hobo)

#9

Mis à jour par Frédéric Péters il y a environ 2 ans

  • Sujet changé de Infrastrcuture de base pour pouvoir changer le nom de domaine d'un service à Infrastructure de base pour pouvoir changer le nom de domaine d'un service
#10

Mis à jour par Emmanuel Cazenave il y a environ 2 ans

Emmanuel Cazenave a écrit :

Arrêter les for/else qui font mal à la tête, plutôt for tout court puis if machin (on se comprend).

Pris en compte.

Thomas Noël a écrit :

On pourrait sans doute éviter cette partie :

[...]

en gérant ça directement au niveau du create_tenant (qui aura reçu le --legacy-hostname et donc aura crée ou mis à jour le local_hobo)

En fait ça ne passe pas dans le create_tenant parce qu'à ce niveau on a plus que le nom de domaine, alors qu'on a besoin de l'URL complet. Du coup un niveau au dessus dans hobo/agent/common/management/commands/hobo_deploy.py :

+        if tenant_created and legacy_domain and self.me['service-id'] == 'hobo':
+            # need to update local hobo
+            with tenant_context(tenant):
+                import hobo.environment.utils
+
+                local_hobo = hobo.environment.utils.get_or_create_local_hobo()
+                if local_hobo.get_base_url_path() != self.me['base_url']:
+                    local_hobo.change_base_url(self.me['base_url'])
+                    local_hobo.save()
+

C'est pas méga élégant ce code spécifique hobo dans agent/common, je préfère la version d'avant (dans la version d'avant le code ajouté dans hobo/agent/hobo/management/commands/hobo_deploy.py:deploy_specifics est assez compréhensible, c'est le reste du code qui y était déjà qui fait mal à la tête).

#11

Mis à jour par Thomas Noël il y a environ 2 ans

Emmanuel Cazenave a écrit :

C'est pas méga élégant ce code spécifique hobo dans agent/common, je préfère la version d'avant (dans la version d'avant le code ajouté dans hobo/agent/hobo/management/commands/hobo_deploy.py:deploy_specifics est assez compréhensible, c'est le reste du code qui y était déjà qui fait mal à la tête).

Ouaip, plutôt nunuche effectivement de se retrouver dans du code spécifique hobo dans common, alors qu'on a un deploy_specific dans hobo... Tu fais un retour en arrière ou bien c'est trop pénible ?

#12

Mis à jour par Emmanuel Cazenave il y a environ 2 ans

Thomas Noël a écrit :

Tu fais un retour en arrière ou bien c'est trop pénible ?

Done.

#14

Mis à jour par Thomas Noël il y a environ 2 ans

  • Statut changé de Solution proposée à Solution validée
#15

Mis à jour par Emmanuel Cazenave il y a environ 2 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit f8041c4457ba67aee492cb64f851477cc670a88c
Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Wed Dec 1 15:19:45 2021 +0100

    hobo_deploy: handle url change on a service (#58908)
#16

Mis à jour par Transition automatique il y a environ 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#17

Mis à jour par Transition automatique il y a presque 2 ans

Automatic expiration

Formats disponibles : Atom PDF