This is an automated email from the ASF dual-hosted git repository. dmeden pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push: new 7a572a6815 Make sure we let the user know we are about to perform an invalid (#9378) 7a572a6815 is described below commit 7a572a6815b78aa99efda58736dd604f8e85af38 Author: Damian Meden <dme...@apache.org> AuthorDate: Fri Feb 3 17:44:23 2023 +0000 Make sure we let the user know we are about to perform an invalid (#9378) The convert2yaml script now shows a friendly message before failing. Also make the traceback output optional, add (-e) option. --- .../records/legacy_config/override_map.config | 3 +++ .../records/legacy_config/override_value.config | 4 ++++ .../records/records_config_to_yaml.test.py | 17 +++++++++++++++++ tools/records/convert2yaml.py | 21 ++++++++++++++++----- 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/tests/gold_tests/records/legacy_config/override_map.config b/tests/gold_tests/records/legacy_config/override_map.config new file mode 100644 index 0000000000..4a3b79ba99 --- /dev/null +++ b/tests/gold_tests/records/legacy_config/override_map.config @@ -0,0 +1,3 @@ +CONFIG proxy.config.ssl.client.verify.server.policy STRING DISABLED +CONFIG proxy.config.ssl.client.verify.server.properties STRING ALL +CONFIG proxy.config.ssl.client.verify.server INT 1 diff --git a/tests/gold_tests/records/legacy_config/override_value.config b/tests/gold_tests/records/legacy_config/override_value.config new file mode 100644 index 0000000000..092f475dd1 --- /dev/null +++ b/tests/gold_tests/records/legacy_config/override_value.config @@ -0,0 +1,4 @@ + +CONFIG proxy.config.ssl.client.verify.server INT 1 +CONFIG proxy.config.ssl.client.verify.server.policy STRING DISABLED +CONFIG proxy.config.ssl.client.verify.server.properties STRING ALL diff --git a/tests/gold_tests/records/records_config_to_yaml.test.py b/tests/gold_tests/records/records_config_to_yaml.test.py index 7b160eb218..264e0ea504 100644 --- a/tests/gold_tests/records/records_config_to_yaml.test.py +++ b/tests/gold_tests/records/records_config_to_yaml.test.py @@ -41,3 +41,20 @@ tr.Processes.Default.Command = f'python3 convert2yaml.py -f old_records.config - tr.Processes.Default.Stream = 'gold/renamed_records.out' f = tr.Disk.File(f"generated{file_suffix}.yaml") f.Content = "gold/renamed_records.yaml" + + +tr = Test.AddTestRun("Test errors when trying to override values ") +tr.Setup.Copy(os.path.join(Test.Variables.BuildRoot, "tools/records/convert2yaml.py")) +tr.Setup.Copy('legacy_config/override_value.config') +tr.Processes.Default.Command = f'python3 convert2yaml.py -f override_value.config --save2 generated{file_suffix}.yaml --yaml -m' +tr.Processes.Default.Streams.stdout += Testers.ContainsExpression( + "We cannot continue with 'proxy.config.ssl.client.verify.server.policy' at line '3' as a value node will be overridden", + "Error should be present") + +tr = Test.AddTestRun("Test errors when trying to override maps") +tr.Setup.Copy(os.path.join(Test.Variables.BuildRoot, "tools/records/convert2yaml.py")) +tr.Setup.Copy('legacy_config/override_map.config') +tr.Processes.Default.Command = f'python3 convert2yaml.py -f override_map.config --save2 generated{file_suffix}.yaml --yaml -m' +tr.Processes.Default.Streams.stdout += Testers.ContainsExpression( + "We cannot continue with 'proxy.config.ssl.client.verify.server' at line '3' as an existing YAML map will be overridden.", + "Error should be present") diff --git a/tools/records/convert2yaml.py b/tools/records/convert2yaml.py index fbf1ebf559..8407e27a11 100644 --- a/tools/records/convert2yaml.py +++ b/tools/records/convert2yaml.py @@ -190,17 +190,25 @@ def get_value(type, value): return None -def add_object(config, var, value, type=None): +def add_object(config, var, value, type, track_info): key = '' index = var.find('.') if index < 0: # last part + if isinstance(config, dict) == False: + line, rec = track_info + raise Exception( + f"We cannot continue with '{rec}' at line '{line}' as a value node will be overridden.\nPlease check your config.") + elif var in config and isinstance(config[var], dict): + line, rec = track_info + raise Exception( + f"We cannot continue with '{rec}' at line '{line}' as an existing YAML map will be overridden.\nPlease check your config.") config[var] = get_value(type, value) else: key = var[:index] if key not in config: config[key] = {} - add_object(config[key], var[index + 1:], value, type=type) + add_object(config[key], var[index + 1:], value, type, track_info) def fix_record_names(file): @@ -247,6 +255,7 @@ def handle_file_input(args): type = s[2] value = s[3] + track_info = (idx + 1, name) # in case we want to show any error. rec name is always handy. # We ignore the prefix and work away from there. if name.startswith("proxy.config."): name = name[len("proxy.config."):] @@ -256,7 +265,7 @@ def handle_file_input(args): name = name[len("proxy."):] # Build the object - add_object(config, name, value[:-1], type) + add_object(config, name, value[:-1], type, track_info) idx = idx + 1 ts = {} @@ -286,6 +295,7 @@ if __name__ == '__main__': help="Be quiet, do not output anything, except for errors", required=False, action='store_true') + parser.add_argument('-e', '--error', help="Show traceback", required=False, action='store_true', default=False) kk = parser.add_mutually_exclusive_group(required=True) kk.add_argument('-j', '--json', help="Output as json", action='store_true') kk.add_argument('-y', '--yaml', help="Output as yaml", action='store_true') @@ -302,9 +312,10 @@ if __name__ == '__main__': print_summary() except Exception as e: - print("Something went wrong: {}".format(e)) + print("Something went wrong:\n{}".format(e)) - print(traceback.format_exc()) + if args.error: + print(f"\n{traceback.format_exc()}") sys.exit(1) sys.exit(0)