Project

General

Profile

Development #35345

provisionner tous les rôles à un nouveau service déployé

Added by Frédéric Péters 13 days ago. Updated 2 days ago.

Status:
Solution déployée
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
Start date:
09 Aug 2019
Due date:
% Done:

0%

Patch proposed:
Yes
Planning:
No

Description

Pour ne pas se trouver à devoir attendre la nuit qu'un provisionning full soit effectué, particulièrement utile aussi pour le déploiement de signal publik, cf #34464#note-28.

0001-agent-redeploy-roles-when-authentic-get-a-new-servic.patch View (2.4 KB) Nicolas Roche, 09 Aug 2019 06:20 PM

0001-agent-redeploy-roles-when-authentic-get-a-new-servic.patch View (4.4 KB) Nicolas Roche, 12 Aug 2019 04:56 PM

0001-authentic-agent-mass-provision-roles-on-new-services.patch View (4.15 KB) Thomas Noël, 14 Aug 2019 11:44 PM

Associated revisions

Revision a1258182 (diff)
Added by Nicolas Roche 8 days ago

agent: redeploy roles when authentic get a new service to manage (#35345)

Revision 430c184d (diff)
Added by Thomas Noël 8 days ago

Revert "agent: redeploy roles when authentic get a new service to manage (#35345)"

This reverts commit a1258182235788b7e1a70cbbda5c27775a2dda24.

Revision 513d1f9e (diff)
Added by Thomas Noël 3 days ago

authentic agent: mass provision roles on new services (#35345)

History

#1 Updated by Frédéric Péters 13 days ago

Pas testé ni même exécuté, genre ça serait :

--- a/hobo/agent/authentic2/management/commands/hobo_deploy.py
+++ b/hobo/agent/authentic2/management/commands/hobo_deploy.py
@@ -20,6 +20,7 @@ from django.conf import settings
 from tenant_schemas.utils import tenant_context

 from hobo.agent.common.management.commands import hobo_deploy
+from hobo.agent.authentic2.provisionning import Provisionning

 User = get_user_model()

@@ -205,6 +206,13 @@ class Command(hobo_deploy.Command):
                     self.load_skeleton(provider, service['service-id'],
                                        service['template_name'])

+                if service_created:
+                    # mass provision roles
+                    engine = Provisionning()
+                    roles = get_role_model().objects.all()
+                    ous = {provider.ou.id: provider.ou}
+                    engine.notify_roles(ous, roles, full=True)
+
     def load_skeleton(self, provider, service_id, template_name,
                       create_ou=False):
         if not getattr(settings, 'HOBO_SKELETONS_DIR', None):

#2 Updated by Nicolas Roche 13 days ago

Oui, cela fonctionne.
J'ai une dizaine de messages (j'imagine à chaque redéploiement) avec la bonne audience qui apparaissent avant les messages qui me posaient problème avec #34464#note-20.

#3 Updated by Nicolas Roche 13 days ago

Je propose le patch de Fred en l'état (je n'ai pas réussi à écrire un test dédié).

#4 Updated by Benjamin Dauvergne 13 days ago

Nicolas Roche a écrit :

Je propose le patch de Fred en l'état (je n'ai pas réussi à écrire un test dédié).

Tu peux en faire un dans tests_authentic/test_hobo_deploy.py:test_hobo_deploy() en mockant hobo.agent.common.notify_agents pour vérifier que les messages attendus partent bien.

#5 Updated by Nicolas Roche 10 days ago

Merci pour la piste.
Je reçois les messages via 'hobo.agent.authentic2.provisionning.notify_agents'.

#7 Updated by Thomas Noël 8 days ago

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

#8 Updated by Nicolas Roche 8 days ago

commit a1258182235788b7e1a70cbbda5c27775a2dda24
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Fri Aug 9 15:23:19 2019 +0200

    agent: redeploy roles when authentic get a new service to manage (#35345)

#9 Updated by Frédéric Péters 8 days ago

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

#10 Updated by Thomas Noël 8 days ago

  • Status changed from Résolu (à déployer) to En cours

Le patch appliqué n'est pas bon, il y a un mélange avec #35351 ; je le reverte.

commit 430c184de6f2580f22538d76a187314a1d84d793
Author: Thomas NOEL <tnoel@entrouvert.com>
Date:   Wed Aug 14 22:47:17 2019 +0200

    Revert "agent: redeploy roles when authentic get a new service to manage (#35345)" 

    This reverts commit a1258182235788b7e1a70cbbda5c27775a2dda24.

Il faut reprendre l'idée mais le notify ne se fera pas au même endroit.

#11 Updated by Thomas Noël 8 days ago

Voici ma proposition, un poil plus rusée (et donc aussi moins lisible), qui répertorie les OUs sur lesquelles envoyer les notifications, et fait tout ça une seule fois après la création de tous les services (et pas à chaque service)

#12 Updated by Nicolas Roche 4 days ago

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

(désolé de paraphraser, mais j'ai eu tellement de mal à écrire mon laïus ci-dessous que je n'arrive pas à le supprimer)

Quand on deploy authentic, on boucle sur les services de la recette du cook.

# create or update Service Providers

Or, ces services n'ont pas forcément la même OU.

# if there are more than one w.c.s. service we will create an
# ou of the same name

La fonction notify_roles() permet d'envoyer un message destiné à tous les services d'une OU, pour qu'ils récupèrent les rôles existants.

L'idée est de limiter le nombre de messages envoyés en appelant 'notify_roles' pour chaque OU et non pas pour chaque service.

Dans le test on récupère bien 2 messages, un pour chaque OU (on a un second wcs dans le test...) et ayants pour audiences chacune des briques concernées par l'OU.

#13 Updated by Thomas Noël 3 days ago

  • Status changed from Solution validée to Résolu (à déployer)
commit 513d1f9e094b649cf98b79e2095bc5f130face1b
Author: Thomas NOEL <tnoel@entrouvert.com>
Date:   Wed Aug 14 23:42:22 2019 +0200

    authentic agent: mass provision roles on new services (#35345)

#14 Updated by Frédéric Péters 2 days ago

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

Also available in: Atom PDF