import sys
from optparse import OptionParser
-from PLC.Namespace import hostname_to_hrn, email_to_hrn
+from PLC.Namespace import hostname_to_hrn, email_to_hrn, slicename_to_hrn
# (auth_hrn, email):
toplevel=api.config.PLC_HRN_ROOT
if dry_run: continue
SetPersonHrn (person['person_id'],hrn)
else:
- if verbose: print "host %s OK"%person['email']
+ if verbose: print "Person %s OK"%person['email']
+
+
+def handle_slices (sites,sites_by_id, dry_run,verbose):
+ slices=GetSlices ({'peer_id':None},['slice_id','name','hrn','site_id'])
+ for slice in slices:
+ try: login_base=sites_by_id[slice['site_id']]['login_base']
+ except: print "Cannot handle slice %s - site not found"%slice['name']; continue
+ hrn=slicename_to_hrn (toplevel, slice['name'])
+ if slice['hrn'] != hrn:
+ print "Slice %s - current hrn %s, should be %s"%(slice['name'], slice['hrn'], hrn)
+ if dry_run: continue
+ SetSliceHrn (slice['slice_id'],hrn)
+ else:
+ if verbose: print "Slice %s OK"%slice['name']
+
+
+def handle_sites (sites,sites_by_id, dry_run,verbose):
+ for site in sites:
+ hrn='.'.join([toplevel, site['login_base']])
+ if site['hrn'] != hrn:
+ print "Site %s - current hrn %s, should be %s"%(site['name'], site['hrn'], hrn)
+ if dry_run: continue
+ SetSiteHrn (site['site_id'],hrn)
+ else:
+ if verbose: print "Site %s OK"%site['name']
+
def main():
usage="""Usage: %prog
dest='persons',help="run on persons")
parser.add_option("-n", "--node", action = "store_true", default = False,
dest='nodes',help="run on nodes")
+ parser.add_option("-S", "--slice", action = "store_true", default = False,
+ dest='slices',help="run on slices")
+ parser.add_option("-t", "--site", action = "store_true", default = False,
+ dest='sites',help="run on sites")
parser.add_option("-s", "--show", action = "store_true", default = False,
dest='show', help="dry run, only show discrepencies")
parser.add_option("-v", "--verbose", action = "store_true", default = False,
parser.print_help()
sys.exit(1)
# if neither -p nor -n, run both
- if not options.nodes and not options.persons:
+ if not options.nodes and not options.persons and not options.slices and not options.sites:
options.nodes=True
options.persons=True
-
+ options.slices=True
+ options.sites=True
+
dry_run=options.show
verbose=options.verbose
# optimizing : we compute the set of sites only once
- sites = GetSites({'peer_id':None},['site_id','login_base','node_ids','person_ids'])
+ sites = GetSites({'peer_id':None},['site_id','login_base','node_ids','person_ids','name','hrn'])
+ # remove external sites created through SFA
+ sites = [site for site in sites if not site['name'].startswith('sfa.')]
+
sites_by_id = dict ( [ (site['site_id'], site) for site in sites ] )
if options.nodes: handle_nodes(sites,sites_by_id,dry_run,verbose)
if options.persons: handle_persons(sites,sites_by_id,dry_run,verbose)
+ if options.slices: handle_slices(sites,sites_by_id,dry_run,verbose)
+ if options.sites: handle_sites(sites,sites_by_id,dry_run,verbose)
if __name__ == "__main__":
main()