|
|
||
|---|---|---|
| .. | ||
| config | ||
| include | ||
| lib | ||
| test | ||
| .gitignore | ||
| DESIGN.md | ||
| README.md | ||
| erlang.mk | ||
| mix.exs | ||
README.md
RabbitMQ CLI Tools
This is a next generation implementation of the rabbitmqctl and other RabbitMQ CLI tools.
This is still very much a work in progress right now. For production use, go
with the rabbitmqctl distributed with the rabbitmq-server repo.
Supported RabbitMQ Versions
This version of CLI tools targets RabbitMQ master (future 3.7.0). Some operations (namely list_*) will not work
with earlier server releases.
Building
Requirements
Building this project requires Elixir 1.2.2 or greater.
Command line tools depend on rabbitmq-common. This library is included as a dependency in the mix.exs file, though, so the mix deps.* commands in the build process below will pull it in.
Building Standalone Executables
rabbitmqctl is the only executable provided at the moment. To generate a runnable version,
use the following commands:
mix deps.get
mix compile
mix escript.build
Using
rabbitmqctl
rabbitmqctl [-n node] [-t timeout] [-q] {command} [command options...]
See the rabbitmqctl man page for a full list of options.
Testing
Assuming you have:
- installed Elixir
- have a local running RabbitMQ node with the
rabbitmq-federationplugin enabled (for parameter management testing), e.g.make run-broker PLUGINS='rabbitmq_federation rabbitmq_management'from a server repository clone
you can simply run mix test 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.
Developing
Adding a New Command
RabbitMQCtl uses Elixir's Code.eval_string/2 method to match the command-line
argument to the right module. This keeps the main module a reasonable size,
but it does mean that commands have to follow a certain convention. This convention is outlined in the CommandBehaviour module.
Each command module requires the following methods:
-
run(args, opts), where the actual command is implemented. Here,argsis a list of command-specific parameters andoptsis 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.
For example, to add a new command rabbitmqctl egg_salad:
-
Create a new test file
test/egg_salad_command_test.exs. -
In your new test file, define a module
EggSaladCommandTestthat runs tests against a functionEggSaladCommand.run. -
Create a new source file
test/egg_salad_command.exs. -
In your new source file, define a module
EggSaladCommandthat implements therun/2function, theflags/0function and theusage/0function.
See src/status_command.ex and test/status_command_test.exs for simple
examples of this format.
License
The project is licensed under the MPL, the same license as RabbitMQ.