From 0e92c543d113577c2e713f61fcbdac04cb7c9b8e Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Thu, 5 Nov 2009 20:02:41 +0000 Subject: [PATCH] Pass on rspec attributes as slice attributes. --- sfa/plc/slices.py | 44 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/sfa/plc/slices.py b/sfa/plc/slices.py index a384a9b4..e2b656d8 100644 --- a/sfa/plc/slices.py +++ b/sfa/plc/slices.py @@ -21,6 +21,8 @@ from sfa.server.registry import Registries class Slices(SimpleStorage): + rspec_to_slice_tag = {'max_rate':'net_max_rate'} + def __init__(self, api, ttl = .5, caller_cred=None): self.api = api self.ttl = ttl @@ -412,21 +414,51 @@ class Slices(SimpleStorage): # get netspec details nodespecs = spec.getDictsByTagName('NodeSpec') - nodes = [] + + # dict in which to store slice attributes to set for the nodes + nodes = {} for nodespec in nodespecs: if isinstance(nodespec['name'], list): - nodes.extend(nodespec['name']) + for nodename in nodespec['name']: + nodes[nodename] = {} + for k in nodespec.keys(): + rspec_attribute_value = nodespec[k] + if (self.rspec_to_slice_tag.has_key(k)): + slice_tag_name = rspec_to_slice_tag[k] + nodes[nodename][slice_tag_name] = rspec_attribute_value elif isinstance(nodespec['name'], StringTypes): - nodes.append(nodespec['name']) - + nodename = nodespec['name'] + nodes[nodename] = {} + for k in nodespec.keys(): + rspec_attribute_value = nodespec[k] + if (self.rspec_to_slice_tag.has_key(k)): + slice_tag_name = rspec_to_slice_tag[k] + nodes[nodename][slice_tag_name] = rspec_attribute_value + + for k in nodespec.keys(): + rspec_attribute_value = nodespec[k] + if (self.rspec_to_slice_tag.has_key(k)): + slice_tag_name = rspec_to_slice_tag[k] + nodes[nodename][slice_tag_name] = rspec_attribute_value + + node_names = nodes.keys() # remove nodes not in rspec - deleted_nodes = list(set(hostnames).difference(nodes)) + deleted_nodes = list(set(hostnames).difference(node_names)) # add nodes from rspec - added_nodes = list(set(nodes).difference(hostnames)) + added_nodes = list(set(node_names).difference(hostnames)) if peer: self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'slice', slice['slice_id'], peer) + self.api.plshell.AddSliceToNodes(self.api.plauth, slicename, added_nodes) + + # Add recognized slice tags + for node_name in node_names: + node = nodes[node_name] + for slice_tag in node.keys(): + value = node[slice_tag] + self.api.plshell.AddSliceTag(self.api.plauth, slicename, slice_tag, value, node_name) + self.api.plshell.DeleteSliceFromNodes(self.api.plauth, slicename, deleted_nodes) if peer: self.api.plshell.BindObjectToPeer(self.api.plauth, 'slice', slice['slice_id'], peer, slice['peer_slice_id']) -- 2.43.0