diff --git a/dockers/docker-dhcp-server/cli-plugin-tests/mock_config_db.json b/dockers/docker-dhcp-server/cli-plugin-tests/mock_config_db.json index c8f42d4c39cf..908c1143544e 100644 --- a/dockers/docker-dhcp-server/cli-plugin-tests/mock_config_db.json +++ b/dockers/docker-dhcp-server/cli-plugin-tests/mock_config_db.json @@ -7,9 +7,7 @@ "lease_time": "3600", "mode": "PORT", "netmask": "255.255.255.0", - "customized_options": [ - "option60" - ], + "customized_options": "option60", "state": "enabled" }, "DHCP_SERVER_IPV4_CUSTOMIZED_OPTIONS|option60": { diff --git a/dockers/docker-dhcp-server/cli-plugin-tests/test_show_dhcp_server.py b/dockers/docker-dhcp-server/cli-plugin-tests/test_show_dhcp_server.py index a41650584ce4..e461396ef665 100644 --- a/dockers/docker-dhcp-server/cli-plugin-tests/test_show_dhcp_server.py +++ b/dockers/docker-dhcp-server/cli-plugin-tests/test_show_dhcp_server.py @@ -110,3 +110,42 @@ def test_show_dhcp_server_ipv4_range_single_ip(self, mock_db): assert result.exit_code == 0, "exit code: {}, Exception: {}, Traceback: {}".format(result.exit_code, result.exception, result.exc_info) assert result.stdout == expected_stdout + def test_show_dhcp_server_ipv4_info_without_intf(self, mock_db): + expected_stdout = """\ +Interface Mode Gateway Netmask Lease Time(s) State +----------- ------ --------- ------------- --------------- ------- +Vlan100 PORT 100.1.1.1 255.255.255.0 3600 enabled +""" + runner = CliRunner() + db = clicommon.Db() + db.db = mock_db + result = runner.invoke(show_dhcp_server.dhcp_server.commands["ipv4"].commands["info"], [], obj=db) + assert result.exit_code == 0, "exit code: {}, Exception: {}, Traceback: {}".format(result.exit_code, result.exception, result.exc_info) + assert result.stdout == expected_stdout + + def test_show_dhcp_server_ipv4_info_with_intf(self, mock_db): + expected_stdout = """\ +Interface Mode Gateway Netmask Lease Time(s) State +----------- ------ --------- ------------- --------------- ------- +Vlan100 PORT 100.1.1.1 255.255.255.0 3600 enabled +""" + runner = CliRunner() + db = clicommon.Db() + db.db = mock_db + result = runner.invoke(show_dhcp_server.dhcp_server.commands["ipv4"].commands["info"], ["Vlan100"], obj=db) + assert result.exit_code == 0, "exit code: {}, Exception: {}, Traceback: {}".format(result.exit_code, result.exception, result.exc_info) + assert result.stdout == expected_stdout + + def test_show_dhcp_server_ipv4_info_with_customized_options(self, mock_db): + expected_stdout = """\ +Interface Mode Gateway Netmask Lease Time(s) State Customized Options +----------- ------ --------- ------------- --------------- ------- -------------------- +Vlan100 PORT 100.1.1.1 255.255.255.0 3600 enabled option60 +""" + runner = CliRunner() + db = clicommon.Db() + db.db = mock_db + result = runner.invoke(show_dhcp_server.dhcp_server.commands["ipv4"].commands["info"], ["Vlan100", "--with_customized_options"], obj=db) + assert result.exit_code == 0, "exit code: {}, Exception: {}, Traceback: {}".format(result.exit_code, result.exception, result.exc_info) + assert result.stdout == expected_stdout + diff --git a/dockers/docker-dhcp-server/cli/show/plugins/show_dhcp_server.py b/dockers/docker-dhcp-server/cli/show/plugins/show_dhcp_server.py index 3032168552af..93e38af920ad 100644 --- a/dockers/docker-dhcp-server/cli/show/plugins/show_dhcp_server.py +++ b/dockers/docker-dhcp-server/cli/show/plugins/show_dhcp_server.py @@ -79,5 +79,26 @@ def range(db, range_name): click.echo(tabulate(table, headers=headers)) +@ipv4.command() +@click.argument('dhcp_interface', required=False) +@click.option('--with_customized_options', default=False, is_flag=True) +@clicommon.pass_db +def info(db, dhcp_interface, with_customized_options): + if not dhcp_interface: + dhcp_interface = "*" + headers = ["Interface", "Mode", "Gateway", "Netmask", "Lease Time(s)", "State"] + if with_customized_options: + headers.append("Customized Options") + table = [] + dbconn = db.db + for key in dbconn.keys("CONFIG_DB", "DHCP_SERVER_IPV4|" + dhcp_interface): + entry = dbconn.get_all("CONFIG_DB", key) + interface = key.split("|")[1] + table.append([interface, entry["mode"], entry["gateway"], entry["netmask"], entry["lease_time"], entry["state"]]) + if with_customized_options: + table[-1].append(entry["customized_options"]) + click.echo(tabulate(table, headers=headers)) + + def register(cli): cli.add_command(dhcp_server)