From: Tony Mack Date: Tue, 11 Jun 2013 03:25:30 +0000 (-0400) Subject: sync roles X-Git-Tag: 1.0~22 X-Git-Url: http://git.onelab.eu/?p=plstackapi.git;a=commitdiff_plain;h=f8d4a467fdcf8cc367fa9b51d4caa1f264490f1e sync roles --- diff --git a/planetstack/openstack/observer.py b/planetstack/openstack/observer.py index 02b0b9c..e4460a9 100644 --- a/planetstack/openstack/observer.py +++ b/planetstack/openstack/observer.py @@ -16,7 +16,7 @@ class OpenStackObserver: return while True: try: - #self.sync_roles() + self.sync_roles() self.sync_tenants() self.sync_users() #self.sync_user_tenant_roles() @@ -25,6 +25,29 @@ class OpenStackObserver: 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.