Skip to content

Commit

Permalink
[sonic-cfggen] make minigraph parser fail when speed and lanes are no…
Browse files Browse the repository at this point in the history
…t in PORT table (#10228)

Why I did it
Config db schema generated by minigraph can’t pass yang validation, PORT table does not have 'lanes' and 'speed' field.

How I did it
Make cfggen command fail when 'lanes' and 'speed' are not provided

How to verify it
Run 'sonic-cfggen -m xxx.xml --print-data' to make sure command fail when 'lanes' and 'speed' not in PORT table
  • Loading branch information
wen587 authored Apr 11, 2022
1 parent 011c21d commit cd330f0
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/sonic-config-engine/sonic-cfggen
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,19 @@ def _get_jinja2_env(paths):

return env

def _must_field_by_yang(data, table, must_fields):
"""
Check if table contains must field based on yang definition
"""
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()
Expand Down Expand Up @@ -335,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))
Expand Down

0 comments on commit cd330f0

Please sign in to comment.