Project

General

Profile

Development #58908

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

Added by Emmanuel Cazenave 6 months ago. Updated about 2 months ago.

Status:
Solution déployée
Priority:
Normal
Category:
-
Target version:
-
Start date:
23 Nov 2021
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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.


Files


Related issues

Related to Publik - Support #57729: Migration d'instances de Publik : changement de nom de domaineNouveau11 Oct 2021

Actions

Associated revisions

Revision f8041c44 (diff)
Added by Emmanuel Cazenave about 2 months ago

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

History

#1

Updated by Emmanuel Cazenave 6 months ago

  • Related to Support #57729: Migration d'instances de Publik : changement de nom de domaine added
#2

Updated by Emmanuel Cazenave 6 months ago

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

Updated by Emmanuel Cazenave 6 months ago

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

Updated by Emmanuel Cazenave 4 months ago

  • Status changed from Solution proposée to 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

Updated by Emmanuel Cazenave 4 months ago

  • Subject changed from Commande pour changer le nom de domaine d'un service to 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

Updated by Emmanuel Cazenave 4 months ago

  • Status changed from Solution proposée to 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

Updated by Thomas Noël 4 months ago

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

Updated by Frédéric Péters 4 months ago

  • Subject changed from Infrastrcuture de base pour pouvoir changer le nom de domaine d'un service to Infrastructure de base pour pouvoir changer le nom de domaine d'un service
#10

Updated by Emmanuel Cazenave 3 months ago

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

Updated by Thomas Noël 3 months ago

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

Updated by Emmanuel Cazenave 3 months ago

Thomas Noël a écrit :

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

Done.

#14

Updated by Thomas Noël about 2 months ago

  • Status changed from Solution proposée to Solution validée
#15

Updated by Emmanuel Cazenave about 2 months ago

  • Status changed from Solution validée to 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

Updated by Transition automatique about 2 months ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF