blob: 449dc11a8fbe9cac8edb041c9136014b2873ef91 [file] [log] [blame]
Scott Bakerb63ea792016-08-11 10:24:48 -07001import os
2import base64
Scott Bakerb63ea792016-08-11 10:24:48 -07003from xos.config import Config
Scott Baker8b75e852016-08-16 15:04:59 -07004from synchronizers.openstack.openstacksyncstep import OpenStackSyncStep
Scott Bakeraf599eb2017-03-21 12:43:26 -07005from synchronizers.new_base.syncstep import *
6from synchronizers.new_base.ansible_helper import *
Scott Bakerb63ea792016-08-11 10:24:48 -07007from xos.logger import observer_logger as logger
Scott Bakeraf599eb2017-03-21 12:43:26 -07008from synchronizers.new_base.modelaccessor import *
Scott Bakerb63ea792016-08-11 10:24:48 -07009
10class SyncControllerUsers(OpenStackSyncStep):
11 provides=[User]
12 requested_interval=0
13 observes=ControllerUser
14 playbook='sync_controller_users.yaml'
15
16 def map_sync_inputs(self, controller_user):
17 if not controller_user.controller.admin_user:
18 logger.info("controller %r has no admin_user, skipping" % controller_user.controller)
19 return
20
21 # All users will have at least the 'user' role at their home site/tenant.
22 # We must also check if the user should have the admin role
23
24 roles = ['user']
25 if controller_user.user.is_admin:
Scott Baker04a37f52016-08-11 10:52:21 -070026 driver = self.driver.admin_driver(controller=controller_user.controller)
Scott Bakerb63ea792016-08-11 10:24:48 -070027 roles.append(driver.get_admin_role().name)
28
29 # setup user home site roles at controller
30 if not controller_user.user.site:
31 raise Exception('Siteless user %s'%controller_user.user.email)
32 else:
Scott Bakerb63ea792016-08-11 10:24:48 -070033 user_fields = {
34 'endpoint':controller_user.controller.auth_url,
35 'endpoint_v3': controller_user.controller.auth_url_v3,
36 'domain': controller_user.controller.domain,
37 'name': controller_user.user.email,
38 'email': controller_user.user.email,
39 'password': controller_user.user.remote_password,
40 'admin_user': controller_user.controller.admin_user,
41 'admin_password': controller_user.controller.admin_password,
42 'ansible_tag':'%s@%s'%(controller_user.user.email.replace('@','-at-'),controller_user.controller.name),
43 'admin_project': controller_user.controller.admin_tenant,
44 'roles':roles,
45 'project':controller_user.user.site.login_base
46 }
47 return user_fields
48
49 def map_sync_outputs(self, controller_user, res):
50 controller_user.kuser_id = res[0]['user']['id']
51 controller_user.backend_status = '1 - OK'
52 controller_user.save()
53
54 def delete_record(self, controller_user):
55 if controller_user.kuser_id:
56 driver = self.driver.admin_driver(controller=controller_user.controller)
57 driver.delete_user(controller_user.kuser_id)