[sonic-cfggen] Allow cfggen to work on system without ports (#7999)

#### Why I did it
Allow cfggen to work on system without ports in platform.json or in port_config.ini

#### How I did it
Add json write of PORT section only if the dictionary that contains the ports is not empty.  

#### How to verify it
sonic-cfggen -k ACS-MSN3700 -H -j /etc/sonic/init_cfg.json --print-data
This commit is contained in:
Lior Avramov 2021-08-23 13:28:59 +03:00 committed by GitHub
parent 26c6e7f68f
commit f5ec889f59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 5 deletions

View File

@ -261,9 +261,9 @@ def parse_platform_json_file(hwsku_json_file, platform_json_file):
port_dict = readJson(platform_json_file)
hwsku_dict = readJson(hwsku_json_file)
if not port_dict:
if port_dict is None:
raise Exception("port_dict is none")
if not hwsku_dict:
if hwsku_dict is None:
raise Exception("hwsku_dict is none")
if INTF_KEY not in port_dict or INTF_KEY not in hwsku_dict:
@ -285,8 +285,8 @@ def parse_platform_json_file(hwsku_json_file, platform_json_file):
ports.update(child_ports)
if not ports:
raise Exception("Ports dictionary is empty")
if ports is None:
raise Exception("Ports dictionary is None")
for i in ports.keys():
port_alias_map[ports[i]["alias"]]= i

View File

@ -304,7 +304,7 @@ def main():
if args.port_config is None:
args.port_config = device_info.get_path_to_port_config_file(hwsku)
(ports, _, _) = get_port_config(hwsku, platform, args.port_config, asic_id)
if not ports:
if ports is None:
print('Failed to get port config', file=sys.stderr)
sys.exit(1)
deep_update(data, {'PORT': ports})

View File

@ -2,11 +2,17 @@ import ast
import json
import os
import subprocess
import sys
import tests.common_utils as utils
from unittest import TestCase
from portconfig import get_port_config, INTF_KEY
if sys.version_info.major == 3:
from unittest import mock
else:
import mock
# Global Variable
PLATFORM_OUTPUT_FILE = "platform_output.json"
@ -85,3 +91,10 @@ class TestCfgGenPlatformJson(TestCase):
output_dict = ast.literal_eval(output.strip())
expected = ast.literal_eval(json.dumps(fh_data))
self.assertDictEqual(output_dict, expected)
@mock.patch('portconfig.readJson', mock.MagicMock(return_value={INTF_KEY:{}}))
@mock.patch('os.path.isfile', mock.MagicMock(return_value=True))
def test_platform_json_no_interfaces(self):
(ports, _, _) = get_port_config(port_config_file=self.platform_json)
self.assertNotEqual(ports, None)
self.assertEqual(ports, {})