diff --git a/scripts/db_migrator.py b/scripts/db_migrator.py index a48da00f5b..f9a714307e 100755 --- a/scripts/db_migrator.py +++ b/scripts/db_migrator.py @@ -59,7 +59,7 @@ def __init__(self, namespace, socket=None): none-zero values. build: sequentially increase within a minor version domain. """ - self.CURRENT_VERSION = 'version_202311_02' + self.CURRENT_VERSION = 'version_202311_03' self.TABLE_NAME = 'VERSIONS' self.TABLE_KEY = 'DATABASE' @@ -618,6 +618,30 @@ def migrate_telemetry(self): if not certs: self.configDB.set_entry("TELEMETRY", "certs", telemetry_data.get("certs")) + def migrate_gnmi(self): + # If there's GNMI table in CONFIG_DB, no need to migrate + gnmi = self.configDB.get_entry('GNMI', 'gnmi') + certs = self.configDB.get_entry('GNMI', 'certs') + if gnmi and certs: + return + if self.config_src_data: + if 'GNMI' in self.config_src_data: + # If there's GNMI in minigraph or golden config, copy configuration from config_src_data + gnmi_data = self.config_src_data['GNMI'] + log.log_notice('Migrate GNMI configuration') + if 'gnmi' in gnmi_data: + self.configDB.set_entry("GNMI", "gnmi", gnmi_data.get('gnmi')) + if 'certs' in gnmi_data: + self.configDB.set_entry("GNMI", "certs", gnmi_data.get('certs')) + else: + # If there's no minigraph or golden config, copy configuration from CONFIG_DB TELEMETRY table + gnmi = self.configDB.get_entry('TELEMETRY', 'gnmi') + if gnmi: + self.configDB.set_entry("GNMI", "gnmi", gnmi) + certs = self.configDB.get_entry('TELEMETRY', 'certs') + if certs: + self.configDB.set_entry("GNMI", "certs", certs) + def migrate_console_switch(self): # CONSOLE_SWITCH - add missing key if not self.config_src_data or 'CONSOLE_SWITCH' not in self.config_src_data: @@ -1159,9 +1183,20 @@ def version_202311_01(self): def version_202311_02(self): """ Version 202311_02. - This is current last erversion for 202311 branch """ log.log_info('Handling version_202311_02') + # Update GNMI table + self.migrate_gnmi() + + self.set_version('version_202311_03') + return 'version_202311_03' + + def version_202311_03(self): + """ + Version 202311_03. + This is current last erversion for 202311 branch + """ + log.log_info('Handling version_202311_03') return None def get_version(self): diff --git a/tests/db_migrator_input/config_db/gnmi-configdb-expected.json b/tests/db_migrator_input/config_db/gnmi-configdb-expected.json new file mode 100644 index 0000000000..971c809976 --- /dev/null +++ b/tests/db_migrator_input/config_db/gnmi-configdb-expected.json @@ -0,0 +1,15 @@ +{ + "GNMI|gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + }, + "GNMI|certs": { + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key", + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer" + }, + "VERSIONS|DATABASE": { + "VERSION": "version_202311_03" + } +} diff --git a/tests/db_migrator_input/config_db/gnmi-input.json b/tests/db_migrator_input/config_db/gnmi-input.json new file mode 100644 index 0000000000..5fe666a6a9 --- /dev/null +++ b/tests/db_migrator_input/config_db/gnmi-input.json @@ -0,0 +1,15 @@ +{ + "TELEMETRY|gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051" + }, + "TELEMETRY|certs": { + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key", + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer" + }, + "VERSIONS|DATABASE": { + "VERSION": "version_202311_01" + } +} diff --git a/tests/db_migrator_input/config_db/gnmi-minigraph-expected.json b/tests/db_migrator_input/config_db/gnmi-minigraph-expected.json new file mode 100644 index 0000000000..442066e86a --- /dev/null +++ b/tests/db_migrator_input/config_db/gnmi-minigraph-expected.json @@ -0,0 +1,15 @@ +{ + "GNMI|gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50052" + }, + "GNMI|certs": { + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key", + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer" + }, + "VERSIONS|DATABASE": { + "VERSION": "version_202311_03" + } +} diff --git a/tests/db_migrator_test.py b/tests/db_migrator_test.py index 2e5544be8e..a917813f26 100644 --- a/tests/db_migrator_test.py +++ b/tests/db_migrator_test.py @@ -920,3 +920,59 @@ def test_init(self, mock_args): mock_args.return_value=argparse.Namespace(namespace=None, operation='get_version', socket=None) import db_migrator db_migrator.main() + + +class TestGNMIMigrator(object): + @classmethod + def setup_class(cls): + os.environ['UTILITIES_UNIT_TESTING'] = "2" + + @classmethod + def teardown_class(cls): + os.environ['UTILITIES_UNIT_TESTING'] = "0" + dbconnector.dedicated_dbs['CONFIG_DB'] = None + + def test_gnmi_migrator_minigraph(self): + dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'gnmi-input') + import db_migrator + dbmgtr = db_migrator.DBMigrator(None) + # Set config_src_data + dbmgtr.config_src_data = { + 'GNMI': { + 'gnmi': { + "client_auth": "true", + "log_level": "2", + "port": "50052" + }, + 'certs': { + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key", + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer" + } + } + } + dbmgtr.migrate() + dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'gnmi-minigraph-expected') + expected_db = Db() + advance_version_for_expected_database(dbmgtr.configDB, expected_db.cfgdb, 'version_202311_03') + resulting_table = dbmgtr.configDB.get_table("GNMI") + expected_table = expected_db.cfgdb.get_table("GNMI") + + diff = DeepDiff(resulting_table, expected_table, ignore_order=True) + assert not diff + + def test_gnmi_migrator_configdb(self): + dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'gnmi-input') + import db_migrator + dbmgtr = db_migrator.DBMigrator(None) + # Set config_src_data + dbmgtr.config_src_data = {} + dbmgtr.migrate() + dbconnector.dedicated_dbs['CONFIG_DB'] = os.path.join(mock_db_path, 'config_db', 'gnmi-configdb-expected') + expected_db = Db() + advance_version_for_expected_database(dbmgtr.configDB, expected_db.cfgdb, 'version_202311_03') + resulting_table = dbmgtr.configDB.get_table("GNMI") + expected_table = expected_db.cfgdb.get_table("GNMI") + + diff = DeepDiff(resulting_table, expected_table, ignore_order=True) + assert not diff