# Edit the options in this file to match your projects environment. # See http://ask.github.com/celery/cookbook/daemonizing.html for the complete # documentation on the options. # WARNING: This script is only designed to run the worker(s) for a single # project. If you need to start workers for multiple projects you should # consider using supervisor. # Examples can be found in /usr/share/doc/python-celery/supervisord/ export HOBO_SETTINGS_FILE='/etc/hobo/agent.py' # Change this to true when done to enable the init.d script. # Default: false ENABLED="true" # Name of nodes to start # here we have a single node CELERYD_NODES="hobo-agents" # or we could have three nodes: #CELERYD_NODES="w1 w2 w3" # Where to chdir at start. CELERYD_CHDIR="/" # Extra arguments to celeryd CELERYD_OPTS="--time-limit=300 --concurrency=2 -A hobo.agent" # Name of the celery config module. CELERY_CONFIG_MODULE="celeryconfig" # %n will be replaced with the nodename. CELERYD_LOG_FILE="/var/log/celery/%n.log" # Workers should run as an unprivileged user. CELERYD_USER="celery" CELERYD_GROUP="celery"
sudo /etc/init.d/celeryd restart
SERVICE_TEMPLATES = { 'wcs': [('export.wcs', u'Montpellier agglo template')], }
AGENT_HOST_PATTERNS = { 'wcs': ['*-site.montpellier.entrouvert.org',], } AGENT_WCS_APP_DIR = '/var/lib/wcs-au-quotidien' AGENT_WCS_COMMAND = 'sudo -u wcs-au-quotidien /usr/sbin/wcsctl -f /etc/wcs/wcs-au-quotidien.cfg check-hobos'
celery ALL=(wcs-au-quotidien)NOPASSWD:/usr/sbin/wcsctl -f /etc/wcs/wcs-au-quotidien.cfg check-hobos
execfile('/var/lib/combo/tenant1/config.py', settings, {'tenant_dir': '/var/lib/combo/tenant1/'})
django.contrib.auth.models.Group.objects.create("Vendargues - Administrateur")
à mettre dans l'agent de déploiementFaire en sorte que hobo couvre le déploiement des tenants.
hobo
le serveur de déploiement : gestion de l'environnement dans le /manage et envoi du hobo.json correspondant dans celery
hobo.multitenant
reprendre entrouvert.djommon.multitenant (fait avec conservation de l'historique, dans la branche wip/merging-multitenant de hobo, #6468)
hobo.agent
réception du hobo.json dans le celery, déploiement de tous les services correspondant via l'appel de commandes de ce genre :
sudo -u service /usr/lib/service/manage.py hobo_deploy www.example.net < hobo.json
hobo.agent.authentic2
ne contient que la commande de management hobo_deploy dédiée au déploiement d'un tenant authentic2 :
- create_tenant
- création de la bi-clé SAML dans le tenant (saml.crt, saml.key)
- copie du hobo.json reçu dans tenant/www.example.net/hobo.json
- ajout des policies par défaut
- download des metadonnées dans federation.xml
- sync-metadata de federation.xml
Cette application est à ajouter dans le INSTALLED_APPS (ou SHARED_APPS) d'authentic2 pour lui donner cette commande hobo_deploy
hobo.agent.common
ne contient que la commande de management hobo_deploy dédiée au déploiement d'un SP mellonisé :
- create_tenant
- copie du hobo.json reçu dans tenant/www.example.net/hobo.json
- download des metadonnées de l'idp dans tenant/www.example.net/metadata_idp_0.xml
Cette application est à ajouter dans le INSTALLED_APPS (ou SHARED_APPS) du SP cible (combo, passerelle, ...) pour lui donner la commande hobo_deploy
hobo.middleware.settings.mellon
configuration des settings.MELLON* depuis les données de tenant/www.example.net/metadata_idp_0.xml et le hobo.json si besoin
hobo.middleware.settings.authentic2
configuration des settings.SAML* depuis saml.crt et saml.key
hobo.middleware.context.vars
création des templatesvars depuis le hobo.json du tenant
Le celery client reçoit un environnement hobo.json. Pour chaque tenant de chaque service listé dans cet environnement, il lance la commande de déploiement du service. Pour un service djangoisé, c'est typiquement :
sudo -u service /usr/lib/service/manage.py hobo_deploy www.example.net < hobo.json
Ce "hobo_deploy" va lancer la commande de management programmée dans hobo/agent/<service>/management/commands/hobo_deploy.py
Le processus de création est configurer pour gérer un tenant qui existe déjà, et ne rien faire dans ce cas, juste mettre à jour le hobo.json, et s'il est différent mettre à jour les métadonnées, etc. Ces mises à jour sont prises en compte aussitôt par le tenant via les middlewares.
hobo pourrait fournir: from hobo.helper.settings.mellon import * # config de base MELLON ouaip bon bofff
Cette page reprend les différents endroits où la définition des champs d'un profil utilisateur s'établit.
(infos tirées de Vincennes)
first_name, last_name et email sont des champs standards, définis dans les sources.
Les autres sont définis dans l'admin, /admin/authentic2/attribute/ (correct ?)
Les types des attributs sont définis dans les settings (sinon il n'y a qu'un seul type "chaîne"):
A2_ATTRIBUTE_KINDS = [ { 'label': u'Civilité', 'name': 'title', 'field_class': forms.ChoiceField, 'kwargs': { 'choices': [ ('monsieur', u'Monsieur'), ('madame', u'Madame'), ], } }, { 'label': u'Date de naissance jj/mm/aaaa', 'name': 'birthdate', 'field_class': forms.RegexField, 'kwargs': { 'regex': r'^\d\d/\d\d/\d\d\d\d$' } } ]
Dans la config, il y a aussi des infos pour la page d'édition et d'enregistrement de compte:
"A2_PROFILE_FIELDS": [ "username", "email", "civilite", "first_name", "last_name", "date_de_naissance", "telephone", "mobile", "adresse_numero_voie", "adresse_type_voie", "adresse_nom_voie", "adresse_complement", "code_postal", "ville", "pays" ], "A2_REGISTRATION_FIELDS": [ "username", "email", "civilite", "first_name", "last_name", "date_de_naissance", "telephone", "mobile", "adresse_numero_voie", "adresse_type_voie", "adresse_nom_voie", "adresse_complement", "code_postal", "ville", "pays" ], "A2_REGISTRATION_REQUIRED_FIELDS": [ "first_name", "last_name" ],
Cela permet de définir l'ordre, la présence et la nécessité (pour la page d'enregistrement) des champs.
Des attributs peuvent aussi venir d'un serveur LDAP si une authentification LDAP est configurée:
LDAP_AUTH_SETTINGS = [ { 'url': 'ldapi:///', 'basedn': 'dc=entrouvert,dc=org', 'transient': False, 'username_template': '{uid[0]}@{realm}', 'external_id_tuples': (('dn:noquote',), ('uid','entryUUID'), ), 'lookups': ('external_id',), 'update_username': False, 'attributes': ['uid', 'cn'], } ]
Ici seront extraits les attributs uid
, cn
et entryUUID
. Les champs qui définissent les attributs à extraire sont attributes
, external_id_tuples
, email_field
(valeur par défaut email
), fname_field
(valeur par défaut givenName
) et lname_field
(valeur par défaut sn
).
Les attributs à partager doivent être définis dans la page de configuration du fournisseur SAML, ne pas oublier de transférer la liste des noms de groupe dans l'attribut 'role' pour les droits d'administration dans les applications.
Les attributs à partager doivent être définis dans la page de configuration du client OAuth2, ne pas oublier de transférer la liste des noms de groupe dans l'attribut 'role' pour les droits d'administration dans les applications.
user_info
de l'IdP:
username
email
first_name
last_name
role
Ils sont utilisés tel quels pour retrouver l'utilisateur ou le créer (via username
) et le pré-remplir.
Pour provisionner les super administrateur on définir le paramètre ALLAUTH_A2_ADMIN_ROLE
qui devra être une valeur reçue via l'attribut role
.
Fiche d'un utilisateur, /admin/settings/users/fields/
Correspondance des attributs, /admin/settings/identification/idp/idp/https-connexion.vincennes.fr-idp-saml2-metadata/edit
Dans la page de correspondance il faut aussi définir les attributs qui donne les droits d'administration, par exemple role -> Administrateur
.
Profil utilisateur
Configurer celeryd pour gérer les agents
From here to there