X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=planetstack%2Fopenstack_observer%2Fsteps%2Fsync_user_deployments.py;h=0c28392b3c7b85204e226d34f8d8791428bb10c2;hb=88a46419ed4a14668f3ceae932aea1675022ae63;hp=a6995ab48d4a2b3d506bf6ccc56921664c331f4e;hpb=a358f0fb280d3da6938575be3d9c5d4a4a7e3f7a;p=plstackapi.git diff --git a/planetstack/openstack_observer/steps/sync_user_deployments.py b/planetstack/openstack_observer/steps/sync_user_deployments.py index a6995ab..0c28392 100644 --- a/planetstack/openstack_observer/steps/sync_user_deployments.py +++ b/planetstack/openstack_observer/steps/sync_user_deployments.py @@ -13,49 +13,23 @@ from util.logger import Logger, logging logger = Logger(level=logging.INFO) class SyncUserDeployments(OpenStackSyncStep): - provides=[User, UserDeployments] + provides=[UserDeployments, User] requested_interval=0 - def fetch_pending(self): - # user deployments are not visible to users. We must ensure - # user are deployed at all deploymets available to their sites. + def fetch_pending(self, deleted): - deployments = Deployment.objects.all() - site_deployments = SiteDeployments.objects.all() - site_deploy_lookup = defaultdict(list) - for site_deployment in site_deployments: - site_deploy_lookup[site_deployment.site].append(site_deployment.deployment) - - user_deploy_lookup = defaultdict(list) - for user_deployment in UserDeployments.objects.all(): - user_deploy_lookup[user_deployment.user].append(user_deployment.deployment) - - all_deployments = Deployment.objects.filter() - for user in User.objects.all(): - if user.is_admin: - # admins should have an account at all deployments - expected_deployments = deployments - else: - # normal users should have an account at their site's deployments - #expected_deployments = site_deploy_lookup[user.site] - # users are added to all deployments for now - expected_deployments = deployments - for expected_deployment in expected_deployments: - if not user in user_deploy_lookup or \ - expected_deployment not in user_deploy_lookup[user]: - # add new record - ud = UserDeployments(user=user, deployment=expected_deployment) - ud.save() - #user_deployments.append(ud) - #else: - # # update existing record - # ud = UserDeployments.objects.get(user=user, deployment=expected_deployment) - # user_deployments.append(ud) - - return UserDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) + if (deleted): + return UserDeployments.deleted_objects.all() + else: + return UserDeployments.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) def sync_record(self, user_deployment): logger.info("sync'ing user %s at deployment %s" % (user_deployment.user, user_deployment.deployment.name)) + + if not user_deployment.deployment.admin_user: + logger.info("deployment %r has no admin_user, skipping" % user_deployment.deployment) + return + name = user_deployment.user.email[:user_deployment.user.email.find('@')] user_fields = {'name': user_deployment.user.email, 'email': user_deployment.user.email, @@ -97,3 +71,9 @@ class SyncUserDeployments(OpenStackSyncStep): # user_driver.create_keypair(**key_fields) user_deployment.save() + + def delete_record(self, user_deployment): + if user_deployment.kuser_id: + driver = self.driver.admin_driver(deployment=user_deployment.deployment.name) + driver.delete_user(user_deployment.kuser_id) +