X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fopenstack%2Fobserver.py;h=872cf58c97900ead62bc9cfaa2cea346e166e0c5;hb=2bd5b41d9197efcecfa92032fff4c17ee6c5e79b;hp=02b0b9cc4a5ceac011cf6a8b691fb727cedd7753;hpb=0553f281ee5404658e660cd59090d8d10b5432cf;p=plstackapi.git diff --git a/planetstack/openstack/observer.py b/planetstack/openstack/observer.py index 02b0b9c..872cf58 100644 --- a/planetstack/openstack/observer.py +++ b/planetstack/openstack/observer.py @@ -20,11 +20,34 @@ class OpenStackObserver: self.sync_tenants() self.sync_users() #self.sync_user_tenant_roles() - #self.sync_slivers() + self.sync_slivers() time.sleep(7) except: traceback.print_exc() + def sync_roles(self): + """ + save all role that don't already exist in keystone. Remove keystone roles that + don't exist in planetstack + """ + # sync all roles that don't already in keystone + keystone_roles = self.manager.driver.shell.keystone.roles.findall() + keystone_role_names = [kr.name for kr in keystone_roles] + pending_roles = Role.objects.all() + pending_role_names = [r.role_type for r in pending_roles] + for role in pending_roles: + if role.role_type not in keystone_role_names: + self.manager.save_role(role) + + + # delete keystone roles that don't exist in planetstack + for keystone_role in keystone_roles: + if keystone_role.name == 'admin': + continue + if keystone_role.name not in pending_role_names: + pass + #self.manager.driver.delete_role({id: keystone_role.id}) + def sync_tenants(self): """ Save all sites and sliceswhere enacted < updated or enacted == None. @@ -35,15 +58,18 @@ class OpenStackObserver: pending_sites = Site.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) for site in pending_sites: self.manager.save_site(site) - site.enacted = datetime.now() site.save() + site.enacted = datetime.now() + site.save(update_fields=['enacted']) # get all slices that need to be synced (enacted < updated or enacted is None) pending_slices = Slice.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) for slice in pending_slices: + self.manager.init_caller(slice.creator, slice.creator.site.login_base) self.manager.save_slice(slice) - slice.enacted = datetime.now() slice.save() + slice.enacted = datetime.now() + slice.save(update_fields=['enacted']) # get all sites that where enacted != null. We can assume these sites # have previously been synced and need to be checed for deletion. @@ -79,8 +105,9 @@ class OpenStackObserver: pending_users = User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) for user in pending_users: self.manager.save_user(user) - user.enacted = datetime.now() user.save() + user.enacted = datetime.now() + user.save(update_fields=['enacted']) # get all users that where enacted != null. We can assume these users # have previously been synced and need to be checed for deletion. @@ -107,12 +134,13 @@ class OpenStackObserver: # get all users that need to be synced (enacted < updated or enacted is None) pending_slivers = Sliver.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) for sliver in pending_slivers: - if sliver.creator: + if not sliver.instance_id and sliver.creator: # update manager context - self.manager.init_caller(sliver.creator) + self.manager.init_caller(sliver.creator, sliver.slice.name) self.manager.save_sliver(sliver) - sliver.enacted = datetime.now() sliver.save() + sliver.enacted = datetime.now() + sliver.save(update_fields=['enacted']) # get all slivers that where enacted != null. We can assume these users # have previously been synced and need to be checed for deletion. @@ -127,6 +155,7 @@ class OpenStackObserver: for instance in instances: if instance.id not in sliver_dict: # lookup tenant and update context - tenant = self.manager.driver.shell.keystone.tenants.findall(id=instance.tenant_id) - self.manager.init_admin(tenant=tenant.name) - self.manager.driver.destroy_instance(instance.id) + #tenant = self.manager.driver.shell.keystone.tenants.findall(id=instance.tenant_id) + #self.manager.init_admin(tenant=tenant.name) + #self.manager.driver.destroy_instance(instance.id) + pass