Skip to content

Commit ed62489

Browse files
authored
SONIC CLI for CLI-Sessions feature (#3175)
HLD: sonic-net/SONiC#1367 | Module name | PR | state | context | | ------------- | ------------- | ----|-----| | [sonic-buildimage](https://github.com/sonic-net/sonic-buildimage) | [Dev cli sessions](sonic-net/sonic-buildimage#17623) | ![GitHub issue/pull request detail](https://img.shields.io/github/pulls/detail/state/sonic-net/sonic-buildimage/17623) | ![GitHub pull request check contexts](https://img.shields.io/github/status/contexts/pulls/sonic-net/sonic-buildimage/17623) | | [sonic-host-services](https://github.com/sonic-net/sonic-host-services) | [cli-sessions](sonic-net/sonic-host-services#99) | ![GitHub issue/pull request detail](https://img.shields.io/github/pulls/detail/state/sonic-net/sonic-host-services/99) | ![GitHub pull request check contexts](https://img.shields.io/github/status/contexts/pulls/sonic-net/sonic-host-services/99) | | [sonic-utilities](https://github.com/sonic-net/sonic-utilities) | [SONIC CLI for CLI-Sessions feature #3175](#3175) | ![GitHub issue/pull request detail](https://img.shields.io/github/pulls/detail/state/sonic-net/sonic-utilities/3175) | ![GitHub pull request check contexts](https://img.shields.io/github/status/contexts/pulls/sonic-net/sonic-utilities/3175) | #### What I did Implement next commands for CLI-sessions feature: - config serial-console inactivity-timeout - config serial-console sysrq-capabilities - show serial-console - config ssh max-sessions - config ssh inactivity-timeout - show ssh #### How I did it Write handlers in config/main.py for serial-console and ssh commands to cover configuration set; Write handlers in show/main.py for serial-console and ssh to cover show commands. #### How to verify it Manual tests
1 parent c663755 commit ed62489

File tree

3 files changed

+138
-0
lines changed

3 files changed

+138
-0
lines changed

config/main.py

+66
Original file line numberDiff line numberDiff line change
@@ -7987,5 +7987,71 @@ def notice(db, category_list, max_events, namespace):
79877987
handle_asic_sdk_health_suppress(db, 'notice', category_list, max_events, namespace)
79887988

79897989

7990+
#
7991+
# 'serial_console' group ('config serial_console')
7992+
#
7993+
@config.group(cls=clicommon.AbbreviationGroup, name='serial_console')
7994+
def serial_console():
7995+
"""Configuring system serial-console behavior"""
7996+
pass
7997+
7998+
7999+
@serial_console.command('sysrq-capabilities')
8000+
@click.argument('sysrq_capabilities', metavar='<enabled|disabled>', required=True,
8001+
type=click.Choice(['enabled', 'disabled']))
8002+
def sysrq_capabilities(sysrq_capabilities):
8003+
"""Set serial console sysrq-capabilities state"""
8004+
8005+
config_db = ConfigDBConnector()
8006+
config_db.connect()
8007+
config_db.mod_entry("SERIAL_CONSOLE", 'POLICIES',
8008+
{'sysrq_capabilities': sysrq_capabilities})
8009+
8010+
8011+
@serial_console.command('inactivity-timeout')
8012+
@click.argument('inactivity_timeout', metavar='<timeout>', required=True,
8013+
type=click.IntRange(0, 35000))
8014+
def inactivity_timeout_serial(inactivity_timeout):
8015+
"""Set serial console inactivity timeout"""
8016+
8017+
config_db = ConfigDBConnector()
8018+
config_db.connect()
8019+
config_db.mod_entry("SERIAL_CONSOLE", 'POLICIES',
8020+
{'inactivity_timeout': inactivity_timeout})
8021+
8022+
8023+
#
8024+
# 'ssh' group ('config ssh')
8025+
#
8026+
@config.group(cls=clicommon.AbbreviationGroup, name='ssh')
8027+
def ssh():
8028+
"""Configuring system ssh behavior"""
8029+
pass
8030+
8031+
8032+
@ssh.command('inactivity-timeout')
8033+
@click.argument('inactivity_timeout', metavar='<timeout>', required=True,
8034+
type=click.IntRange(0, 35000))
8035+
def inactivity_timeout_ssh(inactivity_timeout):
8036+
"""Set ssh inactivity timeout"""
8037+
8038+
config_db = ConfigDBConnector()
8039+
config_db.connect()
8040+
config_db.mod_entry("SSH_SERVER", 'POLICIES',
8041+
{'inactivity_timeout': inactivity_timeout})
8042+
8043+
8044+
@ssh.command('max-sessions')
8045+
@click.argument('max-sessions', metavar='<max-sessions>', required=True,
8046+
type=click.IntRange(0, 100))
8047+
def max_sessions(max_sessions):
8048+
"""Set max number of concurrent logins"""
8049+
8050+
config_db = ConfigDBConnector()
8051+
config_db.connect()
8052+
config_db.mod_entry("SSH_SERVER", 'POLICIES',
8053+
{'max_sessions': max_sessions})
8054+
8055+
79908056
if __name__ == '__main__':
79918057
config()

show/main.py

+40
Original file line numberDiff line numberDiff line change
@@ -2433,6 +2433,46 @@ def received(db, namespace):
24332433
ctx.fail("ASIC/SDK health event is not supported on the platform")
24342434

24352435

2436+
#
2437+
# 'serial_console' command group ("show serial_console ...")
2438+
#
2439+
@cli.group('serial_console', invoke_without_command=True)
2440+
@clicommon.pass_db
2441+
def serial_console(db):
2442+
"""Show serial_console configuration"""
2443+
2444+
serial_console_table = db.cfgdb.get_entry('SERIAL_CONSOLE', 'POLICIES')
2445+
2446+
hdrs = ['inactivity-timeout', 'sysrq-capabilities']
2447+
data = []
2448+
2449+
data.append(serial_console_table.get('inactivity_timeout', '900 <default>'))
2450+
data.append(serial_console_table.get('sysrq_capabilities', 'disabled <default>'))
2451+
2452+
configuration = [data]
2453+
click.echo(tabulate(configuration, headers=hdrs, tablefmt='simple', missingval=''))
2454+
2455+
2456+
#
2457+
# 'ssh' command group ("show ssh ...")
2458+
#
2459+
@cli.group('ssh', invoke_without_command=True)
2460+
@clicommon.pass_db
2461+
def ssh(db):
2462+
"""Show ssh configuration"""
2463+
2464+
serial_console_table = db.cfgdb.get_entry('SSH_SERVER', 'POLICIES')
2465+
2466+
hdrs = ['inactivity-timeout', 'max-sessions']
2467+
data = []
2468+
2469+
data.append(serial_console_table.get('inactivity_timeout', '900 <default>'))
2470+
data.append(serial_console_table.get('max_session', '0 <default>'))
2471+
2472+
configuration = [data]
2473+
click.echo(tabulate(configuration, headers=hdrs, tablefmt='simple', missingval=''))
2474+
2475+
24362476
# Load plugins and register them
24372477
helper = util_base.UtilHelper()
24382478
helper.load_and_register_plugins(plugins, cli)

tests/cli_sessions_test.py

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from click.testing import CliRunner
2+
3+
import config.main as config
4+
import show.main as show
5+
from utilities_common.db import Db
6+
7+
8+
class TestCliSessionsCommands:
9+
def test_config_command(self):
10+
runner = CliRunner()
11+
12+
db = Db()
13+
14+
result = runner.invoke(config.config.commands['serial_console'].commands['sysrq-capabilities'],
15+
['enabled'], obj=db)
16+
assert result.exit_code == 0
17+
18+
result = runner.invoke(config.config.commands['serial_console'].commands['inactivity-timeout'],
19+
['180'], obj=db)
20+
assert result.exit_code == 0
21+
22+
result = runner.invoke(show.cli.commands['serial_console'], obj=db)
23+
assert result.exit_code == 0
24+
25+
result = runner.invoke(config.config.commands['ssh'].commands['inactivity-timeout'], ['190'], obj=db)
26+
assert result.exit_code == 0
27+
28+
result = runner.invoke(config.config.commands['ssh'].commands['max-sessions'], ['60'], obj=db)
29+
assert result.exit_code == 0
30+
31+
result = runner.invoke(show.cli.commands['ssh'], obj=db)
32+
assert result.exit_code == 0

0 commit comments

Comments
 (0)