From f3bf13bbfc1655f3e7117dd03d7eacaf3d77956d Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Mon, 5 Oct 2009 16:15:13 +0000 Subject: [PATCH] leverages new Filter features to gather all admins and site power users --- PLC/Methods/GetSlivers.py | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/PLC/Methods/GetSlivers.py b/PLC/Methods/GetSlivers.py index aefcf93..7eae42e 100644 --- a/PLC/Methods/GetSlivers.py +++ b/PLC/Methods/GetSlivers.py @@ -243,34 +243,32 @@ class v43GetSlivers(Method): # reduce ( reduce_flatten_list, [ [1] , [2,3] ], []) => [ 1,2,3 ] def reduce_flatten_list (x,y): return x+y - def get_site_roles_keys(site_id_or_name,roles): - site = Sites (self.api,site_id_or_name,['person_ids'])[0] - persons = Persons(self.api,{'person_id':site['person_ids'], 'enabled':True}, - ['roles','key_ids','enabled'] ) - key_ids = [] - for role in roles: - key_ids.extend(reduce (reduce_flatten_list, [ p['key_ids'] for p in persons if role in p['roles'] ], [])) - return [ key['key'] for key in Keys (self.api, key_ids) if key['key_type']=='ssh'] - - def get_all_admin_keys(): - # get all admins key_ids and flatten them into a list of key_ids + # power users are pis and techs + def get_site_power_user_keys(api,site_id_or_name): + site = Sites (api,site_id_or_name,['person_ids'])[0] key_ids = reduce (reduce_flatten_list, [ p['key_ids'] for p in \ - Persons(self.api,{'peer_id':None,'enabled':True}, \ - ['roles','key_ids','enabled']) \ - if 'admin' in p['roles'] ], - # starting point for reduce in case there's no admin - I know.. + Persons(api,{ 'person_id':site['person_ids'], + 'enabled':True, '|role_ids' : [20, 40] }, + ['key_ids']) ], []) - # fetch the corresponding keys, and extract the 'key' part into a list - # this does not return duplicates - return [ key['key'] for key in Keys (self.api, key_ids) if key['key_type']=='ssh'] + return [ key['key'] for key in Keys (api, key_ids) if key['key_type']=='ssh'] + + # all admins regardless of their site + def get_all_admin_keys(api): + key_ids = reduce (reduce_flatten_list, + [ p['key_ids'] for p in \ + Persons(api, {'peer_id':None, 'enabled':True, '|role_ids':[10] }, + ['key_ids']) ], + []) + return [ key['key'] for key in Keys (api, key_ids) if key['key_type']=='ssh'] # 'site_admin' account setup - personsitekeys=get_site_roles_keys(node['site_id'],['pi','tech']) + personsitekeys=get_site_power_user_keys(self.api,node['site_id']) accounts.append({'name':'site_admin','keys':personsitekeys}) # 'root' account setup on nodes from all 'admin' users - personsitekeys=get_all_admin_keys() + personsitekeys=get_all_admin_keys(self.api) accounts.append({'name':'root','keys':personsitekeys}) node.update_last_contact() -- 2.43.0