Skip to content

Commit 8237b5d

Browse files
authored
Monitor rsyslog feature flag change and update rsyslog config by restart rsyslog-config service (#245)
Monitor rsyslog feature flag change and update rsyslog config by restart rsyslog-config service #### Why I did it Another PR add new feature flag syslog_with_osversion #22111 ##### Work item tracking - Microsoft ADO **(number only)**: 31890431 #### How I did it Update hostcfgd to minitor DEVICE_METADATA table change and restart rsyslog-config service to update rsyslog template. #### How to verify it Pass all test case. Manually verified the code change work: admin@vlab-01:~$ sonic-db-cli CONFIG_DB hset "DEVICE_METADATA|localhost" "syslog_with_osversion" "true" 1 admin@vlab-01:~$ sudo cat /var/log/syslog | grep "DeviceMetaCfg" 2025 Apr 22 08:38:12.642805 vlab-01 INFO hostcfgd: DeviceMetaCfg: Restart rsyslog-config after feature flag change to true admin@vlab-01:~$ sonic-db-cli CONFIG_DB hset "DEVICE_METADATA|localhost" "syslog_with_osversion" "false" 0 admin@vlab-01:~$ sudo cat /var/log/syslog | grep "DeviceMetaCfg" 2025 Apr 22 08:38:41.561592 vlab-01 INFO hostcfgd: DeviceMetaCfg: Restart rsyslog-config after feature flag change to false admin@vlab-01:~$ sudo systemctl status rsyslog-config ● rsyslog-config.service - Update rsyslog configuration Loaded: loaded (/lib/systemd/system/rsyslog-config.service; enabled-runtime; preset: enabled) Active: active (exited) since Tue 2025-04-22 08:38:41 UTC; 23s ago Process: 846029 ExecStart=/usr/bin/rsyslog-config.sh (code=exited, status=0/SUCCESS) Main PID: 846029 (code=exited, status=0/SUCCESS) Apr 22 08:38:40 vlab-01 systemd[1]: Starting rsyslog-config.service - Update rsyslog configuration... Apr 22 08:38:41 vlab-01 systemd[1]: Finished rsyslog-config.service - Update rsyslog configuration. #### Description for the changelog Monitor rsyslog feature flag change and update rsyslog config by restart rsyslog-config service
1 parent 55cee71 commit 8237b5d

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

scripts/hostcfgd

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,6 +1423,7 @@ class DeviceMetaCfg(object):
14231423
def __init__(self):
14241424
self.hostname = ''
14251425
self.timezone = None
1426+
self.syslog_with_osversion = None
14261427

14271428
def load(self, dev_meta={}):
14281429
# Get hostname initial
@@ -1431,6 +1432,7 @@ class DeviceMetaCfg(object):
14311432

14321433
# Load appropriate config
14331434
self.timezone = dev_meta.get('localhost', {}).get('timezone')
1435+
self.syslog_with_osversion = dev_meta.get('localhost', {}).get('syslog_with_osversion')
14341436

14351437
def hostname_update(self, data):
14361438
"""
@@ -1491,6 +1493,32 @@ class DeviceMetaCfg(object):
14911493
syslog.syslog(syslog.LOG_INFO, 'DeviceMetaCfg: Restart rsyslog after '
14921494
'changing timezone')
14931495

1496+
def rsyslog_config(self, data):
1497+
"""
1498+
Apply syslog_with_osversion feature flag.
1499+
Run the following command in Linux: sudo systemctl restart rsyslog-config
1500+
Args:
1501+
data: Read table's key's data.
1502+
"""
1503+
new_syslog_with_osversion = data.get('syslog_with_osversion')
1504+
syslog.syslog(syslog.LOG_DEBUG,
1505+
f'DeviceMetaCfg: syslog with os version: {new_syslog_with_osversion}')
1506+
1507+
if new_syslog_with_osversion is None:
1508+
syslog.syslog(syslog.LOG_DEBUG,
1509+
f'DeviceMetaCfg: syslog with os version feature disabled')
1510+
return
1511+
1512+
if new_syslog_with_osversion == self.syslog_with_osversion:
1513+
syslog.syslog(syslog.LOG_DEBUG,
1514+
f'DeviceMetaCfg: syslog with os version feature flag does not change')
1515+
return
1516+
1517+
run_cmd(['systemctl', 'restart', 'rsyslog-config'], True, False)
1518+
syslog.syslog(syslog.LOG_INFO, 'DeviceMetaCfg: Restart rsyslog-config after '
1519+
'feature flag change to {}'.format(new_syslog_with_osversion))
1520+
1521+
14941522
class MgmtIfaceCfg(object):
14951523
"""
14961524
MgmtIfaceCfg Config Daemon
@@ -2281,6 +2309,7 @@ class HostConfigDaemon:
22812309
syslog.syslog(syslog.LOG_INFO, 'DeviceMeta handler...')
22822310
self.devmetacfg.hostname_update(data)
22832311
self.devmetacfg.timezone_update(data)
2312+
self.devmetacfg.rsyslog_config(data)
22842313

22852314
def rsyslog_handler(self):
22862315
rsyslog_config = self.config_db.get_table(

tests/hostcfgd/hostcfgd_test.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ def test_devicemeta_event(self):
247247
Test handling DEVICE_METADATA events.
248248
1) Hostname reload
249249
1) Timezone reload
250+
1) syslog_with_osversion flag change
250251
"""
251252
MockConfigDb.set_config_db(HOSTCFG_DAEMON_CFG_DB)
252253
MockConfigDb.event_queue = [(swsscommon.CFG_DEVICE_METADATA_TABLE_NAME,
@@ -306,6 +307,22 @@ def test_devicemeta_event(self):
306307
]
307308
mocked_syslog.syslog.assert_has_calls(expected)
308309

310+
daemon.devmetacfg.syslog_with_osversion = "false"
311+
HOSTCFG_DAEMON_CFG_DB["DEVICE_METADATA"]["localhost"]["syslog_with_osversion"] = 'true'
312+
MockConfigDb.set_config_db(HOSTCFG_DAEMON_CFG_DB)
313+
with mock.patch('hostcfgd.syslog') as mocked_syslog:
314+
with mock.patch('hostcfgd.subprocess') as mocked_subprocess:
315+
mocked_syslog.LOG_INFO = original_syslog.LOG_INFO
316+
try:
317+
daemon.start()
318+
except TimeoutError:
319+
pass
320+
321+
expected = [
322+
call(original_syslog.LOG_INFO, 'DeviceMetaCfg: Restart rsyslog-config after feature flag change to true')
323+
]
324+
mocked_syslog.syslog.assert_has_calls(expected)
325+
309326
def test_mgmtiface_event(self):
310327
"""
311328
Test handling mgmt events.

0 commit comments

Comments
 (0)