16f6475dba5a2f0bdbc730f77d5197d0b3340fdb
[sfa.git] / sfa / managers / geni_am_pl.py
1 from sfa.util.namespace import *
2 from sfa.util.rspec import *
3 from sfa.util.specdict import *
4 from sfa.util.faults import *
5
6 from sfa.util.record import *
7
8 from sfa.plc.slices import *
9 from sfa.util.sfalogging import *
10 from sfa.util.record import SfaRecord
11 from lxml import etree
12 from StringIO import StringIO
13
14 def GetVersion():
15     version = {}
16     version['geni_api'] = 1
17     version['geni_stitching'] = False
18     return version
19
20
21 def ListResources(api, creds, options):
22     manager_base = 'sfa.managers'
23     mgr_type = 'pl'
24     manager_module = manager_base + ".aggregate_manager_%s" % mgr_type
25     manager = __import__(manager_module, fromlist=[manager_base])
26
27     xrn = None
28     if options.has_key('geni_slice_urn'):
29         xrn = options['geni_slice_urn']
30         api.logger.info(xrn)
31
32
33     rspec = manager.get_rspec(api, xrn, None)
34     
35     
36     # Filter out those objects that aren't allocated
37     if xrn:
38         tree = etree.parse(StringIO(rspec))    
39         used_nodes = [sliver.getparent() for sliver in tree.iterfind("./network/site/node/sliver")]
40         used_sites = [node.getparent() for node in used_nodes]
41         for node in tree.iterfind("./network/site/node"):
42             if node not in used_nodes:
43                 parent = node.getparent()
44                 parent.remove(node)
45         
46         # Remove unused sites
47         for site in tree.iterfind("./network/site"):
48             if site not in used_sites:
49                 parent = site.getparent()
50                 parent.remove(site)
51         rspec = etree.tostring(tree)
52
53     return rspec
54
55
56 def CreateSliver(api, slice_xrn, creds, rspec):
57     reg_objects = {}
58     hrn, type = urn_to_hrn(slice_xrn)
59     
60     hrn_auth = get_authority(hrn)
61     
62     #site = SfaRecord(hrn=hrn_auth, type='authority')
63     site = {}
64     site['site_id'] = 0
65     site['name'] = 'geni.%s' % slice_xrn
66     site['enabled'] = True
67     site['max_slices'] = 100
68     site['login_base'] = get_leaf(hrn_auth)
69     site['abbreviated_name'] = hrn
70     site['max_slivers'] = 1000
71     
72     reg_objects['site'] = site
73     
74     manager_base = 'sfa.managers'
75     mgr_type = 'pl'
76     manager_module = manager_base + ".aggregate_manager_%s" % mgr_type
77     manager = __import__(manager_module, fromlist=[manager_base])
78
79     allocated = manager.create_slice(api, slice_xrn, rspec, reg_objects)
80     
81     return allocated
82
83 def DeleteSliver(api, slice_xrn, creds):
84     manager_base = 'sfa.managers'
85     mgr_type = 'pl'
86     manager_module = manager_base + ".aggregate_manager_%s" % mgr_type
87     manager = __import__(manager_module, fromlist=[manager_base])
88
89     allocated = manager.delete_slice(api, slice_xrn)
90     return allocated
91
92 def SliverStatus(api, slice_xrn, creds):
93     result = {}
94     result['geni_urn'] = slice_xrn
95     result['geni_status'] = 'unknown'
96     result['geni_resources'] = {}
97     return result
98
99 def RenewSliver(api, slice_xrn, creds, renew_time):
100     return False
101
102 def Shutdown(api, slice_xrn, creds):
103     return False
104