This is an automated email from the ASF dual-hosted git repository.
dmeden pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new bb4b904808 tools - traffic_ctl, traffic_layout: use ArgParse groups
to handle mutually exclusive options. (#12623)
bb4b904808 is described below
commit bb4b904808cc73d9b9e9ce59847f4f09e4081206
Author: Damian Meden <[email protected]>
AuthorDate: Fri Feb 27 09:31:34 2026 +0100
tools - traffic_ctl, traffic_layout: use ArgParse groups to handle
mutually exclusive options. (#12623)
* tools - traffic_ctl, traffic_layout: use ArgParse groups to handle
mutually exclusive options.
traffic_ctl:
Usage: traffic_ctl [OPTIONS] CMD [ARGS ...]
Commands ---------------------- Description -----------------------
drain Drain the requests
Options ======================= Default ===== Description =============
Group (drain_mode)
-N, --no-new-connection Wait for new connections down
to threshold before starting draining
-U, --undo Recover server from the drain
mode
traffic_layout:
Usage: traffic_layout CMD [OPTIONS]
Commands ---------------------- Description -----------------------
info Show the layout as default
Options ======================= Default ===== Description =============
-j, --json Produce output in JSON format
(when supported)
Group (display_mode)
--features Show the compiled features
--versions Show various library and
other versioning information
---
src/traffic_ctl/traffic_ctl.cc | 14 +++++++++-----
src/traffic_layout/traffic_layout.cc | 11 ++++++-----
2 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/src/traffic_ctl/traffic_ctl.cc b/src/traffic_ctl/traffic_ctl.cc
index 6529c0f88b..1f6bc41686 100644
--- a/src/traffic_ctl/traffic_ctl.cc
+++ b/src/traffic_ctl/traffic_ctl.cc
@@ -183,11 +183,15 @@ main([[maybe_unused]] int argc, const char **argv)
// server commands
server_command.add_command("backtrace", "Show a full stack trace of the
traffic_server process",
[&]() { CtrlUnimplementedCommand("backtrace"); });
- server_command.add_command("status", "Show the proxy status",
Command_Execute).add_example_usage("traffic_ctl server status");
- server_command.add_command("drain", "Drain the requests", Command_Execute)
- .add_example_usage("traffic_ctl server drain [OPTIONS]")
- .add_option("--no-new-connection", "-N", "Wait for new connections down to
threshold before starting draining")
- .add_option("--undo", "-U", "Recover server from the drain mode");
+ server_command.add_command("status", "Show the proxy status", [&]() {
command->execute(); })
+ .add_example_usage("traffic_ctl server status");
+ auto &drain_cmd = server_command.add_command("drain", "Drain the requests",
[&]() { command->execute(); });
+ drain_cmd.add_example_usage("traffic_ctl server drain [OPTIONS]");
+
+ drain_cmd.add_mutex_group("drain_mode", false, "Drain mode options");
+ drain_cmd.add_option_to_group("drain_mode", "--no-new-connection", "-N",
+ "Wait for new connections down to threshold
before starting draining");
+ drain_cmd.add_option_to_group("drain_mode", "--undo", "-U", "Recover server
from the drain mode");
auto &debug_command =
server_command.add_command("debug", "Enable/Disable ATS for diagnostic
messages at runtime").require_commands();
diff --git a/src/traffic_layout/traffic_layout.cc
b/src/traffic_layout/traffic_layout.cc
index fa28fb5ef2..dcd1465dd4 100644
--- a/src/traffic_layout/traffic_layout.cc
+++ b/src/traffic_layout/traffic_layout.cc
@@ -45,11 +45,12 @@ main([[maybe_unused]] int argc, const char **argv)
.add_option("--version", "-V", "Print version string");
// info command
- engine.parser.add_command("info", "Show the layout as default", [&]() {
engine.info(); })
- .add_option("--features", "", "Show the compiled features")
- .add_option("--versions", "", "Show various library and other versioning
information")
- .add_option("--json", "-j", "Produce output in JSON format (when
supported)")
- .set_default();
+ auto &info_cmd = engine.parser.add_command("info", "Show the layout as
default", [&]() { engine.info(); });
+ info_cmd.add_mutex_group("display_mode", false, "Display mode options");
+ info_cmd.add_option_to_group("display_mode", "--features", "", "Show the
compiled features");
+ info_cmd.add_option_to_group("display_mode", "--versions", "", "Show various
library and other versioning information");
+
+ info_cmd.add_option("--json", "-j", "Produce output in JSON format (when
supported)").set_default();
// init command
engine.parser.add_command("init", "Initialize(create) the runroot sandbox",
[&]() { engine.create_runroot(); })
.add_option("--absolute", "-a", "Produce absolute path in the
runroot.yaml")