X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fserver%2Fsfa_component_setup.py;h=6d74468ff88e4688e795b99087de2651abd931a8;hb=57b6a99255d4a88be9c0f910f8524677e34ff4bc;hp=3b329a109cb5b438b3f7ce291f086fd2061bd053;hpb=0970667ac6ecdd5e2ef85a740bd5b8a0425d34d8;p=sfa.git diff --git a/sfa/server/sfa_component_setup.py b/sfa/server/sfa_component_setup.py index 3b329a10..6d74468f 100755 --- a/sfa/server/sfa_component_setup.py +++ b/sfa/server/sfa_component_setup.py @@ -3,10 +3,11 @@ import sys import os import tempfile from optparse import OptionParser + +from sfa.util.faults import ConnectionKeyGIDMismatch from sfa.util.config import Config import sfa.util.xmlrpcprotocol as xmlrpcprotocol -from sfa.util.namespace import * -from sfa.util.faults import * +from sfa.util.plxrn import hrn_to_pl_slicename, slicename_to_hrn from sfa.trust.certificate import Keypair, Certificate from sfa.trust.credential import Credential from sfa.trust.gid import GID @@ -15,6 +16,17 @@ from sfa.trust.hierarchy import Hierarchy KEYDIR = "/var/lib/sfa/" CONFDIR = "/etc/sfa/" +def handle_gid_mismatch_exception(f): + def wrapper(*args, **kwds): + try: return f(*args, **kwds) + except ConnectionKeyGIDMismatch: + # clean regen server keypair and try again + print "cleaning keys and trying again" + clean_key_cred() + return f(args, kwds) + + return wrapper + def get_server(url=None, port=None, keyfile=None, certfile=None,verbose=False): """ returns an xmlrpc connection to the service a the specified @@ -135,22 +147,11 @@ def get_credential(registry=None, force=False, verbose=False): registry = get_server(url=registry, keyfile=keyfile, certfile=certfile) cert = Certificate(filename=certfile) cert_str = cert.save_to_string(save_parents=True) - cred = registry.get_self_credential(cert_str, 'node', hrn) + cred = registry.GetSelfCredential(cert_str, 'node', hrn) Credential(string=cred).save_to_file(credfile, save_parents=True) return cred -def handle_gid_mismatch_exception(f): - def wrapper(*args, **kwds): - try: return f(*args, **kwds) - except ConnectionKeyGIDMismatch: - # clean regen server keypair and try again - print "cleaning keys and trying again" - clean_key_cred() - return f(args, kwds) - - return wrapper - @handle_gid_mismatch_exception def get_trusted_certs(registry=None, verbose=False): """ @@ -224,15 +225,28 @@ def get_gids(registry=None, verbose=False): api = ComponentAPI() xids_tuple = api.nodemanager.GetXIDs() slices = eval(xids_tuple[1]) - slicenames = slices.keys() - hrns = [slicename_to_hrn(interface_hrn, slicename) for slicename in slicenames] - + slicenames = slices.keys() + # generate a list of slices that dont have gids installed + slices_without_gids = [] + for slicename in slicenames: + if not os.path.isfile("/vservers/%s/etc/slice.gid" % slicename) \ + or not os.path.isfile("/vservers/%s/etc/node.gid" % slicename): + slices_without_gids.append(slicename) + + # convert slicenames to hrns + hrns = [slicename_to_hrn(interface_hrn, slicename) \ + for slicename in slices_without_gids] + + # exit if there are no gids to install + if not hrns: + return + if verbose: print "Getting gids for slices on this node from registry" # get the gids # and save them in the right palce - records = registry.get_gids(cred, hrns) + records = registry.GetGids(hrns, cred) for record in records: # if this isnt a slice record skip it if not record['type'] == 'slice':