X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Faggregates%2Frspec_manager_max.py;h=c706ab140b16b39edcf04b8325d69211fd3efd03;hb=4ff67c801ceeb1d0c7ca2863c2b7bf8152182b8f;hp=b8e0920227530c454537690619b2fe1bcd4e5ad2;hpb=58701f53edfd7cbb9fe0c0edd599630874af74bb;p=sfa.git diff --git a/sfa/rspecs/aggregates/rspec_manager_max.py b/sfa/rspecs/aggregates/rspec_manager_max.py index b8e09202..c706ab14 100644 --- a/sfa/rspecs/aggregates/rspec_manager_max.py +++ b/sfa/rspecs/aggregates/rspec_manager_max.py @@ -1,15 +1,15 @@ #!/usr/bin/python -from sfa.util.rspec import Rspec +from sfa.util.rspec import RSpec import sys import pdb -from sfa.util.misc import * +from sfa.util.xrn import get_authority +from sfa.util.plxrn import hrn_to_pl_slicename from sfa.util.rspec import * from sfa.util.specdict import * from sfa.util.faults import * from sfa.util.storage import * from sfa.util.policy import Policy -from sfa.util.debug import log from sfa.server.aggregate import Aggregates from sfa.server.registry import Registries from sfa.util.faults import * @@ -18,24 +18,25 @@ import xml.dom.minidom SFA_MAX_CONF_FILE = '/etc/sfa/max_allocations' SFA_MAX_DEFAULT_RSPEC = '/etc/sfa/max_physical.xml' +SFA_MAX_CANNED_RSPEC = '/etc/sfa/max_physical_canned.xml' topology = {} -class GeniOutOfResource(GeniFault): +class SfaOutOfResource(SfaFault): def __init__(self, interface): faultString = "Interface " + interface + " not available" - GeniFault.__init__(self, 100, faultString, '') + SfaFault.__init__(self, 100, faultString, '') -class GeniNoPairRspec(GeniFault): +class SfaNoPairRSpec(SfaFault): def __init__(self, interface, interface2): faultString = "Interface " + interface + " should be paired with " + interface2 - GeniFault.__init__(self, 100, faultString, '') + SfaFault.__init__(self, 100, faultString, '') # Returns a mapping from interfaces to the nodes they lie on and their peer interfaces # i -> node,i_peer def get_interface_map(): - r = Rspec() + r = RSpec() r.parseFile(SFA_MAX_DEFAULT_RSPEC) rspec = r.toDict() capacity = rspec['rspec']['capacity'] @@ -120,22 +121,26 @@ def collapse_alloc_dict(d): return ret -def alloc_links(api, links_to_add, links_to_drop, foo): - #for l in links_to_add: - #(node1,ip1,node2,ip2) = l - #api.plshell.AddSliceTag(api.plauth, [slicename], ['node_ids']) +def alloc_links(api, hrn, links_to_add, links_to_drop): + slicename=hrn_to_pl_slicename(hrn) + for (iface,ip) in links_to_add: + node = topology[iface][0][0] + try: + api.plshell.AddSliceTag(api.plauth, slicename, "ip_addresses", ip, node) + api.plshell.AddSliceTag(api.plauth, slicename, "vsys", "getvlan", node) + except Exception: + # Probably a duplicate tag. XXX July 21 + pass return True def alloc_nodes(api,hrn, requested_ifs): - requested_nodes = if_endpoints(requested_ifs) - create_slice_max_aggregate(api, hrn, requested_nodes) # Taken from slices.py def create_slice_max_aggregate(api, hrn, nodes): - # Get the slice record from geni + # Get the slice record from SFA global topology topology = get_interface_map() slice = {} @@ -243,7 +248,7 @@ def create_slice_max_aggregate(api, hrn, nodes): return 1 -def get_rspec(api, hrn): +def ListResources(api, hrn): # Eg. config line: # plc.princeton.sapan vlan23,vlan45 @@ -251,18 +256,18 @@ def get_rspec(api, hrn): if (hrn and allocations.has_key(hrn)): ret_rspec = allocations_to_rspec(allocations[hrn]) else: - ret_rspec = open(SFA_MAX_DEFAULT_RSPEC).read() + ret_rspec = open(SFA_MAX_CANNED_RSPEC).read() return (ret_rspec) -def create_slice(api, hrn, rspec_xml): +def CreateSliver(api, hrn, rspec_xml): global topology topology = get_interface_map() # Check if everything in rspec is either allocated by hrn # or not allocated at all. - r = Rspec() + r = RSpec() r.parseString(rspec_xml) rspec = r.toDict() @@ -283,9 +288,9 @@ def create_slice(api, hrn, rspec_xml): for a in requested_interfaces: if (a not in current_hrn_interfaces and a in current_interfaces): - raise GeniOutOfResource(a) + raise SfaOutOfResource(a) if (topology[a][1] not in requested_interfaces): - raise GeniNoPairRspec(a,topology[a][1]) + raise SfaNoPairRSpec(a,topology[a][1]) # Request OK # Allocations to delete @@ -311,16 +316,16 @@ def rspec_to_allocations(rspec): for l in ifspecs: ifs.extend([(l['name'].replace('tns:',''),l['ip'])]) except KeyError: - # Bad Rspec + # Bad RSpec pass return ifs def main(): t = get_interface_map() - r = Rspec() + r = RSpec() rspec_xml = open(sys.argv[1]).read() - #get_rspec(None,'foo') - create_slice(None, "foo", rspec_xml) + #ListResources(None,'foo') + CreateSliver(None, "plc.princeton.sap0", rspec_xml) if __name__ == "__main__": main()