Projet

Général

Profil

Development #59094

Commande create_tenant : prendre en charge un changement de nom de tenant

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

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Actuellement whatever-manage foo.com crée le tenant foo.com, on voudrait que soit pris en charge un changement de nom de tenant au moyen d'une option : whatever-manage --legacy-hostname olddomain.com foo.com

Une étape sur la route de #58908.


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 ac0079c6 (diff)
Ajouté par Emmanuel Cazenave il y a plus de 2 ans

multitenant: add --legacy-hostname option to create_tenant (#59094)

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

  • Description mis à jour (diff)
#3

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

#4

Mis à jour par Paul Marillonnet il y a plus de 2 ans

C’est quoi le gain qui justifie d’avoir ajouté ça à la commande de création de tenant, plutôt que par exemple faire table rase et fournir une commande rename_tenant ?

#5

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

Pas encore visible mais ça minimise fortement les changements dans #58908.

#6

Mis à jour par Paul Marillonnet il y a plus de 2 ans

Ok, je vois des choses dans ce bout de code de la branche wip de #58908 qui indiquent qu’on souhaite supporter la migration directement dans la commande de déploiement. D’où l’inclusion de cette option dans la commande de création de tenant. Ok, je vais relire cette version du patch.

#7

Mis à jour par Paul Marillonnet il y a plus de 2 ans

Il se passe beaucoup de choses ici, je vois que tu testes le cas où le tenant source n’existe pas, mais peux-tu stp tester aussi le cas où le tenant destination existe déjà ?
J’ai l’impression que dans ce cas le code de création échoue silencieusement (Tenant.create_schema retourne une valeur False non traitée dans l’appelant), et que la dernière ligne de la commande va lever une OSError non capturée :

            # activate the tenant by creating its directory
            os.rename(tenant_dir_tmp, tenant_dir)

(Cf la doc de os.rename : “If dst is a non-empty directory, an OSError is raised.”)

Aussi, peut-être ignorer le paramètre check_if_exists de Tenant.create_schema pour le tenant de destination dans ce scenario de renommage et vérifier systématiquement, puisqu’on le fait déjà pour le tenant source ?
(Je ne comprends pas pourquoi ce paramètre existe dans le code de tenant_schema à la base. Peut-être pour lever explicitement une erreur sur le cursor.execute('CREATE SCHEMA …') dans le cas check_if_exists=False ?)

#8

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

Paul Marillonnet a écrit :

Il se passe beaucoup de choses ici, je vois que tu testes le cas où le tenant source n’existe pas, mais peux-tu stp tester aussi le cas où le tenant destination existe déjà ?

Test ajouté, pas eu besoin de toucher au code, ça lève déjà un truc propre :

    def handle(self, hostnames, legacy_hostname, **options):
        verbosity = int(options.get('verbosity'))
        if not hostnames:
            raise CommandError("you must give at least one tenant hostname")

        if '-' in hostnames:  # get additional list of hostnames from stdin
            hostnames = list(hostnames)
            hostnames.remove('-')
            hostnames.extend([x.strip() for x in sys.stdin.readlines()])

        if legacy_hostname and len(hostnames) > 1:
            raise CommandError("You must specify only hostname when using --legacy-hostname")

        for hostname in hostnames:
            try:
                tenant_base = TenantMiddleware.base()
            except AttributeError:
                raise CommandError("you must configure TENANT_BASE in your settings")
            if not tenant_base:
                raise CommandError("you must set a value to TENANT_BASE in your settings")
            tenant_dir = os.path.join(tenant_base, hostname)
            if os.path.exists(tenant_dir):
>               raise CommandError('tenant already exists')
E               django.core.management.base.CommandError: tenant already exists

Aussi, peut-être ignorer le paramètre check_if_exists de Tenant.create_schema pour le tenant de destination dans ce scenario de renommage et vérifier systématiquement

Conjonction de ignorer puis vérifier systématiquement ... j'ai rien compris.

#9

Mis à jour par Paul Marillonnet il y a plus de 2 ans

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

Emmanuel Cazenave a écrit :

Paul Marillonnet a écrit :

Il se passe beaucoup de choses ici, je vois que tu testes le cas où le tenant source n’existe pas, mais peux-tu stp tester aussi le cas où le tenant destination existe déjà ?

Test ajouté, pas eu besoin de toucher au code, ça lève déjà un truc propre :

Parfait, j’avais loupé ça.

Aussi, peut-être ignorer le paramètre check_if_exists de Tenant.create_schema pour le tenant de destination dans ce scenario de renommage et vérifier systématiquement

Conjonction de ignorer puis vérifier systématiquement ... j'ai rien compris.

C’est vrai que ce n’est pas très clair et c’est encore moins important, oublions. Ack.

#10

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit ac0079c68a9773df19833949ffd335619a6a6569
Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Mon Nov 29 17:32:16 2021 +0100

    multitenant: add --legacy-hostname option to create_tenant (#59094)
#11

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

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

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

Automatic expiration

Formats disponibles : Atom PDF