From ffd62546439548ee1e80a5de3f9caa801b92915d Mon Sep 17 00:00:00 2001 From: Jingwen Xie Date: Mon, 14 Mar 2022 04:18:43 +0000 Subject: [PATCH 1/4] make minigraph parser fail when port and lanes are not in PORT table --- src/sonic-config-engine/sonic-cfggen | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index bf93ad849fcb..59b158533bdd 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -247,6 +247,19 @@ def _get_jinja2_env(paths): return env +def _must_field_by_yang(data, table, must_fields): + """ + Check if table contians must field based on yang defination + """ + if table not in data: + return + + for must_field in must_fields: + for _, fields in data[table].items(): + if must_field not in fields: + print(must_field, 'is a must field in', table, file=sys.stderr) + sys.exit(1) + def main(): parser=argparse.ArgumentParser(description="Render configuration file from minigraph data and jinja2 template.") group = parser.add_mutually_exclusive_group() From 201a2342871de8fa7627d408d7296ea707472463 Mon Sep 17 00:00:00 2001 From: Jingwen Xie Date: Mon, 14 Mar 2022 04:27:43 +0000 Subject: [PATCH 2/4] add checker --- src/sonic-config-engine/sonic-cfggen | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index 59b158533bdd..4cb53c798e7a 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -348,6 +348,8 @@ def main(): deep_update(data, parse_xml(minigraph, platform, asic_name=asic_name)) else: deep_update(data, parse_xml(minigraph, port_config_file=args.port_config, asic_name=asic_name, hwsku_config_file=args.hwsku_config)) + # check if minigraph parser has speed and lanes in PORT table + _must_field_by_yang(data, 'PORT', ['speed', 'lanes']): if args.device_description is not None: deep_update(data, parse_device_desc_xml(args.device_description)) From 86e1ddb6b6e5abae70b4dfb26842c9652decc2e9 Mon Sep 17 00:00:00 2001 From: Jingwen Xie Date: Mon, 14 Mar 2022 04:35:19 +0000 Subject: [PATCH 3/4] typo --- src/sonic-config-engine/sonic-cfggen | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index 4cb53c798e7a..106caf577c6d 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -249,7 +249,7 @@ def _get_jinja2_env(paths): def _must_field_by_yang(data, table, must_fields): """ - Check if table contians must field based on yang defination + Check if table contains must field based on yang definition """ if table not in data: return From 30a74e28ccfadbcc5531ee7f32a32a6322d47809 Mon Sep 17 00:00:00 2001 From: Jingwen Xie Date: Tue, 15 Mar 2022 02:20:48 +0000 Subject: [PATCH 4/4] syntax --- src/sonic-config-engine/sonic-cfggen | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index 106caf577c6d..aebd4d0544f5 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -349,7 +349,7 @@ def main(): else: deep_update(data, parse_xml(minigraph, port_config_file=args.port_config, asic_name=asic_name, hwsku_config_file=args.hwsku_config)) # check if minigraph parser has speed and lanes in PORT table - _must_field_by_yang(data, 'PORT', ['speed', 'lanes']): + _must_field_by_yang(data, 'PORT', ['speed', 'lanes']) if args.device_description is not None: deep_update(data, parse_device_desc_xml(args.device_description))