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