X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FRetrieveSliceSliverKeys.py;h=0e2f394ea227c075ab1f79b9b1d03835e598448e;hb=6e915d8a9ac5474c20482751ab6d24e6ce13aec9;hp=6cdf2a01d771294906ecc7bbeaae1258b8147de9;hpb=647e5fff4e77d6139637a483b3d74cee597060de;p=plcapi.git diff --git a/PLC/Methods/RetrieveSliceSliverKeys.py b/PLC/Methods/RetrieveSliceSliverKeys.py index 6cdf2a0..0e2f394 100644 --- a/PLC/Methods/RetrieveSliceSliverKeys.py +++ b/PLC/Methods/RetrieveSliceSliverKeys.py @@ -1,19 +1,17 @@ -from types import StringTypes - from PLC.Method import Method from PLC.Parameter import Parameter, Mixed from PLC.Filter import Filter from PLC.Auth import Auth from PLC.Nodes import Node, Nodes from PLC.SliceTags import SliceTag, SliceTags -from PLC.Slices import Slice, Slices +from PLC.Slices import Slice, Slices class RetrieveSliceSliverKeys(Method): """ This method exposes the public ssh keys for a slice's slivers. It expects a slice name or id, and returns a dictionary on hostnames. This method is designed to help third-party software authenticate - slivers (e.g. the OMF Experiment Controller). + slivers (e.g. the OMF Experiment Controller). For this reason it is accessible with anonymous authentication. """ @@ -34,28 +32,28 @@ class RetrieveSliceSliverKeys(Method): returns = Parameter (dict, " ssh keys hashed on hostnames") def call(self, auth, slice_id_or_name, node_filter=None): - + filter={} if isinstance(slice_id_or_name,int): - filter['slice_id']=slice_id_or_name - elif isinstance(slice_id_or_name,StringTypes): - filter['name']=slice_id_or_name - filter['tagname']='ssh_key' + filter['slice_id'] = slice_id_or_name + elif isinstance(slice_id_or_name, str): + filter['name'] = slice_id_or_name + filter['tagname'] = 'ssh_key' # retrieve only sliver tags - filter['~node_id']=None + filter['~node_id'] = None if node_filter: # make sure we only deal with local nodes - node_filter['peer_id']=None + node_filter['peer_id'] = None nodes = Nodes(self.api, node_filter, ['node_id']) - node_ids = [ node ['node_id'] for node in nodes ] - filter['node_id']=node_ids - + node_ids = [node['node_id'] for node in nodes] + filter['node_id'] = node_ids + # slice_tags don't expose hostname, sigh.. - slice_tags=SliceTags(self.api,filter,['node_id','tagname','value']) + slice_tags = SliceTags(self.api, filter, ['node_id', 'tagname', 'value']) node_ids = [st['node_id'] for st in slice_tags] # fetch nodes - nodes=Nodes(self.api,node_ids,['node_id','hostname']) + nodes = Nodes(self.api, node_ids, ['node_id', 'hostname']) # hash on node_id - nodes_hash=dict( [ (n['node_id'],n['hostname']) for n in nodes]) + nodes_hash = {n['node_id']: n['hostname'] for n in nodes} # return values hashed on hostname - return dict([ (nodes_hash[st['node_id']],st['value']) for st in slice_tags]) + return {nodes_hash[st['node_id']]: st['value'] for st in slice_tags}