import sfa.util.xmlrpcprotocol as xmlrpcprotocol
from sfa.util.debug import log
import sfa.plc.peers as peers
+from copy import copy
def get_version():
version = {}
version['geni_api'] = 1
+ version['sfa'] = 1
return version
def slice_status(api, slice_xrn, creds ):
cred = api.getCredential()
threads = ThreadManager()
for aggregate in api.aggregates:
- if aggregate not in [api.auth.client_cred.get_gid_caller().get_hrn()]:
- server = api.aggregates[aggregate]
- # Just send entire RSpec to each aggregate
- threads.run(server.CreateSliver, xrn, cred, rspec, users)
+ # Just send entire RSpec to each aggregate
+ server = api.aggregates[aggregate]
+ threads.run(server.CreateSliver, xrn, cred, rspec, users)
results = threads.get_results()
merged_rspec = merge_rspecs(results)
net_urn = hrn_to_urn(aggregate, 'authority')
# we may have a peer that knows about this aggregate
for agg in api.aggregates:
- agg_info = api.aggregates[agg].get_aggregates(credential, net_urn)
- if agg_info:
- # send the request to this address
- url = 'http://%s:%s' % (agg_info['addr'], agg_info['port'])
- server = xmlrpcprotocol.get_server(url, api.key_file, api.cert_file)
- break
+ target_aggs = api.aggregates[agg].get_aggregates(credential, net_urn)
+ if not target_aggs or not 'hrn' in target_aggs[0]:
+ continue
+ # send the request to this address
+ url = target_aggs[0]['url']
+ server = xmlrpcprotocol.get_server(url, api.key_file, api.cert_file)
+ # aggregate found, no need to keep looping
+ break
if server is None:
continue
threads.run(server.GetTicket, xrn, credential, aggregate_rspec, users)
threads = ThreadManager()
for aggregate in api.aggregates:
- if aggregate not in [api.auth.client_cred.get_gid_caller().get_hrn()]:
- # get the rspec from the aggregate
- server = api.aggregates[aggregate]
- threads.run(server.ListResources, cred, options)
- #threads.run(server.get_resources, cred, xrn, origin_hrn)
+ # get the rspec from the aggregate
+ server = api.aggregates[aggregate]
+ my_opts = copy(options)
+ my_opts['geni_compressed'] = False
+ threads.run(server.ListResources, cred, my_opts)
+ #threads.run(server.get_resources, cred, xrn, origin_hrn)
-
results = threads.get_results()
# combine the rspecs into a single rspec
for agg_rspec in results: