X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=geni-config-tty;h=c0f0cce22a475ec4fc885eeafc3f7e99c0eb9257;hb=8da5e3e07dc6ecb5eced01c115aad5e380213c97;hp=7ada094576edae3ece09bb39b09888cbce3c3422;hpb=275c476563d1c76357e2bfac9b632d953ad81676;p=sfa.git diff --git a/geni-config-tty b/geni-config-tty index 7ada0945..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,17 +54,65 @@ 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 =\tShows default value -?\tThis help +?\tThis help """ -def save(changes, config_file): +def save_config(changes, config_file): + # always validate before saving + changes = validate(changes) + + cfile = open(config_file, 'r') + lines = cfile.readlines() + newlines = [] + cfile.close() + for line in lines: + added = False + for variable in changes: + if line.startswith(variable): + try: + value = int(changes[variable]) + newline = '%s=%s\n' % (variable, value) + newlines.append(newline) + except: + value = changes[variable] + newline = '%s="%s"\n' % (variable, value) + newlines.append(newline) + added = True + break + if not added: + newlines.append(line) + + cfile = open(config_file, 'w') + cfile.writelines(newlines) + cfile.close() - print "save" +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() @@ -109,7 +156,9 @@ def prompt_variable(variable, default_config): raise Excception ('BailOut') if (answer == "") or (answer == default_value): - return answer + return default_value + elif answer in ['""', "''"]: + return "" elif (answer == "."): raise Exception ('BailOut') elif (answer == "?"): @@ -117,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 = {} @@ -137,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: @@ -155,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) @@ -170,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") @@ -180,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__':