Skip to content

Commit 05cb10f

Browse files
Change get_config_json implementation
1 parent c4d20c6 commit 05cb10f

File tree

2 files changed

+45
-15
lines changed

2 files changed

+45
-15
lines changed

generic_config_updater/generic_updater.py

+20-11
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,27 @@ def get_cmd_output(cmd):
4242

4343

4444
def get_config_json():
45-
command = ["show", "runningconfiguration", "all"]
46-
all_running_config_text, returncode = get_cmd_output(command)
47-
if returncode:
48-
raise GenericConfigUpdaterError(
49-
f"Fetch all runningconfiguration failed as output:{all_running_config_text}")
50-
all_running_config = json.loads(all_running_config_text)
51-
45+
scope_list = [multi_asic.DEFAULT_NAMESPACE]
46+
all_running_config = {}
5247
if multi_asic.is_multi_asic():
53-
for asic in [HOST_NAMESPACE, *multi_asic.get_namespace_list()]:
54-
all_running_config[asic].pop("bgpraw", None)
55-
else:
56-
all_running_config.pop("bgpraw", None)
48+
scope_list.extend(multi_asic.get_namespace_list())
49+
for scope in scope_list:
50+
command = ["sonic-cfggen", "-d", "--print-data"]
51+
if scope != multi_asic.DEFAULT_NAMESPACE:
52+
command += ["-n", scope]
53+
54+
running_config_text, returncode = get_cmd_output(command)
55+
if returncode:
56+
raise GenericConfigUpdaterError(
57+
f"Fetch all runningconfiguration failed as output:{running_config_text}")
58+
running_config = json.loads(running_config_text)
59+
60+
if multi_asic.is_multi_asic():
61+
if scope == multi_asic.DEFAULT_NAMESPACE:
62+
scope = HOST_NAMESPACE
63+
all_running_config[scope] = running_config
64+
else:
65+
all_running_config = running_config
5766
return all_running_config
5867

5968

tests/config_test.py

+25-4
Original file line numberDiff line numberDiff line change
@@ -3130,10 +3130,31 @@ def test_replace_multiasic_missing_scope(self):
31303130
def test_checkpoint_multiasic(self, mock_subprocess_popen):
31313131
allconfigs = copy.deepcopy(self.all_config)
31323132

3133-
mock_instance = MagicMock()
3134-
mock_instance.communicate.return_value = (json.dumps(allconfigs), 0)
3135-
mock_instance.returncode = 0
3136-
mock_subprocess_popen.return_value = mock_instance
3133+
# Create mock instances for each subprocess call
3134+
mock_instance_localhost = MagicMock()
3135+
mock_instance_localhost.communicate.return_value = (json.dumps(allconfigs["localhost"]), 0)
3136+
mock_instance_localhost.returncode = 0
3137+
3138+
mock_instance_asic0 = MagicMock()
3139+
mock_instance_asic0.communicate.return_value = (json.dumps(allconfigs["asic0"]), 0)
3140+
mock_instance_asic0.returncode = 0
3141+
3142+
mock_instance_asic1 = MagicMock()
3143+
mock_instance_asic1.communicate.return_value = (json.dumps(allconfigs["asic1"]), 0)
3144+
mock_instance_asic1.returncode = 0
3145+
3146+
# Setup side effect to return different mock instances based on input arguments
3147+
def side_effect(*args, **kwargs):
3148+
if "asic" not in args[0]:
3149+
return mock_instance_localhost
3150+
elif "asic0" in args[0]:
3151+
return mock_instance_asic0
3152+
elif "asic1" in args[0]:
3153+
return mock_instance_asic1
3154+
else:
3155+
return MagicMock() # Default case
3156+
3157+
mock_subprocess_popen.side_effect = side_effect
31373158

31383159
checkpointname = "checkpointname"
31393160
print("Multi ASIC: {}".format(multi_asic.is_multi_asic()))

0 commit comments

Comments
 (0)