#!/usr/bin/env /usr/bin/plcsh # # Bootstraps the PLC database with a default administrator account and # a default site, defines default slice attribute types, and # creates/updates default system slices. # scan ordered scripts in /etc/planetlab/db-config.d # # Mark Huang # Copyright (C) 2006 The Trustees of Princeton University # Thierry Parmentelat # import os,sys from optparse import OptionParser from plc_config import PLCConfiguration def GetSnippets(directory): filenames = [] if os.path.exists(directory): try: filenames = os.listdir(directory) except OSError, e: raise Exception, "Error when opening %s (%s)" % \ (os.path.join(dir, file), e) # ignore files that contain either ~ or . ignore_tokens = ("~",".") numberedfiles = {} for filename in filenames: ignore = False for token in ignore_tokens: if filename.find(token)>=0: ignore = True break if not ignore: parts = filename.split('-') if len(parts)>=2: name = '-'.join(parts) try: number = int(parts[0]) entry = numberedfiles.get(number,[]) entry.append(name) numberedfiles[number]=entry except ValueError: ignore = True else: ignore = True if ignore: print "db-config: ignored %s snippet" % filename filenames = [] keys = numberedfiles.keys() keys.sort() for k in keys: for filename in numberedfiles[k]: filenames.append(filename) return filenames def main(): cfg = PLCConfiguration() cfg.load() variables = cfg.variables() usage="%prog [-- options] [steps]" parser = OptionParser(usage=usage ) parser.add_option("-l","--list",dest="list_steps",action="store_true",default=False, help="Lists available steps") parser.add_option("-v","--verbose",dest="verbose",action="store_true",default=False, help="Run verbosely") (options,steps) = parser.parse_args() # Load variables into dictionaries for category_id, (category, variablelist) in variables.iteritems(): globals()[category_id] = dict(zip(variablelist.keys(), [variable['value'] for variable in variablelist.values()])) directory="/etc/planetlab/db-config.d" snippets = GetSnippets(directory) for snippet in snippets: selected=False # no steps provided on the command-line : run them all if not steps: selected=True else: for step in steps: if snippet.find (step)>=0 : selected=True if not selected: continue if options.list_steps: if not options.verbose: print snippet else: print "Found step %s/%s"%(directory,snippet) os.system("rpm -qf %s/%s"%(directory,snippet)) continue fullpath = os.path.join(directory, snippet) if options.verbose: print "Running step %s"%fullpath execfile(fullpath) if __name__ == '__main__': main() # Local variables: # tab-width: 4 # mode: python # End: