X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fopenstack_observer%2Fsteps%2Fsync_controller_users.py;h=ca2909ca5c755c21a3348576d138dfb27e175c9d;hb=50c795217b2327793eff678bb456bacd702c9c5f;hp=63f5ca3e9226fff410627493883c66f6226926b6;hpb=67626f8405423db3fc2ff69c1d08776a5d92a082;p=plstackapi.git diff --git a/planetstack/openstack_observer/steps/sync_controller_users.py b/planetstack/openstack_observer/steps/sync_controller_users.py index 63f5ca3..ca2909c 100644 --- a/planetstack/openstack_observer/steps/sync_controller_users.py +++ b/planetstack/openstack_observer/steps/sync_controller_users.py @@ -1,13 +1,12 @@ import os import base64 -import hashlib from collections import defaultdict from django.db.models import F, Q from planetstack.config import Config from observer.openstacksyncstep import OpenStackSyncStep -from core.models.site import ControllerSites, Controller +from core.models.site import Controller, SiteDeployment, SiteDeployment from core.models.user import User -from core.models.usercontrollers import ControllerUsers +from core.models.controlleruser import ControllerUser from util.logger import Logger, logging from observer.ansible import * @@ -15,15 +14,15 @@ from observer.ansible import * logger = Logger(level=logging.INFO) class SyncControllerUsers(OpenStackSyncStep): - provides=[ControllerUsers, User] + provides=[ControllerUser, User] requested_interval=0 def fetch_pending(self, deleted): if (deleted): - return ControllerUsers.deleted_objects.all() + return ControllerUser.deleted_objects.all() else: - return ControllerUsers.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) + return ControllerUser.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) def sync_record(self, controller_user): logger.info("sync'ing user %s at controller %s" % (controller_user.user, controller_user.controller)) @@ -33,52 +32,45 @@ class SyncControllerUsers(OpenStackSyncStep): return template = os_template_env.get_template('sync_controller_users.yaml') - - name = controller_user.user.email[:controller_user.user.email.find('@')] - - roles = [] - # setup user controller home site roles - if controller_user.user.site: - site_controllers = ControllerSites.objects.filter(site=controller_user.user.site, - controller=controller_user.controller) - if site_controllers: - # need the correct tenant id for site at the controller - tenant_id = site_controllers[0].tenant_id - tenant_name = site_controllers[0].site.login_base - - roles.append('user') - if controller_user.user.is_admin: - roles.append('admin') - else: - raise Exception('Internal error. Missing ControllerSites for user %s'%controller_user.user.email) - else: - raise Exception('Siteless user %s'%controller_user.user.email) + # All users will have at least the 'user' role at their home site/tenant. + # We must also check if the user should have the admin role + roles = ['user'] + if controller_user.user.is_admin: + roles.append('Admin') + + # setup user home site roles at controller + if not controller_user.user.site: + raise Exception('Siteless user %s'%controller_user.user.email) + else: + # look up tenant id for the user's site at the controller + #ctrl_site_deployments = SiteDeployment.objects.filter( + # site_deployment__site=controller_user.user.site, + # controller=controller_user.controller) - user_fields = {'endpoint':controller_user.controller.auth_url, + #if ctrl_site_deployments: + # # need the correct tenant id for site at the controller + # tenant_id = ctrl_site_deployments[0].tenant_id + # tenant_name = ctrl_site_deployments[0].site_deployment.site.login_base + user_fields = { + 'endpoint':controller_user.controller.auth_url, 'name': controller_user.user.email, 'email': controller_user.user.email, - 'password': hashlib.md5(controller_user.user.password).hexdigest()[:6], + 'password': controller_user.user.remote_password, 'admin_user': controller_user.controller.admin_user, 'admin_password': controller_user.controller.admin_password, - 'admin_tenant': 'admin', + 'ansible_tag':'%s@%s'%(controller_user.user.email.replace('@','-at-'),controller_user.controller.name), + 'admin_tenant': controller_user.controller.admin_tenant, 'roles':roles, - 'tenant':tenant_name} + 'tenant':controller_user.user.site.login_base} - rendered = template.render(user_fields) - res = run_template('sync_controller_users.yaml', user_fields) + rendered = template.render(user_fields) + expected_length = len(roles) + 1 + + res = run_template('sync_controller_users.yaml', user_fields,path='controller_users', expected_num=expected_length) - # results is an array in which each element corresponds to an - # "ok" string received per operation. If we get as many oks as - # the number of operations we issued, that means a grand success. - # Otherwise, the number of oks tell us which operation failed. - expected_length = len(roles) + 1 - if (len(res)==expected_length): - controller_user.save() - elif (len(res)): - raise Exception('Could not assign roles for user %s'%user_fields['name']) - else: - raise Exception('Could not create or update user %s'%user_fields['name']) + controller_user.kuser_id = res[0]['id'] + controller_user.save() def delete_record(self, controller_user): if controller_user.kuser_id: