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 from sfa.trust.credential import Credential
6 from sfa.util.record import *
8 from sfa.plc.slices import *
9 from sfa.util.sfalogging import *
10 from sfa.util.record import SfaRecord
11 from StringIO import StringIO
12 from time import mktime
14 from lxml import etree
18 version['geni_api'] = 1
19 version['geni_stitching'] = False
23 def ListResources(api, creds, options):
24 manager_base = 'sfa.managers'
26 manager_module = manager_base + ".aggregate_manager_%s" % mgr_type
27 manager = __import__(manager_module, fromlist=[manager_base])
30 if options.has_key('geni_slice_urn'):
31 xrn = options['geni_slice_urn']
35 rspec = manager.get_rspec(api, xrn, None)
38 # Filter out those objects that aren't allocated
40 tree = etree.parse(StringIO(rspec))
41 used_nodes = [sliver.getparent() for sliver in tree.iterfind("./network/site/node/sliver")]
42 used_sites = [node.getparent() for node in used_nodes]
43 for node in tree.iterfind("./network/site/node"):
44 if node not in used_nodes:
45 parent = node.getparent()
49 for site in tree.iterfind("./network/site"):
50 if site not in used_sites:
51 parent = site.getparent()
53 rspec = etree.tostring(tree)
58 def CreateSliver(api, slice_xrn, creds, rspec, users):
59 hrn, type = urn_to_hrn(slice_xrn)
61 hrn_auth = get_authority(hrn)
63 # Build up objects that an SFA registry would return if SFA
64 # could contact the slice's registry directly
72 site['name'] = 'geni.%s' % hrn_auth
73 site['enabled'] = True
74 site['max_slices'] = 100
77 # Is it okay if this login base is the same as one already at this myplc site?
78 # Do we need uniqueness? Should use hrn_auth instead of just the leaf perhaps?
79 site['login_base'] = get_leaf(hrn_auth)
80 site['abbreviated_name'] = hrn
81 site['max_slivers'] = 1000
82 reg_objects['site'] = site
85 slice['expires'] = int(mktime(Credential(string=creds[0]).get_lifetime().timetuple()))
87 slice['name'] = site['login_base'] + "_" + get_leaf(hrn)
89 slice['description'] = hrn
91 reg_objects['slice_record'] = slice
93 reg_objects['users'] = {}
97 user['email'] = user['email'] + "@geni.net"
99 user['email'] = user['urn'] + "@geni.net"
100 user['first_name'] = user['urn']
101 user['last_name'] = user['urn']
102 reg_objects['users'][user['email']] = user
105 manager_base = 'sfa.managers'
107 manager_module = manager_base + ".aggregate_manager_%s" % mgr_type
108 manager = __import__(manager_module, fromlist=[manager_base])
110 allocated = manager.create_slice(api, slice_xrn, rspec, reg_objects)
114 def DeleteSliver(api, slice_xrn, creds):
115 manager_base = 'sfa.managers'
117 manager_module = manager_base + ".aggregate_manager_%s" % mgr_type
118 manager = __import__(manager_module, fromlist=[manager_base])
120 allocated = manager.delete_slice(api, slice_xrn)
123 def SliverStatus(api, slice_xrn, creds):
125 result['geni_urn'] = slice_xrn
126 result['geni_status'] = 'unknown'
127 result['geni_resources'] = {}
130 def RenewSliver(api, slice_xrn, creds, renew_time):
133 def Shutdown(api, slice_xrn, creds):