Project

General

Profile

Development #7176

Créer une commande import-wcs-roles pour l'agent authentic2

Added by Benjamin Dauvergne over 4 years ago. Updated almost 4 years ago.

Status:
Fermé
Priority:
Haut
Category:
-
Target version:
-
Start date:
07 May 2015
Due date:
% Done:

100%

Patch proposed:
Yes
Planning:
No

0001-agent-authentic2-add-new-command-import-wcs-roles.patch View (6.65 KB) Benjamin Dauvergne, 07 May 2015 08:21 PM

0001-agent-authentic2-add-new-command-import-wcs-roles.patch View (9.09 KB) Benjamin Dauvergne, 09 May 2015 10:19 AM

0001-agent-authentic2-add-new-command-import-wcs-roles.patch View (9.14 KB) Benjamin Dauvergne, 09 May 2015 10:20 AM

0001-agent-authentic2-add-new-command-import-wcs-roles.patch View (9.43 KB) Frédéric Péters, 19 May 2015 08:39 PM

0001-agent-authentic2-add-new-command-import-wcs-roles.patch View (9.35 KB) Benjamin Dauvergne, 26 May 2015 11:04 AM

0001-agent-authentic2-add-new-command-import-wcs-roles.patch View (9.32 KB) Benjamin Dauvergne, 26 May 2015 11:30 AM

0001-agent-authentic2-add-new-command-import-wcs-roles.patch View (9.63 KB) Frédéric Péters, 26 May 2015 01:04 PM

t.diff View (1.96 KB) Frédéric Péters, 26 May 2015 01:04 PM


Related issues

Related to Publik - Project management #7175: Importation des rôles de w.c.s. dans authentic Fermé 07 May 2015 27 May 2015
Related to Authentic 2 - Development #7299: a2_rbac: add external_id field to Role object Fermé 20 May 2015

Associated revisions

Revision 9d4b9f9e (diff)
Added by Benjamin Dauvergne over 4 years ago

agent/authentic2: add new command import-wcs-roles

The command make a signed get to the "roles" web-service of w.c.s. and try to
created services roles for all found roles. It traverses all tenants and
generate credentials from hobo.json keys (base_url and secret_key) and existing
superusers:

./authentic2-ctl import-wcs-roles [--delete]

Use the --delete option if you want roles which have disappeared to be removed.

fixes #7176

History

#1 Updated by Benjamin Dauvergne over 4 years ago

Patch pas encore testé mais l'idée est là.

#2 Updated by Frédéric Péters over 4 years ago

Le lien vers w.c.s. devrait passer par des slugs, je pensais que le ticket existait déjà mais non, je viens de le créer. (#7180)

url = self.wcs_url + 'roles?%s' % urllib.urlencode({'orig': self.orig})

C'est peut-être à changer mais aujourd'hui l'API exige un utilisateur.

role_extractor = role_extractors.WcsRoleExtractor

Même si je reste convaincu qu'abstraire prématurément est inutile, en gardant la structure actuelle, j'aurais quand même WcsRoleExtractor dans le fichier import-wcs-roles.

hobo/agent/authentic2/management/signature.py

Ça a quand même des chances de se retrouver utile de manière plus générale, ça pourrait aller dans hobo/ (dans utils.py?)

W.C.S.

w.c.s., en minuscules.

self.logger

Perdu sur une ligne ?


Ça mériterait aussi l'ajout de quelques mots sur les particularités de l'agent authentic dans le README (il y a déjà un bout sur wcs).

#3 Updated by Benjamin Dauvergne over 4 years ago

J'ai changé la commande pour générer tous les paramètres depuis le hobo.json autant que possible. Le seul truc un peu sioux c'est de trouver un email connu (ou même un NameID) dont on soit sûr qu'il existe sur l'instance de w.c.s. J'ai choisi de prendre le superuser le plus ancien. Ce code dépend maintenant du ticket #7192.

Frédéric Péters a écrit :

Le lien vers w.c.s. devrait passer par des slugs, je pensais que le ticket existait déjà mais non, je viens de le créer. (#7180)

J'ai modifié le code pour prendre ce futur slug comme identifiant.

url = self.wcs_url + 'roles?%s' % urllib.urlencode({'orig': self.orig})

C'est peut-être à changer mais aujourd'hui l'API exige un utilisateur.

Ajouté le paramètre email (voir remarque avant).

role_extractor = role_extractors.WcsRoleExtractor

Même si je reste convaincu qu'abstraire prématurément est inutile, en gardant la structure actuelle, j'aurais quand même WcsRoleExtractor dans le fichier import-wcs-roles.

Je voulais surtout séparer l'extraction de leur définition de leur création effective, j'ai tout réuni en une classe mais avec toujours plusieurs méthodes.

hobo/agent/authentic2/management/signature.py

Ça a quand même des chances de se retrouver utile de manière plus générale, ça pourrait aller dans hobo/ (dans utils.py?)

Déplacé dans hobo/.

W.C.S.

w.c.s., en minuscules.

Corrigé.

self.logger

Perdu sur une ligne ?

Enlevé.


Ça mériterait aussi l'ajout de quelques mots sur les particularités de l'agent authentic dans le README (il y a déjà un bout sur wcs).

Ajouté.

#5 Updated by Benjamin Dauvergne over 4 years ago

Avec un message de commit mis à jour.

#6 Updated by Benjamin Dauvergne over 4 years ago

  • Priority changed from Normal to Haut

#7 Updated by Frédéric Péters over 4 years ago

#8 Updated by Frédéric Péters over 4 years ago

url = self.wcs_url + 'roles?%s'

Pour accompagner l'ajout des slugs il y a aussi la mise à disposition de l'API à l'adresse api/roles, plutôt que roles; l'ancien endpoint reste fonctionnel mais tant qu'à faire, autant utiliser le nouveau directement.

Par ailleurs je me demande si c'est vraiment utile de nécessiter une requête authentifiée/signée pour ce endpoint, mais c'est une autre affaire.

À part ça, en imaginant l'affaire testée, ce serait ok. (bon, en vrai il y a le "from .. import role_extractors" à retirer, puis import os et json à mettre, puis faire me = me0, puis ne pas passer sur les services qui ont un service-id != 'wcs', puis passer Accept: application/json, puis prendre en compte que la clé est créée sur une base ne contenant pas le port, et puis on arrive à une mise à jour à faire par rapport aux changements rbac dans authentic, parce qu'il n'y a plus de external_id, et ça je laisse faire).

#9 Updated by Benjamin Dauvergne over 4 years ago

Frédéric Péters a écrit :

url = self.wcs_url + 'roles?%s'

Pour accompagner l'ajout des slugs il y a aussi la mise à disposition de l'API à l'adresse api/roles, plutôt que roles; l'ancien endpoint reste fonctionnel mais tant qu'à faire, autant utiliser le nouveau directement.

C'est pour tout de suite ?

Par ailleurs je me demande si c'est vraiment utile de nécessiter une requête authentifiée/signée pour ce endpoint, mais c'est une autre affaire.

Oui.

À part ça, en imaginant l'affaire testée, ce serait ok. (bon, en vrai il y a le "from .. import role_extractors" à retirer, puis import os et json à mettre, puis faire me = me0, puis ne pas passer sur les services qui ont un service-id != 'wcs', puis passer Accept: application/json, puis prendre en compte que la clé est créée sur une base ne contenant pas le port, et puis on arrive à une mise à jour à faire par rapport aux changements rbac dans authentic, parce qu'il n'y a plus de external_id, et ça je laisse faire).

Vu tout ça. J'ai fait un test d'intégration manuel de bout en bout, ça roule. Par contre je pense pousser l'extracteur directement dans authentic et seulement la commande dans hobo. C'est un peu chiant de tester avec hobo, je préfère faire mes tests en monotenant. Et si j'arrive à m'interposer dans les appels à requests j'aimerai bien avoir des tests.

#10 Updated by Frédéric Péters over 4 years ago

url = self.wcs_url + 'roles?%s'

Pour accompagner l'ajout des slugs il y a aussi la mise à disposition de l'API à l'adresse api/roles, plutôt que roles; l'ancien endpoint reste fonctionnel mais tant qu'à faire, autant utiliser le nouveau directement.

C'est pour tout de suite ?

Ça a été mis en place avec la mise à disposition des slugs (#7180).

Vu tout ça. J'ai fait un test d'intégration manuel de bout en bout, ça roule. Par contre je pense pousser l'extracteur directement dans authentic et seulement la commande dans hobo. C'est un peu chiant de tester avec hobo, je préfère faire mes tests en monotenant. Et si j'arrive à m'interposer dans les appels à requests j'aimerai bien avoir des tests.

Je ne suis pas sûr de la séparation que ça va donner, tu mettrais signature.py et la classe WcsRoleImporter du côté d'Authentic, c'est ça ?

#11 Updated by Benjamin Dauvergne over 4 years ago

#13 Updated by Frédéric Péters over 4 years ago

Si ça a été testé de bout en bout, c'est ok mais je suggérais url = self.wcs_url + 'roles?%s' % urllib.urlencode(..., que ça soit plutôt /api/roles qui soit appelé. Et print response.content à retirer.

#14 Updated by Benjamin Dauvergne over 4 years ago

Non c'est pas testé de bout en bout je n'ai testé que la classe WcsRoleImported depuis un shell, je n'ai aucune certitude que la partie intégration hobo marche. Si on m'indique une plateforme sûre pour tester j'y vais.

Attaché le patch mis à jour pour api/roles et le print.

#15 Updated by Frédéric Péters over 4 years ago

Patch testé et modifié (en fichiers joints le fixup du patch, puis le diff par rapport à ta version).

#16 Updated by Benjamin Dauvergne over 4 years ago

Ok je pousse.

#17 Updated by Benjamin Dauvergne over 4 years ago

  • Status changed from En cours to Résolu (à déployer)
  • % Done changed from 0 to 100

#19 Updated by Benjamin Dauvergne almost 4 years ago

  • Blocked by deleted (Development #7299: a2_rbac: add external_id field to Role object)

#20 Updated by Benjamin Dauvergne almost 4 years ago

#21 Updated by Benjamin Dauvergne almost 4 years ago

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

Also available in: Atom PDF