diff --git a/sonic_package_manager/service_creator/creator.py b/sonic_package_manager/service_creator/creator.py index bdc0b434b909..17993be83c1e 100644 --- a/sonic_package_manager/service_creator/creator.py +++ b/sonic_package_manager/service_creator/creator.py @@ -491,12 +491,22 @@ def set_initial_config(self, package): if not init_cfg: return + def update_config_with_init_cfg(cfg, conn): + for table, content in init_cfg.items(): + if not isinstance(content, dict): + continue + + for key, fvs in content.items(): + key_cfg = cfg.get(table, {}).get(key, {}) + key_cfg.update(fvs) + conn.mod_entry(table, key, key_cfg) + for conn in self.sonic_db.get_connectors(): cfg = conn.get_config() new_cfg = init_cfg.copy() utils.deep_update(new_cfg, cfg) self.validate_config(new_cfg) - conn.mod_config(new_cfg) + update_config_with_init_cfg(cfg, conn) def remove_config(self, package): """ Remove configuration based on package YANG module. diff --git a/tests/sonic_package_manager/test_service_creator.py b/tests/sonic_package_manager/test_service_creator.py index 9f496783a936..295e80dc52cb 100644 --- a/tests/sonic_package_manager/test_service_creator.py +++ b/tests/sonic_package_manager/test_service_creator.py @@ -131,7 +131,9 @@ def test_service_creator_yang(sonic_fs, manifest, mock_sonic_db, mock_sonic_db.get_connectors = Mock(return_value=[mock_connector]) mock_connector.get_table = Mock(return_value={'key_a': {'field_1': 'value_1'}}) mock_connector.get_config = Mock(return_value={ - 'TABLE_A': mock_connector.get_table('') + 'TABLE_A': mock_connector.get_table(''), + 'TABLE_B': mock_connector.get_table(''), + 'TABLE_C': mock_connector.get_table(''), }) entry = PackageEntry('test', 'azure/sonic-test') @@ -155,15 +157,8 @@ def test_service_creator_yang(sonic_fs, manifest, mock_sonic_db, mock_config_mgmt.add_module.assert_called_with(test_yang) - mock_connector.mod_config.assert_called_with( - { - 'TABLE_A': { - 'key_a': { - 'field_1': 'value_1', - 'field_2': 'value_2', - }, - }, - } + mock_connector.mod_entry.assert_called_once_with( + 'TABLE_A', 'key_a', {'field_1': 'value_1', 'field_2': 'value_2'} ) mock_config_mgmt.sy.confDbYangMap = {