Projet

Général

Profil

Development #7176

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

Ajouté par Benjamin Dauvergne il y a presque 9 ans. Mis à jour il y a plus de 8 ans.

Statut:
Fermé
Priorité:
Haut
Assigné à:
Catégorie:
-
Version cible:
-
Début:
07 mai 2015
Echéance:
% réalisé:

100%

Temps estimé:
Patch proposed:
Oui
Planning:

Fichiers


Demandes liées

Lié à Publik - Project management #7175: Importation des rôles de w.c.s. dans authenticFermé07 mai 201527 mai 2015

Actions
Lié à Authentic 2 - Development #7299: a2_rbac: add external_id field to Role objectFermé20 mai 2015

Actions

Révisions associées

Révision 9d4b9f9e (diff)
Ajouté par Benjamin Dauvergne il y a presque 9 ans

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

Historique

#1

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

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

#2

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

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

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

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é.

#6

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

  • Priorité changé de Normal à Haut
#7

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

#8

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

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

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

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

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

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

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

  • Bloqué par Development #7299: a2_rbac: add external_id field to Role object ajouté
#13

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

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

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

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

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

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

#16

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

Ok je pousse.

#17

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

  • Statut changé de En cours à Résolu (à déployer)
  • % réalisé changé de 0 à 100
#19

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

  • Bloqué par Development #7299: a2_rbac: add external_id field to Role object supprimé
#20

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

#21

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF