From: Tony Mack Date: Thu, 7 May 2009 01:04:31 +0000 (+0000) Subject: added validate(), implemented showall and show local options X-Git-Tag: sfa-0.9-0@14641~399 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=5a1c0f86496913b7ef4f7ad602868d64528d064b;p=sfa.git added validate(), implemented showall and show local options --- diff --git a/geni-config-tty b/geni-config-tty index 630386ec..c0f0cce2 100755 --- a/geni-config-tty +++ b/geni-config-tty @@ -40,14 +40,13 @@ usual_variables = ["GENI_REGISTRY_ROOT_AUTH", mainloop_usage= """Available commands: - Uppercase versions give variables comments, when available u/U\t\t\tEdit usual variables w/W\t\t\tWrite / Write & reload q\t\t\tQuit (without saving) h/?\t\t\tThis help --- l/L []\tShow Locally modified variables/values - s/S []\tShow variables/values (all, in category, single) + s/S []\tShow all current variables/values e/E []\tEdit variables (all, in category, single) --- """ @@ -55,7 +54,7 @@ mainloop_usage= """Available commands: command_usage="%prog [options]" command_usage += """ Unless you specify the -d option, meaning you want to configure - myplc-devel instead of regular myplc, in which case""" + using defaults without interactive prompts""" variable_usage= """Edit Commands : .\tStops prompting, return to mainloop @@ -63,8 +62,10 @@ variable_usage= """Edit Commands : ?\tThis help """ -def save(changes, config_file): - from pprint import pprint +def save_config(changes, config_file): + # always validate before saving + changes = validate(changes) + cfile = open(config_file, 'r') lines = cfile.readlines() newlines = [] @@ -76,12 +77,10 @@ def save(changes, config_file): try: value = int(changes[variable]) newline = '%s=%s\n' % (variable, value) - print "adding ", newline newlines.append(newline) except: value = changes[variable] newline = '%s="%s"\n' % (variable, value) - print "adding ", newline newlines.append(newline) added = True break @@ -92,6 +91,29 @@ def save(changes, config_file): cfile.writelines(newlines) cfile.close() +def validate(changes): + defaults = get_defaults() + + if not changes: + return + + # GENI_INTERFACE_HRN is generated by combining GENI_REGISTRY_ROOT_AUTH and + # GENI_REGISTRY_LEVEL1_AUTH, so if either of these are present we must + # update GENI_INTERFACE_HRN + if 'GENI_REGISTRY_ROOT_AUTH' in changes: + root_auth = changes['GENI_REGISTRY_ROOT_AUTH'] + else: + root_auth = defaults['GENI_REGISTRY_ROOT_AUTH'] + + if 'GENI_REGISTRY_LEVEL1_AUTH' in changes: + level1_auth = changes['GENI_REGISTRY_LEVEL1_AUTH'] + else: + level1_auth = default['GENI_REGISTRY_LEVEL1_AUTH'] + + interface_hrn = ".".join([root_auth, level1_auth]) + changes['GENI_INTERFACE_HRN'] = interface_hrn + return changes + def get_defaults(): geni_config = Config() plc_vars = {'PLC_API_MAINTENANCE_PASSWORD': 'GENI_PLC_PASSWORD', @@ -135,6 +157,8 @@ def prompt_variable(variable, default_config): if (answer == "") or (answer == default_value): return default_value + elif answer in ['""', "''"]: + return "" elif (answer == "."): raise Exception ('BailOut') elif (answer == "?"): @@ -142,7 +166,10 @@ def prompt_variable(variable, default_config): elif (answer == "="): print ("%s defaults to %s" %(variable,default_value)) else: - return answer + return answer + +def show_variable(variable, value_dict): + print "%s=%s" % (variable, value_dict[variable]) def mainloop (default_config, config_file): changes = {} @@ -162,10 +189,9 @@ def mainloop (default_config, config_file): print "help" if (answer in ["q","Q"]): - # todo check confirmation return elif (answer == "w"): - save(changes, config_file) + save_config(changes, config_file) elif (answer == "u"): try: for varname in usual_variables: @@ -180,9 +206,15 @@ def mainloop (default_config, config_file): except Exception, inst: if (str(inst) != 'BailOut'): raise - elif (answer in "vVsSlL"): - pass - #show_variable (c1,c2,c3,category,variable,show_value,show_comments) + elif (answer in "sS"): + for varname in usual_variables: + show_variable (varname, default_config) + elif (answer in "lL"): + if not changes: + print "No changes to display" + else: + for varname in changes: + show_variable(varname, changes) else: print ("Unknown command >%s< -- use h for help" % answer) @@ -195,9 +227,9 @@ def main (): parser = OptionParser(usage=command_usage, version="%prog 1.0") parser.set_defaults(config_dir="/etc/geni", usual_variables=[]) - parser.add_option("","--configdir",dest="config_dir",help="specify configuration directory") + parser.add_option("","--configdir",dest="config_dir",action="append", help="specify configuration directory") parser.add_option("","--usual_variable",dest="usual_variables",action="append", help="add a usual variable") - + parser.add_option("-d", "--default", action="count", help="dont prompt for values, just use defaults") (config,args) = parser.parse_args() if len(args)>3: parser.error("too many arguments") @@ -205,7 +237,11 @@ def main (): config_dir = parser.values.config_dir config_file = os.sep.join([config_dir, 'geni_config']) defaults = get_defaults() - mainloop (defaults, config_file) + # if -d is specified dont prompt, just configure with defaults + if '-d' in argv: + save_config(defaults, config_file) + else: + mainloop (defaults, config_file) return 0 if __name__ == '__main__':