Projet

Général

Profil

Development #14935

Création d'une app ozwillo dans hobo/contrib

Ajouté par Jean-Baptiste Jaillet il y a environ 7 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Jean-Baptiste Jaillet
Catégorie:
-
Version cible:
-
Début:
09 février 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Voilà ce que j'ai fait pour le moment


Fichiers


Demandes liées

Lié à Hobo - Development #15513: Commande pour supprimer un tenantFermé20 mars 2017

Actions
Lié à Hobo - Bug #15572: check_operational: SSLError (the read operation timed out)Fermé23 mars 2017

Actions
Lié à Hobo - Development #15514: ajouter un paramètre timeout à la commande cookFermé20 mars 2017

Actions
Lié à w.c.s. - Development #15636: Commande pour détruire un tenantFermé27 mars 2017

Actions

Révisions associées

Révision 5bccb19e (diff)
Ajouté par Jean-Baptiste Jaillet il y a presque 7 ans

ozwillo: create ozwillo app in contrib (#14935)

Révision 98eb8c1d (diff)
Ajouté par Jean-Baptiste Jaillet il y a presque 7 ans

ozwillo: create ozwillo app in contrib (#14935)

Historique

#1

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

#3

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Je reprends la discussion ici, pour le module on a choisi de mettre ça dans le urls.py de hobo (si ozwillo est dans installed_apps).
Pour les fichiers de template, ils seront dans /etc/hobo/ozwillo (pour ceux en écriture) et j'écrirai les recipe et imports combo avec les redirect_url modifiés dans des fichiers temporaires avec tempfile.

Je vais aussi ajouter un README pour préciser les variables à déclarer dans le settings.json (secret d'instanciation, domaine de l'environnement etc).

#4

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Pour les urls c'est mieux de faire avec l'option pointée par benj dans #14931 ou la solution ici est suffisante ?
Je ne me rends pas compte si l'une est plus acceptable que l'autre ou pas?

#5

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

Jean-Baptiste Jaillet a écrit :

Pour les urls c'est mieux de faire avec l'option pointée par benj dans #14931 ou la solution ici est suffisante ?
Je ne me rends pas compte si l'une est plus acceptable que l'autre ou pas?

Selon moi la solution pointée par Benj est pareille, mais je trouve que vérifier le installed_apps revient exactement au même, et évite de poser une variable dans le settings.

Concernant le reste du code:
  • return('Invalid HMAC algo') => utiliser HttpResponseForbidden comme au dessus
  • idem pour return('No HMAC in the header')
  • ça sert à rien de mettre des "ret_code =" si ret_code n'est pas utilisé. Idem pour r=request.post final
  • pour les open('xxx.json') : ça va pas marcher, il faut donner un chemin complet, je t'ai proposé /etc/hobo/ozwillo/*
  • et quand template_recipe.json n'existe pas, faire que tes vues renvoies un 404 (ie "le provisionning ozwillo n'est pas actif ici, merci)" ; tu peux faire un petit décorateur @if_ozwillo_enabled pour tes vues pour ça.
  • ajouter des logger.debug pour voir ce qui est reçu, renvoyé, etc
  • indenter import-site.json
  • un petit README qui explique ce qu'il faut mettre dans /etc/hobo/ozwillo/ et dans les settings

une fois cette première passe faite on ajoutera le packaging pour placer README et templates dans un /usr/share/doc/hobo/ozwillo/

Enfin une remarque plus générale : le "cook" ça ne se termine pas toujours bien, ça timeout assez facilement. Je doute que cette machinerie fonctionne dans la vraie vie.

#6

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Bon j'ai fait les modifs, j'ai simplement viré le import-site.json puisque c'est un fichier réécrit par le programme (pour que les url_redirects soient correctes).
Le README semble à peu près clair (je vois juste pas comment on mets le INSTALLED_APPS dans le settings.json).

#7

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

Jean-Baptiste Jaillet a écrit :

Le README semble à peu près clair (je vois juste pas comment on mets le INSTALLED_APPS dans le settings.json).

Parce qu'on peut pas ;) Les INSTALLED_APPS c'est toujours dans le «vrai» settings -- en l'occurence ça sera /etc/hobo/settings.py, avec un ajout aussi dans les TENANT_APPS ; mais dans le README il suffit de dire « ajouter 'hobo.contrib.ozwillo' dans settings.INSTALLED_APPS ».

#8

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

    with io.open(combo_file_path, 'w', encoding='utf-8') as f:
        f.write(unicode(json.dumps(imp_site_template, ensure_ascii=False)))

C'est mignon mais on peut aussi jouer les vieux et laisser le module produire de l'ascii.

#9

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Bon suite au point avec Benj et Mick, j'ai refait un commit avec les dernières modifs et la mise à jour du README.
Il reste encore à 'couper' le process en deux, d'un côté réception de la demande d'ozwillo et dire "ok on s'en occupe" et de l'autre la fonction cook + scripts qui appellent les commandes qui manquent.
J'ai fait une branche wip/ozwillo sur hobo pour la suite des commits. Ce dernier commit a modifié aussi les problèmes de droits avec les fichiers mkstemp (le fichier créé est en 600, donc pour lancer les combo-manage avec combo il y avait un souci).
Il reste encore les "io.open" et là dessus, ma foi, je veux bien un conseil (pour éviter d'avoir un d\x09marches un truc dans le style au lieu de démarches).
Est ce qu'il faut faire un simple

 with open(file, 'w') as f: f.write(...)
.

Je mets ici le patch pour avoir la base à jour sur laquelle les autres commits de la branche partiront.

#10

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

Il reste encore les "io.open" et là dessus, ma foi, je veux bien un conseil (pour éviter d'avoir un d\x09marches un truc dans le style au lieu de démarches).

Tu veux dire que tu es gêné quand tu ouvres un fichier json dans ton éditeur et que tu y lis "d\u00e9marches" (réponse : faut pas être gêné), ou c'est autre chose ?

#11

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

c'est bien ça Fred, je note donc que ce n'est pas un souci

#12

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

  • Patch proposed changé de Oui à Non

Il semble encore y avoir quantité de devs en cours sur le sujet (une trace "global name 'suobprocess' is not defined" viens de passer); je décoche la proposition de patch.

#13

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

OK. Comme je le disais plus tôt, et vu avec Benj, je mettrai le commit sur la branche de dev puis je ferai le patch rebasé avec la branche master

#14

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

  • Assigné à mis à Jean-Baptiste Jaillet

Voilà, j'ai mis à jour le code sur la branche http://repos.entrouvert.org/hobo.git/log/?h=wip/ozwillo à partir du commit 870fecbbd674ce38f9a32815acfc553121573917.
C'est un gros commit avec le passage en thread et "correction" des io.open au lieu de juste open.
Les deux commits suivants sont une petite précision dans le README et un affinage des droits sur le fichier tmp combo généré.

#15

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Hop je veux bien une relecture sur http://repos.entrouvert.org/hobo.git/commit/?h=wip/ozwillo&id=e19652d642bd65d8f28e81d88bfc4e7089203fbb (destruction d'instance).
J'ai choisi de mettre les différents services avec les bases et prefix dans un dictionnaire de settings, pour simplifier en cas d'ajout ou retrait de serivce.

#16

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

subprocess.call(['sudo', '-u', 'postgres', 'dropdb', 'wcs_%s' % (schema)]) et l'autre appel, sur les machines où la db n'est pas locale ?

#17

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

exact. Je suis resté sur la conf dev / locale. Je change ça.

#18

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Bon j'ai pas mal regardé et j'ai eu des soucis en essayant de me connecter à distance via les commandes postgres sur la recette (il me demande un mot de passe pour le compte postgres et je n'ai pas les droits avec hobo, même en ayant fait le sudoers spécifique). Donc l'autre solutions c'est que chaque brique se connecte avec son mot de passe qui est dans les settings, mais ça me semble cavalier puisqu'il faudrait faire autant de runscript que de brique à détruire.

Serghei m'a parlé de l'objet Tenant, qui a sa méthode Delete et qui gère du coup la partie connexion avec la base, le souci que j'ai ici et que je n'ai su résoudre c'est que le tenant qui execute la code (pour le sictiam le tenant whatever-sve.sictiam.dev.entrouvert.org) doit détruire un autre tenant => Serghei m'a parlé ici aussi du with tenant_context.
J'ai toute confiance en Serghei, si j'écris ici c'est pour une piste / aide en groupe sur la manière de faire, et une explication si on choisi la solution de passer par les objets tenants et non des commandes postgres appelées en subprocess.call. (explication sur with tenant_context, comment on l'utilise, comment récupérer des tenants autres que celui dans lequel le code s'éxecute etc).

#19

Mis à jour par Benjamin Dauvergne il y a environ 7 ans

Jean-Baptiste Jaillet a écrit :

Bon j'ai pas mal regardé et j'ai eu des soucis en essayant de me connecter à distance via les commandes postgres sur la recette (il me demande un mot de passe pour le compte postgres et je n'ai pas les droits avec hobo, même en ayant fait le sudoers spécifique). Donc l'autre solutions c'est que chaque brique se connecte avec son mot de passe qui est dans les settings, mais ça me semble cavalier puisqu'il faudrait faire autant de runscript que de brique à détruire.

Ajouter une commande delete-tenant qui fait un Tenant.delete().

Serghei m'a parlé de l'objet Tenant, qui a sa méthode Delete et qui gère du coup la partie connexion avec la base, le souci que j'ai ici et que je n'ai su résoudre c'est que le tenant qui execute la code (pour le sictiam le tenant whatever-sve.sictiam.dev.entrouvert.org) doit détruire un autre tenant => Serghei m'a parlé ici aussi du with tenant_context.

Oui d'où une commande dans hobo, sur le même modèle que create_tenant.

J'ai ouvert le ticket et je te l'ai assigné, go go go, #15513.

#20

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

#21

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

  • Lié à Bug #15572: check_operational: SSLError (the read operation timed out) ajouté
#22

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

#23

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Mise à jour avec les derniers commit pour la création de l'instance (je vais mettre la jour la destruction avec les nouvelles commandes de destructions de tenant).
J'ai rebasé les commits pour que la destruction soit le dernier (dernier commit pour la création : http://repos.entrouvert.org/hobo.git/commit/?h=wip/ozwillo&id=d2c07afd90b2d3ace424009c794e685f585e2ab8)

#24

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

Il y a des détails de l'historique, des corrections d'erreur, dont on n'a que faire à la relecture, dont la présence en commits distincts est inutile.

Sans même les lire, a minima, ceux qui touchent moins de dix lignes. Mais de manière plus générale tout ce qui est "fix". (on se fout de savoir que le truc n'était pas parfait du premier coup et qu'il a fallu corriger et corriger et corriger), on veut juste relire la version qui tient la route.

#25

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

Par ailleurs, ton commentaire est à 17h00 pile et à la même heure on a une trace

Subject: [hobo] ERROR: Error occured while deploying ozwillo instance dimebag

C'est vraiment bon ?

#26

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Hum en effet j'ai vu la trace et j'ai relancé deux tests je n'ai pas eu de souci.

The BadStatusLine exception is raised when you call urllib2.urlopen(url) and the remote server responds with a status code that python cannot understand.
Assuming that you don't control url, you can't prevent this from happening. All you can do is catch the exception, and manage it gracefully.

Le requête envoyée a dû être faussée ou je ne sais quoi. Les tests suivant sont déployés et fonctionnels (sso, menu, formulaires rôles, workflows etc).

Pour les commits j'hésitais à rebaser mais du coup j'ai mas réponse. Je remets tout ça dans un seul commit

#27

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

#28

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

+#create agent_sve role
+ou = OrganizationalUnit.objects.get(default=True)
+role, created = Role.objects.get_or_create(uuid='3f3367d817bb4a9aa98e7ed6c83b5b09',
+                                           defaults={'name': u'Agents SVE', 'ou': ou})

J'ai regardé recette et prod et elles n'ont pas de rôle "Agents SVE". Il doit servir à quoi ? Pourquoi en forcer l'uuid ?

(à suivre)

#29

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

En fait donc, "Agents SVE" (et ce patch en général), ça concerne le déploiement de nouvelles instances, pas l'instance "SVE" générale. Mais sur des instances existantes, genre sospel.test, le rôle "Agents SVE", il a pas cet uuid.

Et l'uuid en question, 3f3367d817bb4a9aa98e7ed6c83b5b09, c'est parce que le modèle de site w.c.s. utilisé vient avec déjà utilisé/provisionné ce rôle avec cet uuid. (bon, honnêtement pas fan, mais laisser pisser).

+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+import os

On me dira que c'est juste du style que ça n'a aucune espèce d'importance mais vraiment, a-t-on d'autres fichiers où le code suit sans ligne vide la licence ?

+from unidecode import unidecode

C'est une nouvelle dépendance et elle n'est déclarée nulle part et faudrait juste utiliser le slugify de django.

+def is_ozwillo_enabled(func):
+    def wrapper(request):
+        if not os.path.exists('/etc/hobo/ozwillo'):

Ça oblige tous les hobo d'un site à gérer ozwillo, un getattr(settings, 'OZWILLO_ENABLED', False) éviterait ça.

Dans la série, encore plus à laisser pisser, c'est dommage d'utiliser /etc/hobo/ plutôt que le répertoire du tenant.

+    if 'organization_name' not in data.keys():
+        return HttpResponseBadRequest('Missing parameter "instance_name"')

Un minimum d'attention.

+
+
+

Parfois des lignes vides, pour respirer.

+        template_recipe = json.load(open('/etc/hobo/ozwillo/template_recipe.json', 'rb'))
+        var = template_recipe['variables']
+        for key, value in var.items():
+            var[key] = value.replace('instance_name', instance_name)

Ce jeu du chercher/remplacer serait inutile avec une étape "load-variables-from". Le recipe.json serait copié dans un répertoire temporaire et dans le même répertoire temporaire un fichier avec les variables serait créé et le recipe.json contiendrait "load-variables-from": "recipe-variables.json". Laisser pisser.

+        imp_site_template = json.load(open('/etc/hobo/ozwillo/import-site-template.json', 'r'))
+
+        for row in imp_site_template:
+            row['fields']['redirect_url'] = row['fields']['redirect_url'].replace('instance_name', instance_name)

Ce jeu du chercher/remplacer serait inutile en utilisant [connexion_url], [eservices_url] et cie dans les redirect_url du fichier.

+            f.write(unicode(json.dumps(imp_site_template)))

Utilisation inutile d'unicode().

+        subprocess.call(...

Utiliser check_call, pour que ça éclate si la commande éclate.

+      {
+         "create-superuser" : {
+           "username" : "admin",
+           "email" : "admin@example.net" 
+         }
+      },

Il y a un compte admin qui est créé via create_user_ozwillo.py, pourquoi en créer un autre ici ?

+    if new_user.email != email_address:
+        new_user.email = email_address
+        new_user.save()
+    if new_user.ou != provider.ou:
+        new_user.ou = provider.ou
+        new_user.save()
+    if not new_user.is_superuser:
+        new_user.is_superuser = True
+        new_user.save()
...

Payé à la ligne ? À remplacer par du code qui met tous les attributs tout le temps aux nouvelles valeurs et qui fait un .save() au bout.

+            logging.info('provisionned with uuid %s', new_user.uuid)
...
+logging.info('ozwillo provisionning: new admin with email %s and sub %s',
+             email_address, user_id)
...
+logging.info('owzillo provisionning: user created with uuid: %s', user.uuid)

Pour la création d'un utilisateur, une seule ligne de log ?

#30

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Tout fonctionne en dehors du [idp_url] qui ne fait pas d'erreur mais me laisse sur la page combo user.
Si je mets une valeur random j'ai bien une erreur, et idp est bien le slug de l'authentic de l'instance.

#31

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Bon je peux mettre le commit étant donné que ce souci est sur un fichier static plus que vraiment du code.
http://repos.entrouvert.org/hobo.git/commit/?h=wip/ozwillo&id=ce97fc2a219e7370efe747cd4aa7752eefcc4ffe (avec les remarques prises en compte)

#32

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

Tout fonctionne en dehors du [idp_url] qui ne fait pas d'erreur mais me laisse sur la page combo user.

Une URL pour constater ça ?

#33

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

#34

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

Un lien sur "Mon compte" envoie bien vers https://connexion-genji.sictiam.dev.entrouvert.org/

Et la page d'accueil d'authentic, elle envoie vers l'accueil de combo.

Manque le /accounts/

...

#35

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

#36

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

Il y a un imp_site_template qui existe pour rien.

Comment diable cela peut-il fonctionner sans erreur ? Il y a os.remove(combo_file_path) alors que combo_file_path n'est pas défini.

+        with open(recipe_file_path, 'w') as f:
+            f.write(json.dumps(template_recipe))

json.dump existe pour écrire directement dans un fichier.

#37

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Oui pardon je me suis emmêler les pinceaux, c'était modifié en dev, j'étais plus en sync.
J'ai modifié le json.dump.

http://repos.entrouvert.org/hobo.git/commit/?h=wip/ozwillo&id=e4bc77d6a76d169941b88981eaab97c96a007e92

#38

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

(je vais mettre la jour la destruction avec les nouvelles commandes de destructions de tenant)

Faire ça. Puis taper le tout en un seul commit.

Exécuter pylint ou équivalent sur le fichier et corriger les trucs élémentaires (genre imports pas utilisés (à l'œil, io et rmtree, déjà), des espaces absents (genre après 'redirect_uris'), etc.).

+    new_user.first_name = 'admin'
+    new_user.last_name = 'ozwillo'

Ça alors que le message d'ozwillo fournit un nom pour la personne :

  "user": {
    "email_address": "mates@entrouvert.com", 
    "id": "7b3c9430-33b6-4d4c-b08b-1bc00f85526f", 
    "name": "mates" 
  }

Il faudrait plutôt utiliser le name qu'on peut ici récupérer. Peut-être mettre ça dans prénom et "(admin ozwillo)" dans nom ?

[...]
+        requests.post(registration_uri, data=json.dumps(services), auth=(client_id, client_secret), headers=headers)

Tant qu'à logguer mille trucs, la réponse finale d'ozwillo pourrait l'être aussi.

#39

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

#40

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Ok, je vais surement laisser juste 'admin + prenom' du coup c'est plus logique.

Pour le log de la réponse je log l'objet request ou uniquement le dico que j'envoie? (si c'est la cas c'est loggé plus haut, le dictionnaire service).

Et pour finaliser la destruction je veux bien une trame ou un petit coup de main sur #15636.

#41

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

Pour le log de la réponse je log l'objet request ou uniquement le dico que j'envoie? (si c'est la cas c'est loggé plus haut, le dictionnaire service).

Il y a un POST qui est fait vers ozwillo et là-dessus il y a ozwillo qui répond quelque chose et bien c'est ça que j'appelle la réponse finale d'ozwillo.

#42

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

http://repos.entrouvert.org/hobo.git/commit/?h=wip/ozwillo&id=71583087937dd8f492aab8380b05c9bff14a1c13

Avec les commentaires et l'ajout du modèle + test sur l'existence d'une instance avec un nom similaire (en relisant je me suis dis que j'aurais pu mettre un primary_key sur le instance_name et catcher l'exception à la création mais bon). Testé sur des déploiements en dev. La destruction est encore séparée du commit. Je mets à jour (la destruction avec les nouvelles commandes et nouveau modèle), on valide et je fusionne les deux.

#43

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

+class OzwilloInstance(models.Model):
+    instance_name = models.CharField(max_length=250, verbose_name=_('instance name'))
+    instance_id = models.CharField(max_length=450, verbose_name=_('instance id'))

Je zappe la discussion sur la longueur max, simplement vire les verbose_name, ce n'est jamais présenté, épargnons-nous en la traduction.

+    if OzwilloInstance.objects.filter(instance_name=org_name):

L'unicité doit être posée sur l'instance_id, pas sur le nom.

+        call_command('cook', recipe_file_path)

Encore vu des traces tout à l'heure, tu as ajouté la prise en charge d'un paramètre de timeout, tu ne l'utiliserais pas ?

#44

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

+    OzwilloInstance.objects.create(instance_id=data['instance_id'], instance_name=org_name)

C'est l'org_name qui est stocké ici, mais un peu plus loin ça sera pris comme étant partie du nom de domaine, oubliant qu'à la création il y aura eu un (amusant) instance_name = slugify(instance_name.lower().replace(' ', '-')).

#45

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Pour la destruction http://repos.entrouvert.org/hobo.git/commit/hobo?h=wip/ozwillo&id=54d30db0e1546d996c0a1ee9628dbf148fc9f4b9. Il faut que je finisse les tests sur le tickets de la commande de destruction d'un tenant wcs (mais la commande marche, j'ai testé les cas avec et sans force-drop). J'ai détaillé un peu la structure du dictionnaire service dans le README, manière la plus élégante que j'ai trouvé pour automatiser sans tout écrire en dur dans le code.

Fred pour les remarques du haut:

"L'unicité doit être posée sur l'instance_id, pas sur le nom." => Le problème que ça me posais quand je l'ai fait, c'est que l'id va changer à chaque fois, hors si une personne mets le même nom, ou reclique par erreur ou je ne sais, ça va écraser tous les nouveaux formulaires qu'ils ont créés + combo. Donc je préfère vérifier le nom (après si on dit cette erreur c'est pas à nous de la gérer ok).

Pour le cook, en effet, je l'ai ajouté à la main sur la dev la dernière fois et là aussi du coup, my bad, je rajoute ça dans le code (avant de le faire j'ai mis 360).

Pour les verboses ok.

Pour le slugify de l'instance_name en effet, j'ai fait mes tests en mettant des noms en minuscules, sans espaces ou tirets. Je corrige ça.

#46

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

"L'unicité doit être posée sur l'instance_id, pas sur le nom." => Le problème que ça me posais quand je l'ai fait, c'est que l'id va changer à chaque fois, hors si une personne mets le même nom, ou reclique par erreur ou je ne sais, ça va écraser tous les nouveaux formulaires qu'ils ont créés + combo. Donc je préfère vérifier le nom (après si on dit cette erreur c'est pas à nous de la gérer ok).

Ok, c'est donc les champs qui ont des noms très étranges par rapport à leur fonction, instance_name, c'est une information locale, qui est en fait "slug utilisé dans la constitution du nom de domaine", et instance_id, c'est un identifiant externe; je pense que ça serait bien plus clair si instance_name devenait genre domain_slug (à marqué comme devant être unique) et instance_id devenait external_ozwillo_id.

#47

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

#15752 étant désormais présent, il faudrait en profiter dans l'appel à cook.

#48

Mis à jour par Jean-Baptiste Jaillet il y a environ 7 ans

Ok http://repos.entrouvert.org/hobo.git/commit/hobo?h=wip/ozwillo&id=dd9f709bae45988778ed38ce8b70d58b2c8d3885.

J'en ai profité pour ajouter des logs lors de la destruction (y'a pas de raison) et j'ai tout mis dans un seul commit.
Les remarques précédentes ont été prises en compte.

#49

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

#15752 étant désormais présent, il faudrait en profiter dans l'appel à cook.

Commentaire ignoré. Je ne regarde même pas le reste.

#50

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

+            #to get the two combo instances which have same service
+            service = s.split('_')[0]
+
+            tenant = '%s%s.%s' % (infos[0], instance, settings.OZWILLO_ENV_DOMAIN)
+
+            subprocess.check_call(['sudo', '-u', service, infos[1],
+                             'delete_tenant', '--force-drop', tenant])

Donc dans la variable service c'est en fait l'utilisateur qui doit exécuter la commande, et donc combo_usager et combo_agent hop ça permet d'avoir combo. Ok. (non)

Plutôt faire évoluer OZWILLO_SERVICES pour que chaque service à déployer ait son dictionnaire, avec l'information détaillée, genre :

OZWILLO_SERVICES = [
   {"prefix": "connexion-",
    "command": "authentic2-multitenant-manage",
    "user": "authentic-multitenant"},
   {"prefix: "",
    "command": "combo-manage",
    "user": "" 
   }
   ...
]

Puis se dire que cette info, on l'a déjà et tenter de réduire le tout à :

from hobo.agent.worker import settings as worker_settings
...

OZWILLO_SERVICES = [('connexion-', 'authentic'), ('agents-', 'combo'), ...]
...

for prefix, service in OZWILLO_SERVICES: # tiens pourquoi ça s'appelle pas PUBLIK_SERVICES ?
    cmd = getattr(worker_settings, '%s_MANAGE_COMMAND'  % service.upper())
    subprocess.check_call(cmd + ...)

Bien sûr ça pourrait ne pas marcher, notamment je ne sais pas le mail que peux faire l'import celery dans le worker/__init__.py; bref, ne tentons même pas vu le temps déjà passé ici.

Et donc rewind,

Donc dans la variable service c'est en fait l'utilisateur qui doit exécuter la commande, et donc combo_usager et combo_agent hop ça permet d'avoir combo. Ok. (non)

Appeler la variable "service" différemment, vu qu'on y met en fait le nom de l'utilisateur, ça serait déjà ça de pris pour la compréhension.

#52

Mis à jour par Frédéric Péters il y a presque 7 ans

Sur create_user_ozwillo.py, il a été noté dans #13471 que prénom/nom ne sont pas corrects (admin borihuela vs Benoit Orihuela), en attente là d'une réponse.

Ce ticket dépend aussi de #15636 qui a encore une volée de remarques.

Et ici-même, encore et toujours des erreurs de style, genre espace manquant ici :

+                'service_uri':'https://connexion-%s.%s/accounts/oidc/login?iss=%s'

(sans même parler du pâté illisible qu'est l'appel à oidc-register-issuer).

#53

Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans

je vais modifier les erreurs de style.
Pour le pâté illisible de oidc-register-user, avant que je génère des soupirs inutiles, je pourrais le rendre plus lisible en revenant à la ligne pour chaque argument + valeur ?

#54

Mis à jour par Frédéric Péters il y a presque 7 ans

Oui, vague exemple sur une autre,

        subprocess.check_call(['sudo', '-u', 'authentic-multitenant',
                               'authentic2-multitenant-manage', 'tenant_command', 'runscript', '-d',
                               'connexion-%s.%s' % (instance_name, settings.OZWILLO_ENV_DOMAIN),
                               '/usr/lib/python2.7/dist-packages/hobo/contrib/ozwillo/scripts/create_user_ozwillo.py',
                               user['email_address'], user['id'], user['name']])

pourrait devenir :

        domain_name =  'connexion-%s.%s' % (instance_name, settings.OZWILLO_ENV_DOMAIN)
        create_user_script = ... # créé en fonction de la localisation du module hobo.contrib.ozwillo
        subprocess.check_call([
            'sudo', '-u', 'authentic-multitenant',
            'authentic2-multitenant-manage',
            'tenant_command', 'runscript', '-d', domain_name,
            create_user_script, user['email_address'], user['id'], user['name']
            ])
  • les chaines "complexes" sont créées avant
  • les lignes sont alignées sur leurs rôles
    • 1) on comprend que la commande sera exécutée en tant que l'utilisateur authentic-multitenant
    • 2) on voit quelle commande va être lancée
    • 3) on voit que c'est un script lancé sur le domaine donné
    • 4) on voit que c'est tel script avec tels paramètres
#55

Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans

J'ai poussé les modifs de style, et re testé sur la dev.
http://repos.entrouvert.org/hobo.git/commit/?h=wip/ozwillo

#56

Mis à jour par Frédéric Péters il y a presque 7 ans

+email_address = args[1]
+user_id = args[2]
+user_name = args[3]
+
+def create_user(user_id, email_address):
...
+    new_user.email = email_address
+    new_user.last_name = user_name

Va comprendre à la lecture que le user_name il vient des arguments passés lors de l'appel alors que le email_address vient du paramètre passé à la fonction (qui in fine plus tard se révélera être tiré aussi de la ligne de commande).

+    org_name = slugify(data['organization_name'].lower().replace(' ', '-'))

Le slugify il fait déjà justement la mise en minuscules et le remplacement des espaces par des tirets. (je pointais ça comme "amusant" sans préciser plus haut)

+    logger.debug('data sent for destruction : %r' % data)

Répété mille fois, pas d'espace avant les :.

+      {
+         "create-passerelle" : {
+            "url" : "https://${passerelle}/",
+            "title" : "Passerelle" 
+         }
+      },
+      {
+            "set-theme" : {
+                          "theme" : "publik" 
+                       }
+      }

Toujours de l'indentation fantaisie.

J'imagine bien qu'à un moment il faudrait que j'abandonne l'affaire, mais faut peut-être demander un ack à quelqu'un d'autre, moi j'ai encore bien du mal.

#58

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

J'ai poussé ma relecture sur ta branche, http://repos.entrouvert.org/hobo.git/commit/?h=wip/ozwillo&id=e054e4ca61ff712c32d133c25c94ce4d165f1bb0

Pas de .pop(), faut passer les chaînes de log en unicode (parce que ça marche mieux), faut éviter de trop indenter et donc au lieu de faire de grand try/catch faite une première fonction qui contient juste le try/catch et appelle la suivante, dans ce genre de code c'est bien de préfixer les logs avec un entête ici ozwilllo, aussi faut pas en mettre des tonnes dans les logs, garder un style (là des fois des majuscules, des fois pas), request/response pas request/answer, dans les méthodes de log pas besoin d'utiliser l'opérateur %, tous les paramètre sont interpolés dans la chaîne principale.

Je pense que c'est poussable mais faudrait tester un peu quand même avec ces modifications.

#60

Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans

Testé sur la dev. Tout marche bien.
J'ai fait des modifs (le slugify modifié n'était pas passé et sur l'homogénéisation des majuscules minuscules dans les erreur 400).

C'est tout dans un seul commit : http://repos.entrouvert.org/hobo.git/commit/?h=wip/ozwillo

#61

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

Ack. Mais t'as raté quelques majuscules sur les 400.

#62

Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans

ok je change les 400 et je pousse.

#63

Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans

J'ai viré les majuscules sur les 400, remis le préfixe ozwillo sur les log du décorateurs et en unicode, et j'ai viré les lignes vides en fin de fichiers.
C'est poussé.

#64

Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans

Souci de tab enlevés avec mon vim...
J'ai repoussé et voilà le nouveau patch (j'ai vu avec Benj pour ma conf vim).

#65

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

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

Formats disponibles : Atom PDF