from sfa.util.rspec import *
from sfa.util.sfaticket import *
from sfa.util.debug import log
-from sfa.server.registry import Registries
-from sfa.server.aggregate import Aggregates
import sfa.plc.peers as peers
def delete_slice(api, xrn, origin_hrn=None):
credential = api.getCredential()
- aggregates = Aggregates(api)
+ aggregates = api.aggregates
for aggregate in aggregates:
success = False
# request hash is optional so lets try the call without it
def create_slice(api, xrn, rspec, origin_hrn=None):
hrn, type = urn_to_hrn(xrn)
- aggs = Aggregates(api)
- cred = api.getCredential()
- # Validate the RSpec here against PlanetLab's schema
-
- aggs = Aggregates(api)
+ # Validate the RSpec against PlanetLab's schema --disabled for now
+ # The schema used here needs to aggregate the PL and VINI schemas
+ # schema = "/var/www/html/schemas/pl.rng"
+ schema = None
+ if schema:
+ try:
+ tree = etree.parse(StringIO(rspec))
+ except etree.XMLSyntaxError:
+ message = str(sys.exc_info()[1])
+ raise InvalidRSpec(message)
+
+ relaxng_doc = etree.parse(schema)
+ relaxng = etree.RelaxNG(relaxng_doc)
+
+ if not relaxng(tree):
+ error = relaxng.error_log.last_error
+ message = "%s (line %s)" % (error.message, error.line)
+ raise InvalidRSpec(message)
+
+ aggs = api.aggregates
cred = api.getCredential()
for agg in aggs:
if agg not in [api.auth.client_cred.get_gid_caller().get_hrn()]:
rspecs[net_hrn] = temp_rspec.toxml()
# send the rspec to the appropiate aggregate/sm
- aggregates = Aggregates(api)
+ aggregates = api.aggregates
credential = api.getCredential()
tickets = {}
for net_hrn in rspecs:
hrn, type = urn_to_hrn(xrn)
rspec = None
- aggs = Aggregates(api)
+ aggs = api.aggregates
cred = api.getCredential()
for agg in aggs:
if agg not in [api.auth.client_cred.get_gid_caller().get_hrn()]:
try:
# get the rspec from the aggregate
agg_rspec = aggs[agg].get_resources(cred, xrn, origin_hrn)
-
- tree = etree.parse(StringIO(agg_rspec))
- root = tree.getroot()
- if root.get("type") in ["Planetlab", "VINI"]:
- # Validate the aggregate's RSpec?
-
- if rspec == None:
- rspec = root
- else:
- for network in root.iterfind("./network"):
- rspec.append(deepcopy(network))
except:
# XX print out to some error log
print >> log, "Error getting resources at aggregate %s" % agg
traceback.print_exc(log)
print >> log, "%s" % (traceback.format_exc())
-
+ continue
+
+ try:
+ tree = etree.parse(StringIO(agg_rspec))
+ except etree.XMLSyntaxError:
+ message = agg + ": " + str(sys.exc_info()[1])
+ raise InvalidRSpec(message)
+
+ root = tree.getroot()
+ if root.get("type") in ["SFA"]:
+ if rspec == None:
+ rspec = root
+ else:
+ for network in root.iterfind("./network"):
+ rspec.append(deepcopy(network))
+ for request in root.iterfind("./request"):
+ rspec.append(deepcopy(request))
return etree.tostring(rspec, xml_declaration=True, pretty_print=True)