Skip to content

Commit 72c3b84

Browse files
authored
Revert "[config]Support multi-asic Golden Config override (#2738)" (#2820)
This reverts commit 8ae2424.
1 parent 600377f commit 72c3b84

File tree

5 files changed

+32
-149
lines changed

5 files changed

+32
-149
lines changed

config/config_mgmt.py

+5-10
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ class ConfigMgmt():
3535
to verify config for the commands which are capable of change in config DB.
3636
'''
3737

38-
def __init__(self, source="configDB", debug=False, allowTablesWithoutYang=True,
39-
sonicYangOptions=0, configdb=None):
38+
def __init__(self, source="configDB", debug=False, allowTablesWithoutYang=True, sonicYangOptions=0):
4039
'''
4140
Initialise the class, --read the config, --load in data tree.
4241
@@ -45,7 +44,6 @@ def __init__(self, source="configDB", debug=False, allowTablesWithoutYang=True,
4544
debug (bool): verbose mode.
4645
allowTablesWithoutYang (bool): allow tables without yang model in
4746
config or not.
48-
configdb: configdb to work on.
4947
5048
Returns:
5149
void
@@ -56,11 +54,6 @@ def __init__(self, source="configDB", debug=False, allowTablesWithoutYang=True,
5654
self.source = source
5755
self.allowTablesWithoutYang = allowTablesWithoutYang
5856
self.sonicYangOptions = sonicYangOptions
59-
if configdb is None:
60-
self.configdb = ConfigDBConnector()
61-
self.configdb.connect()
62-
else:
63-
self.configdb = configdb
6457

6558
# logging vars
6659
self.SYSLOG_IDENTIFIER = "ConfigMgmt"
@@ -201,7 +194,8 @@ def readConfigDB(self):
201194
self.sysLog(doPrint=True, msg='Reading data from Redis configDb')
202195
# Read from config DB on sonic switch
203196
data = dict()
204-
configdb = self.configdb
197+
configdb = ConfigDBConnector()
198+
configdb.connect()
205199
sonic_cfggen.deep_update(data, sonic_cfggen.FormatConverter.db_to_output(configdb.get_config()))
206200
self.configdbJsonIn = sonic_cfggen.FormatConverter.to_serialized(data)
207201
self.sysLog(syslog.LOG_DEBUG, 'Reading Input from ConfigDB {}'.\
@@ -221,7 +215,8 @@ def writeConfigDB(self, jDiff):
221215
'''
222216
self.sysLog(doPrint=True, msg='Writing in Config DB')
223217
data = dict()
224-
configdb = self.configdb
218+
configdb = ConfigDBConnector()
219+
configdb.connect(False)
225220
sonic_cfggen.deep_update(data, sonic_cfggen.FormatConverter.to_deserialized(jDiff))
226221
self.sysLog(msg="Write in DB: {}".format(data))
227222
configdb.mod_config(sonic_cfggen.FormatConverter.output_to_db(data))

config/main.py

+25-30
Original file line numberDiff line numberDiff line change
@@ -1886,41 +1886,36 @@ def override_config_table(db, input_config_db, dry_run):
18861886
fg='magenta')
18871887
sys.exit(1)
18881888

1889-
cfgdb_clients = db.cfgdb_clients
1889+
config_db = db.cfgdb
18901890

1891-
for ns, config_db in cfgdb_clients.items():
1892-
# Read config from configDB
1893-
current_config = config_db.get_config()
1894-
# Serialize to the same format as json input
1895-
sonic_cfggen.FormatConverter.to_serialized(current_config)
1891+
# Read config from configDB
1892+
current_config = config_db.get_config()
1893+
# Serialize to the same format as json input
1894+
sonic_cfggen.FormatConverter.to_serialized(current_config)
18961895

1897-
if multi_asic.is_multi_asic():
1898-
ns_config_input = config_input[ns]
1899-
else:
1900-
ns_config_input = config_input
1901-
updated_config = update_config(current_config, ns_config_input)
1896+
updated_config = update_config(current_config, config_input)
19021897

1903-
yang_enabled = device_info.is_yang_config_validation_enabled(config_db)
1904-
if yang_enabled:
1905-
# The ConfigMgmt will load YANG and running
1906-
# config during initialization.
1907-
try:
1908-
cm = ConfigMgmt(configdb=config_db)
1909-
cm.validateConfigData()
1910-
except Exception as ex:
1911-
click.secho("Failed to validate running config. Error: {}".format(ex), fg="magenta")
1912-
sys.exit(1)
1898+
yang_enabled = device_info.is_yang_config_validation_enabled(config_db)
1899+
if yang_enabled:
1900+
# The ConfigMgmt will load YANG and running
1901+
# config during initialization.
1902+
try:
1903+
cm = ConfigMgmt()
1904+
cm.validateConfigData()
1905+
except Exception as ex:
1906+
click.secho("Failed to validate running config. Error: {}".format(ex), fg="magenta")
1907+
sys.exit(1)
19131908

1914-
# Validate input config
1915-
validate_config_by_cm(cm, ns_config_input, "config_input")
1916-
# Validate updated whole config
1917-
validate_config_by_cm(cm, updated_config, "updated_config")
1909+
# Validate input config
1910+
validate_config_by_cm(cm, config_input, "config_input")
1911+
# Validate updated whole config
1912+
validate_config_by_cm(cm, updated_config, "updated_config")
19181913

1919-
if dry_run:
1920-
print(json.dumps(updated_config, sort_keys=True,
1921-
indent=4, cls=minigraph_encoder))
1922-
else:
1923-
override_config_db(config_db, ns_config_input)
1914+
if dry_run:
1915+
print(json.dumps(updated_config, sort_keys=True,
1916+
indent=4, cls=minigraph_encoder))
1917+
else:
1918+
override_config_db(config_db, config_input)
19241919

19251920

19261921
def validate_config_by_cm(cm, config_json, jname):

tests/config_override_input/multi_asic_dm_rm.json

-11
This file was deleted.

tests/config_override_input/multi_asic_macsec_ov.json

-23
This file was deleted.

tests/config_override_test.py

+2-75
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import os
22
import json
33
import filecmp
4-
import importlib
54
import config.main as config
65

76
from click.testing import CliRunner
@@ -21,8 +20,6 @@
2120
RUNNING_CONFIG_YANG_FAILURE = os.path.join(DATA_DIR, "running_config_yang_failure.json")
2221
GOLDEN_INPUT_YANG_FAILURE = os.path.join(DATA_DIR, "golden_input_yang_failure.json")
2322
FINAL_CONFIG_YANG_FAILURE = os.path.join(DATA_DIR, "final_config_yang_failure.json")
24-
MULTI_ASIC_MACSEC_OV = os.path.join(DATA_DIR, "multi_asic_macsec_ov.json")
25-
MULTI_ASIC_DEVICE_METADATA_RM = os.path.join(DATA_DIR, "multi_asic_dm_rm.json")
2623

2724
# Load sonic-cfggen from source since /usr/local/bin/sonic-cfggen does not have .py extension.
2825
sonic_cfggen = load_module_from_source('sonic_cfggen', '/usr/local/bin/sonic-cfggen')
@@ -176,7 +173,7 @@ def test_yang_verification_enabled(self):
176173
def is_yang_config_validation_enabled_side_effect(filename):
177174
return True
178175

179-
def config_mgmt_side_effect(configdb):
176+
def config_mgmt_side_effect():
180177
return config_mgmt.ConfigMgmt(source=CONFIG_DB_JSON_FILE)
181178

182179
db = Db()
@@ -235,7 +232,7 @@ def check_yang_verification_failure(self, db, config, running_config,
235232
def read_json_file_side_effect(filename):
236233
return golden_config
237234

238-
def config_mgmt_side_effect(configdb):
235+
def config_mgmt_side_effect():
239236
return config_mgmt.ConfigMgmt(source=CONFIG_DB_JSON_FILE)
240237

241238
# ConfigMgmt will call ConfigDBConnector to load default config_db.json.
@@ -260,73 +257,3 @@ def teardown_class(cls):
260257
print("TEARDOWN")
261258
os.environ["UTILITIES_UNIT_TESTING"] = "0"
262259
return
263-
264-
265-
class TestConfigOverrideMultiasic(object):
266-
@classmethod
267-
def setup_class(cls):
268-
print("SETUP")
269-
os.environ["UTILITIES_UNIT_TESTING"] = "1"
270-
os.environ["UTILITIES_UNIT_TESTING_TOPOLOGY"] = "multi_asic"
271-
# change to multi asic config
272-
from .mock_tables import dbconnector
273-
from .mock_tables import mock_multi_asic
274-
importlib.reload(mock_multi_asic)
275-
dbconnector.load_namespace_config()
276-
return
277-
278-
def test_macsec_override(self):
279-
def read_json_file_side_effect(filename):
280-
with open(MULTI_ASIC_MACSEC_OV, "r") as f:
281-
macsec_profile = json.load(f)
282-
return macsec_profile
283-
db = Db()
284-
cfgdb_clients = db.cfgdb_clients
285-
286-
# The profile_content was copied from MULTI_ASIC_MACSEC_OV, where all
287-
# ns sharing the same content: {"profile": {"key": "value"}}
288-
profile_content = {"profile": {"key": "value"}}
289-
290-
with mock.patch('config.main.read_json_file',
291-
mock.MagicMock(side_effect=read_json_file_side_effect)):
292-
runner = CliRunner()
293-
result = runner.invoke(config.config.commands["override-config-table"],
294-
['golden_config_db.json'], obj=db)
295-
assert result.exit_code == 0
296-
297-
for ns, config_db in cfgdb_clients.items():
298-
assert config_db.get_config()['MACSEC_PROFILE'] == profile_content
299-
300-
def test_device_metadata_table_rm(self):
301-
def read_json_file_side_effect(filename):
302-
with open(MULTI_ASIC_DEVICE_METADATA_RM, "r") as f:
303-
device_metadata = json.load(f)
304-
return device_metadata
305-
db = Db()
306-
cfgdb_clients = db.cfgdb_clients
307-
308-
for ns, config_db in cfgdb_clients.items():
309-
assert 'DEVICE_METADATA' in config_db.get_config()
310-
311-
with mock.patch('config.main.read_json_file',
312-
mock.MagicMock(side_effect=read_json_file_side_effect)):
313-
runner = CliRunner()
314-
result = runner.invoke(config.config.commands["override-config-table"],
315-
['golden_config_db.json'], obj=db)
316-
assert result.exit_code == 0
317-
318-
for ns, config_db in cfgdb_clients.items():
319-
assert 'DEVICE_METADATA' not in config_db.get_config()
320-
321-
322-
@classmethod
323-
def teardown_class(cls):
324-
print("TEARDOWN")
325-
os.environ["UTILITIES_UNIT_TESTING"] = "0"
326-
os.environ["UTILITIES_UNIT_TESTING_TOPOLOGY"] = ""
327-
# change back to single asic config
328-
from .mock_tables import dbconnector
329-
from .mock_tables import mock_single_asic
330-
importlib.reload(mock_single_asic)
331-
dbconnector.load_namespace_config()
332-
return

0 commit comments

Comments
 (0)