This is the next generation implementation of rabbitmqctl and other RabbitMQ CLI tools.
This project is a work in progress and targets RabbitMQ 3.7.0
(currently the master
branch). For production use, go with the
rabbitmqctl
distributed with the RabbitMQ version you use.
Team RabbitMQ wanted a set of tools that
- Was extensible from/with plugins
- Supported pluggable output formats (in particular machine-friendly ones)
- Had good test coverage
- Wasn't as coupled to the server repository
- Could be used as a low risk vehicle for Elixir evaluation
This version of CLI tools targets RabbitMQ master (future
3.7.0
). Some operations (for example, the list_*
ones) will not
work with earlier server releases.
Building this project requires Elixir 1.3.1 or greater.
Command line tools depend on rabbitmq-common.
Dependencies are being resolved by erlang.mk
This repo produce a rabbitmqctl
executable which can be used as different tools
by copying or symlinking it with different names.
Currently rabbitmq-plugins
and rabbitmq-diagnostics
tools are supported.
To generate the executable, run
make
rabbitmqctl [-n node] [-t timeout] [-q] {command} [command options...]
See the rabbitmqctl man page for a full list of options.
Assuming you have:
- installed Elixir
- have a local running RabbitMQ node with the
rabbitmq-federation
plugin enabled (for parameter management testing), e.g.make run-broker PLUGINS='rabbitmq_federation rabbitmq_stomp'
from a server release repository clone
you can simply run make tests
within the project root directory.
NOTE: You may see the following message several times:
warning: variable context is unused
This is nothing to be alarmed about; we're currently using setup context
functions in Mix to start a new distributed node and connect
it to the RabbitMQ server. It complains because we don't actually use
the context dictionary, but it's fine otherwise.
RabbitMQ CLI tools use module name conventions to match the command-line
actions (commands) to modules. The convention is outlined in the CommandBehaviour
module.
Each command module must implement the RabbitMQ.CLI.CommandBehaviour
behaviour,
which includes the following functions:
-
validate(args, opts)
, which returns either:ok
or a tuple of{:validation_failure, failure_detail}
where failure detail is typically one of::too_many_args
,:not_enough_args
or{:bad_argument, String.t}
. -
merge_defaults(args, opts)
, which is used to return updated arguments and/or options. -
run(args, opts)
, where the actual command is implemented. Here,args
is a list of command-specific parameters andopts
is a Map containing option flags. -
usage
, which returns a string describing the command, its arguments and its optional flags. -
flags
, which returns command-specific option flags as a list of atoms. -
banner(args, opts)
, which returns a string to be printed before the command output. -
switches
, which returns command specific switches. -
aliases
, which returns a list of command alianses (if any).
There is also a number of optional callbacks:
formatter
: what output formatter should be used by default.usage_additional
: extra values appended to theusage
output to provide additional command-specific documentation.scopes
: what scopes this command appears in. Scopes associate tools (e.g.rabbitmqctl
,rabbitmq-diagnostics
) with commands.
We have a tutorial that demonstrates how to add a CLI command that deletes a queue.
See lib/rabbitmq/cli/ctl/commands/status_command.ex
and test/status_command_test.exs
for simple
examples.
The project is licensed under the MPL, the same license as RabbitMQ.
(c) Pivotal Software, Inc, 2016-Current.