rabbitmq-server/deps/rabbitmq_cli
Michael Klishin 204e982a94 Make usage/0 return a string 2016-06-08 01:48:49 +03:00
..
config Added legal boilerplate. 2016-02-03 10:01:32 -05:00
include Removed rabbit_cli.hrl file. 2016-02-03 10:03:50 -05:00
lib Make usage/0 return a string 2016-06-08 01:48:49 +03:00
test Implement the `join_cluster` command 2016-06-06 16:06:52 +02:00
.gitignore .gitignore: Ignore Vim swap files 2016-06-06 12:09:59 +02:00
DESIGN.md Add design document 2016-03-23 12:59:04 +00:00
README.md update documentation to include details of the new 2016-05-27 17:10:23 +01:00
erlang.mk Initial commit. 2016-02-02 13:54:36 -05:00
mix.exs Mix: Make sure we use GNU Make to build RabbitMQ dependencies 2016-06-06 12:06:46 +02:00

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-federation plugin 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:

  • 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 and opts 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.


For example, to add a new command rabbitmqctl egg_salad:

  1. Create a new test file test/egg_salad_command_test.exs.

  2. In your new test file, define a module EggSaladCommandTest that runs tests against a function EggSaladCommand.run, EggSaladCommand.validate etc.

  3. Create a new source file test/egg_salad_command.exs.

  4. In your new source file, define a module EggSaladCommand that implements the all the above mentioned methods.

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.