Skip to content

Commit 64777a4

Browse files
generic_config_updater: Filename changed & VLAN validator added (#1919)
#### What I did Change filename per review comments from last PR. Removed print statement from change_applier Added vlan validator & test code for the same
1 parent 1f8f6ab commit 64777a4

File tree

6 files changed

+123
-20
lines changed

6 files changed

+123
-20
lines changed

generic_config_updater/change_applier.py

+10-12
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,27 @@
99
from .gu_common import genericUpdaterLogging
1010

1111
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
12-
UPDATER_CONF_FILE = f"{SCRIPT_DIR}/generic_updater_config.conf.json"
12+
UPDATER_CONF_FILE = f"{SCRIPT_DIR}/generic_config_updater.conf.json"
1313
logger = genericUpdaterLogging.get_logger(title="Change Applier")
1414

1515
print_to_console = False
16-
print_to_stdout = False
1716

18-
def set_print_options(to_console=False, to_stdout=False):
19-
global print_to_console, print_to_stdout
17+
def set_verbose(verbose=False):
18+
global print_to_console, logger
2019

21-
print_to_console = to_console
22-
print_to_stdout = to_stdout
20+
print_to_console = verbose
21+
if verbose:
22+
logger.set_min_log_priority_debug()
23+
else:
24+
logger.set_min_log_priority_notice()
2325

2426

2527
def log_debug(m):
26-
logger.log_debug(m, print_to_console)
27-
if print_to_stdout:
28-
print(m)
28+
logger.log(logger.LOG_PRIORITY_DEBUG, m, print_to_console)
2929

3030

3131
def log_error(m):
32-
logger.log_error(m, print_to_console)
33-
if print_to_stdout:
34-
print(m)
32+
logger.log(logger.LOG_PRIORITY_ERROR, m, print_to_console)
3533

3634

3735
def get_config_db():

generic_config_updater/generic_updater_config.conf.json renamed to generic_config_updater/generic_config_updater.conf.json

+7-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
},
4040
"DHCP_SERVER": {
4141
"services_to_validate": [ "dhcp-relay" ]
42+
},
43+
"VLAN": {
44+
"services_to_validate": [ "vlan-service" ]
4245
}
4346
},
4447
"services": {
@@ -49,10 +52,13 @@
4952
"validate_commands": [ ]
5053
},
5154
"rsyslog": {
52-
"validate_commands": [ "generic_config_updater.services_validator.ryslog_validator" ]
55+
"validate_commands": [ "generic_config_updater.services_validator.rsyslog_validator" ]
5356
},
5457
"dhcp-relay": {
5558
"validate_commands": [ "generic_config_updater.services_validator.dhcp_validator" ]
59+
},
60+
"vlan-service": {
61+
"validate_commands": [ "generic_config_updater.services_validator.vlan_validator" ]
5662
}
5763
}
5864
}

generic_config_updater/services_validator.py

+31-5
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,41 @@
33

44
logger = genericUpdaterLogging.get_logger(title="Service Validator")
55

6+
print_to_console = False
7+
8+
def set_verbose(verbose=False):
9+
global print_to_console, logger
10+
11+
print_to_console = verbose
12+
if verbose:
13+
logger.set_min_log_priority_debug()
14+
else:
15+
logger.set_min_log_priority_notice()
16+
17+
618
def _service_restart(svc_name):
7-
os.system(f"systemctl restart {svc_name}")
8-
logger.log_notice(f"Restarted {svc_name}")
19+
rc = os.system(f"systemctl restart {svc_name}")
20+
logger.log(logger.LOG_PRIORITY_NOTICE,
21+
f"Restarted {svc_name}", print_to_console)
22+
return rc == 0
923

1024

11-
def ryslog_validator(old_config, upd_config, keys):
12-
_service_restart("rsyslog-config")
25+
def rsyslog_validator(old_config, upd_config, keys):
26+
return _service_restart("rsyslog-config")
1327

1428

1529
def dhcp_validator(old_config, upd_config, keys):
16-
_service_restart("dhcp_relay")
30+
return _service_restart("dhcp_relay")
31+
32+
33+
def vlan_validator(old_config, upd_config, keys):
34+
old_vlan = old_config.get("VLAN", {})
35+
upd_vlan = upd_config.get("VLAN", {})
36+
37+
for key in set(old_vlan.keys()).union(set(upd_vlan.keys())):
38+
if (old_vlan.get(key, {}).get("dhcp_servers", []) !=
39+
upd_vlan.get(key, {}).get("dhcp_servers", [])):
40+
return _service_restart("dhcp_relay")
41+
# No update to DHCP servers.
42+
return True
1743

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
'sonic_cli_gen',
6363
],
6464
package_data={
65-
'generic_config_updater': ['generic_updater_config.conf.json'],
65+
'generic_config_updater': ['generic_config_updater.conf.json'],
6666
'show': ['aliases.ini'],
6767
'sonic_installer': ['aliases.ini'],
6868
'tests': ['acl_input/*',

tests/generic_config_updater/change_applier_test.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from unittest.mock import patch
88

99
import generic_config_updater.change_applier
10+
import generic_config_updater.services_validator
1011
import generic_config_updater.gu_common
1112

1213
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
@@ -227,7 +228,8 @@ def test_change_apply(self, mock_set, mock_db, mock_os_sys):
227228
json_changes = copy.deepcopy(read_data["json_changes"])
228229

229230
generic_config_updater.change_applier.UPDATER_CONF_FILE = CONF_FILE
230-
generic_config_updater.change_applier.set_print_options(to_stdout=True)
231+
generic_config_updater.change_applier.set_verbose(True)
232+
generic_config_updater.services_validator.set_verbose(True)
231233

232234
applier = generic_config_updater.change_applier.ChangeApplier()
233235
debug_print("invoked applier")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import copy
2+
import json
3+
import jsondiff
4+
import os
5+
import unittest
6+
from collections import defaultdict
7+
from unittest.mock import patch
8+
9+
from generic_config_updater.services_validator import vlan_validator
10+
import generic_config_updater.gu_common
11+
12+
13+
# Mimics os.system call
14+
#
15+
os_system_expected_cmd = ""
16+
msg = ""
17+
18+
def os_system_cfggen(cmd):
19+
assert cmd == os_system_expected_cmd, msg
20+
return 0
21+
22+
23+
test_data = [
24+
{ "old": {}, "upd": {}, "cmd": "" },
25+
{
26+
"old": { "VLAN": { "XXX": { "dhcp_servers": [ "10.10.10.10" ] } } },
27+
"upd": { "VLAN": { "XXX": { "dhcp_servers": [ "10.10.10.10" ] } } },
28+
"cmd": ""
29+
},
30+
{
31+
"old": { "VLAN": { "XXX": { "dhcp_servers": [ "10.10.10.10" ] } } },
32+
"upd": { "VLAN": { "XXX": { "dhcp_servers": [ "10.10.10.11" ] } } },
33+
"cmd": "systemctl restart dhcp_relay"
34+
},
35+
{
36+
"old": { "VLAN": { "XXX": { "dhcp_servers": [ "10.10.10.10" ] } } },
37+
"upd": { "VLAN": {
38+
"XXX": { "dhcp_servers": [ "10.10.10.10" ] },
39+
"YYY": { "dhcp_servers": [ ] } } },
40+
"cmd": ""
41+
},
42+
{
43+
"old": { "VLAN": { "XXX": { "dhcp_servers": [ "10.10.10.10" ] } } },
44+
"upd": { "VLAN": {
45+
"XXX": { "dhcp_servers": [ "10.10.10.10" ] },
46+
"YYY": { "dhcp_servers": [ "10.12.12.1" ] } } },
47+
"cmd": "systemctl restart dhcp_relay"
48+
},
49+
{
50+
"old": { "VLAN": { "XXX": { "dhcp_servers": [ "10.10.10.10" ] } } },
51+
"upd": {},
52+
"cmd": "systemctl restart dhcp_relay"
53+
}
54+
]
55+
56+
class TestServiceValidator(unittest.TestCase):
57+
58+
@patch("generic_config_updater.change_applier.os.system")
59+
def test_change_apply(self, mock_os_sys):
60+
global os_system_expected_cmd
61+
62+
mock_os_sys.side_effect = os_system_cfggen
63+
64+
i = 0
65+
for entry in test_data:
66+
os_system_expected_cmd = entry["cmd"]
67+
msg = "case failed: {}".format(str(entry))
68+
69+
vlan_validator(entry["old"], entry["upd"], None)
70+
71+

0 commit comments

Comments
 (0)