diff --git a/scripts/hostcfgd b/scripts/hostcfgd index 4076a3b7..7aaaef26 100644 --- a/scripts/hostcfgd +++ b/scripts/hostcfgd @@ -1587,19 +1587,36 @@ class MgmtIfaceCfg(object): """ syslog.syslog(syslog.LOG_DEBUG, 'MgmtIfaceCfg: mgmt iface update') - # Restart management interface service when config was changed - if data != self.iface_config_data.get(key): - cfg = {key: data} - syslog.syslog(syslog.LOG_INFO, f'MgmtIfaceCfg: Set new interface ' - f'config {cfg} for {iface}') - try: - run_cmd(['sudo', 'systemctl', 'restart', 'interfaces-config'], True, True) - except subprocess.CalledProcessError: - syslog.syslog(syslog.LOG_ERR, f'Failed to restart management ' - 'interface services') - return + existing_data = self.iface_config_data.get(key) + # Check if data has changed + if data != existing_data: + syslog.syslog(syslog.LOG_INFO, f'MgmtIfaceCfg: Updating config for {iface} with {data}') + # Update the interface configuration self.iface_config_data[key] = data + elif not data: + # If new data is empty, remove the key if it exists + if key in self.iface_config_data: + self.iface_config_data.pop(key) + syslog.syslog(syslog.LOG_INFO, f'MgmtIfaceCfg: Removed config for {iface}') + else: + syslog.syslog(syslog.LOG_DEBUG, f'MgmtIfaceCfg: No existing config to remove for {iface}') + # No change; no need to restart services + return + else: + # Data hasn't changed; no need to proceed + syslog.syslog(syslog.LOG_DEBUG, f'MgmtIfaceCfg: No changes detected for {iface}') + return + + # Restart services after configuration change + try: + syslog.syslog(syslog.LOG_INFO, f'MgmtIfaceCfg: Updated:{self.iface_config_data}') + + run_cmd(['sudo', 'systemctl', 'restart', 'interfaces-config'], True, True) + + syslog.syslog(syslog.LOG_INFO, 'MgmtIfaceCfg: Successfully restarted services') + except subprocess.CalledProcessError: + syslog.syslog(syslog.LOG_ERR, 'MgmtIfaceCfg: Failed to restart management interface services') def update_mgmt_vrf(self, data): """Handle update management VRF state