"""
Hook called via 'sfi.py create'
"""
-def create_slice(api, xrn, creds, xml, users):
+def create_slice(api, xrn, creds, xml, users, call_id):
+ if Callids().already_handled(call_id): return False
+
global cloud
hrn = urn_to_hrn(xrn)[0]
#theRSpec = None
#with open(sys.argv[1]) as xml:
# theRSpec = xml.read()
- #create_slice(None, 'planetcloud.pc.test', theRSpec)
+ #create_slice(None, 'planetcloud.pc.test', theRSpec, 'call-id-cloudtest')
#rspec = get_rspec('euca', 'planetcloud.pc.test', 'planetcloud.pc.marcoy', 'test_euca')
#print rspec
return (ret_rspec)
-def create_slice(api, xrn, creds, rspec_xml, users):
+def create_slice(api, xrn, creds, rspec_xml, users, call_id):
+ if Callids().already_handled(call_id): return False
+
global topology
hrn = urn_to_hrn(xrn)[0]
topology = get_interface_map()
r = RSpec()
rspec_xml = open(sys.argv[1]).read()
#get_rspec(None,'foo')
- create_slice(None, "plc.princeton.sap0", rspec_xml)
+ create_slice(None, "plc.princeton.sap0", rspec_xml, 'call-id-sap0')
if __name__ == "__main__":
main()
if DEBUG: print "Received reset_slices call"
return msg_aggrMgr(SFA_RESET_SLICES)
-def create_slice(cred, xrn, rspec):
+def create_slice(cred, xrn, rspec, call_id):
+ if Callids().already_handled(call_id): return False
+
hrn = urn_to_hrn(xrn)[0]
if DEBUG: print "Received create_slice call"
slice_id = generate_slide_id(cred, hrn)
r = RSpec()
r.parseFile(sys.argv[1])
rspec = r.toDict()
- create_slice(None,'plc',rspec)
+ create_slice(None,'plc',rspec,'call-id-plc')
if __name__ == "__main__":
main()
# XX remove me
return result
-def create_slice(api, slice_xrn, creds, rspec, users):
+def create_slice(api, slice_xrn, creds, rspec, users, call_id):
"""
Create the sliver[s] (slice) at this aggregate.
Verify HRN and initialize the slice record in PLC if necessary.
"""
+ if Callids().already_handled(call_id): return False
reg_objects = __get_registry_objects(slice_xrn, creds, users)
f = open(sys.argv[1])
xml = f.read()
f.close()
- create_slice(api, "plc.princeton.sapan", xml)
+ create_slice(api, "plc.princeton.sapan", xml, 'create_slice_sapan')
if __name__ == "__main__":
main()
api.plshell.DeleteSliceFromNodes(api.plauth, slicename, slice['node_ids'])
return 1
-def create_slice(api, xrn, creds, xml, users):
+def create_slice(api, xrn, creds, xml, users, call_id):
"""
Verify HRN and initialize the slice record in PLC if necessary.
"""
+ if Callids().already_handled(call_id): return False
+
hrn, type = urn_to_hrn(xrn)
peer = None
reg_objects = __get_registry_objects(xrn, creds, users)
f = open(sys.argv[1])
xml = f.read()
f.close()
- create_slice(api, "plc.princeton.iias", xml)
+ create_slice(api, "plc.princeton.iias", xml, 'call-id-iias')
if __name__ == "__main__":
main()
sm_version['peers'][api.hrn]=local_am_url.replace('localhost',sm_version['hostname'])
return sm_version
-def create_slice(api, xrn, creds, rspec, users):
+def create_slice(api, xrn, creds, rspec, users, call_id):
+
+ if Callids().already_handled(call_id): return ""
+
hrn, type = urn_to_hrn(xrn)
# Validate the RSpec against PlanetLab's schema --disabled for now
# Just send entire RSpec to each aggregate
server = api.aggregates[aggregate]
- threads.run(server.CreateSliver, xrn, credential, rspec, users)
+ threads.run(server.CreateSliver, xrn, credential, rspec, users, call_id)
results = threads.get_results()
merged_rspec = merge_rspecs(results)
r = RSpec()
r.parseFile(sys.argv[1])
rspec = r.toDict()
- create_slice(None,'plc.princeton.tmacktestslice',rspec)
+ create_slice(None,'plc.princeton.tmacktestslice',rspec,'create-slice-tmacktestslice')
if __name__ == "__main__":
main()
Mixed(Parameter(str, "Credential string"),
Parameter(type([str]), "List of credentials")),
Parameter(str, "RSpec"),
- Parameter(type([]), "List of user information")
+ Parameter(type([]), "List of user information"),
+ Parameter(str, "call_id"),
]
returns = Parameter(str, "Allocated RSpec")
- def call(self, slice_xrn, creds, rspec, users):
+ def call(self, slice_xrn, creds, rspec, users, call_id=""):
hrn, type = urn_to_hrn(slice_xrn)
self.api.logger.info("interface: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, hrn, self.name))
chain_name = 'INCOMING'
elif self.api.interface in ['slicemgr']:
chain_name = 'FORWARD-INCOMING'
+ self.api.logger.debug("CreateSliver: sfatables on chain %s"%chain_name)
rspec = run_sfatables(chain_name, hrn, origin_hrn, rspec)
- allocated = manager.create_slice(self.api, slice_xrn, creds, rspec, users)
-
- return rspec
+ # the aggregate's create_slice returns false if call_id was already handled
+ if manager.create_slice(self.api, slice_xrn, creds, rspec, users, call_id):
+ return rspec
+ else:
+ return ""