Skip to content

Commit e22980f

Browse files
authored
[config/console][consutil] Support enable/disable console switch (sonic-net#1275)
* [config/console][consutil] Support enable/disable console switch * Changed the key to aligned with feature table style Signed-off-by: Jing Kan [email protected]
1 parent 2f263c4 commit e22980f

4 files changed

Lines changed: 104 additions & 1 deletion

File tree

config/console.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,38 @@ def console():
99
"""Console-related configuration tasks"""
1010
pass
1111

12+
#
13+
# 'console enable' group ('config console enable')
14+
#
15+
@console.command('enable')
16+
@clicommon.pass_db
17+
def enable_console_switch(db):
18+
"""Enable console switch"""
19+
config_db = db.cfgdb
20+
21+
table = "CONSOLE_SWITCH"
22+
dataKey1 = 'console_mgmt'
23+
dataKey2 = 'enabled'
24+
25+
data = { dataKey2 : "yes" }
26+
config_db.mod_entry(table, dataKey1, data)
27+
28+
#
29+
# 'console disable' group ('config console disable')
30+
#
31+
@console.command('disable')
32+
@clicommon.pass_db
33+
def disable_console_switch(db):
34+
"""Disable console switch"""
35+
config_db = db.cfgdb
36+
37+
table = "CONSOLE_SWITCH"
38+
dataKey1 = 'console_mgmt'
39+
dataKey2 = 'enabled'
40+
41+
data = { dataKey2 : "no" }
42+
config_db.mod_entry(table, dataKey1, data)
43+
1244
#
1345
# 'console add' group ('config console add ...')
1446
#

consutil/lib.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,17 @@
2222
ERR_BUSY = 5
2323

2424
CONSOLE_PORT_TABLE = "CONSOLE_PORT"
25+
CONSOLE_SWITCH_TABLE = "CONSOLE_SWITCH"
26+
2527
LINE_KEY = "LINE"
2628
CUR_STATE_KEY = "CUR_STATE"
2729

2830
# CONFIG_DB Keys
2931
BAUD_KEY = "baud_rate"
3032
DEVICE_KEY = "remote_device"
3133
FLOW_KEY = "flow_control"
34+
FEATURE_KEY = "console_mgmt"
35+
FEATURE_ENABLED_KEY = "enabled"
3236

3337
# STATE_DB Keys
3438
STATE_KEY = "state"

consutil/main.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,15 @@
1717
raise ImportError("%s - required module not found" % str(e))
1818

1919
@click.group()
20-
def consutil():
20+
@clicommon.pass_db
21+
def consutil(db):
2122
"""consutil - Command-line utility for interacting with switches via console device"""
23+
config_db = db.cfgdb
24+
data = config_db.get_entry(CONSOLE_SWITCH_TABLE, FEATURE_KEY)
25+
if FEATURE_ENABLED_KEY not in data or data[FEATURE_ENABLED_KEY] == "no":
26+
click.echo("Console switch feature is disabled")
27+
sys.exit(ERR_DISABLE)
28+
2229
SysInfoProvider.init_device_prefix()
2330

2431
# 'show' subcommand

tests/console_test.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,24 @@ class TestConfigConsoleCommands(object):
2020
def setup_class(cls):
2121
print("SETUP")
2222

23+
def test_enable_console_switch(self):
24+
runner = CliRunner()
25+
db = Db()
26+
27+
result = runner.invoke(config.config.commands["console"].commands["enable"])
28+
print(result.exit_code)
29+
print(sys.stderr, result.output)
30+
assert result.exit_code == 0
31+
32+
def test_disable_console_switch(self):
33+
runner = CliRunner()
34+
db = Db()
35+
36+
result = runner.invoke(config.config.commands["console"].commands["disable"])
37+
print(result.exit_code)
38+
print(sys.stderr, result.output)
39+
assert result.exit_code == 0
40+
2341
def test_console_add_exists(self):
2442
runner = CliRunner()
2543
db = Db()
@@ -465,6 +483,48 @@ def test_sys_info_provider_get_active_console_process_info_nonexists(self):
465483
proc = SysInfoProvider.get_active_console_process_info("2")
466484
assert proc is None
467485

486+
class TestConsutil(object):
487+
@classmethod
488+
def setup_class(cls):
489+
print("SETUP")
490+
491+
@mock.patch('consutil.lib.SysInfoProvider.init_device_prefix', mock.MagicMock(return_value=None))
492+
@mock.patch('consutil.main.show', mock.MagicMock(return_value=None))
493+
def test_consutil_feature_disabled_null_config(self):
494+
runner = CliRunner()
495+
db = Db()
496+
497+
result = runner.invoke(consutil.consutil, ['show'], obj=db)
498+
print(result.exit_code)
499+
print(sys.stderr, result.output)
500+
assert result.exit_code == 1
501+
assert result.output == "Console switch feature is disabled\n"
502+
503+
@mock.patch('consutil.lib.SysInfoProvider.init_device_prefix', mock.MagicMock(return_value=None))
504+
@mock.patch('consutil.main.show', mock.MagicMock(return_value=None))
505+
def test_consutil_feature_disabled_config(self):
506+
runner = CliRunner()
507+
db = Db()
508+
db.cfgdb.set_entry("CONSOLE_SWITCH", "console_mgmt", { "enabled" : "no" })
509+
510+
result = runner.invoke(consutil.consutil, ['show'], obj=db)
511+
print(result.exit_code)
512+
print(sys.stderr, result.output)
513+
assert result.exit_code == 1
514+
assert result.output == "Console switch feature is disabled\n"
515+
516+
@mock.patch('consutil.lib.SysInfoProvider.init_device_prefix', mock.MagicMock(return_value=None))
517+
@mock.patch('consutil.main.show', mock.MagicMock(return_value=None))
518+
def test_consutil_feature_enabled(self):
519+
runner = CliRunner()
520+
db = Db()
521+
db.cfgdb.set_entry("CONSOLE_SWITCH", "console_mgmt", { "enabled" : "yes" })
522+
523+
result = runner.invoke(consutil.consutil, ['show'], obj=db)
524+
print(result.exit_code)
525+
print(sys.stderr, result.output)
526+
assert result.exit_code == 0
527+
468528
class TestConsutilShow(object):
469529
@classmethod
470530
def setup_class(cls):

0 commit comments

Comments
 (0)