Make it possible to specify erlang cookie from command line
Add new flag `--erlang-cookie` and environment variable `RABBITMQ_ERLANG_COOKIE` to configure a cookie for CLI to connect to RabbitMQ node.
This commit is contained in:
parent
00a298961a
commit
1e1cb92a44
|
|
@ -231,13 +231,14 @@ be shown in usage and available for execution.
|
|||
|
||||
#### Environment Arguments
|
||||
|
||||
* script_name: atom, configurable tool name (`rabbitmq-plugins`, `rabbitmqctl`) to select command scope (see [Command scopes](#command-scopes))
|
||||
* rabbitmq_home: string, broker install directory
|
||||
* mnesia_dir: string, broker mnesia data directory
|
||||
* plugins_dir: string, broker plugins directory
|
||||
* enabled_plugins_file: string, broker enabled plugins file
|
||||
* script-name: atom, configurable tool name (`rabbitmq-plugins`, `rabbitmqctl`) to select command scope (see [Command scopes](#command-scopes))
|
||||
* rabbitmq-home: string, broker install directory
|
||||
* mnesia-dir: string, broker mnesia data directory
|
||||
* plugins-dir: string, broker plugins directory
|
||||
* enabled-plugins-file: string, broker enabled plugins file
|
||||
* longnames (l): boolean, use longnames to communicate with broker erlang node. Should be set to `true` only if broker is started with longnames.
|
||||
* aliases-file: string, a file name to load aliases from
|
||||
* erlang-cookie: atom, an [erlang distribution cookie](http://erlang.org/doc/reference_manual/distributed.html)
|
||||
|
||||
Environment argument defaults are loaded from rabbitmq environment variables (see [Environment configuration](#environment-configuration)).
|
||||
|
||||
|
|
@ -469,11 +470,12 @@ By default it will be loaded from environment variables, same as used in rabbitm
|
|||
|
||||
| Argument name | Environment variable |
|
||||
|----------------------|-------------------------------|
|
||||
| rabbitmq_home | RABBITMQ_HOME |
|
||||
| mnesia_dir | RABBITMQ_MNESIA_DIR |
|
||||
| plugins_dir | RABBITMQ_PLUGINS_DIR |
|
||||
| enabled_plugins_file | RABBITMQ_ENABLED_PLUGINS_FILE |
|
||||
| rabbitmq-home | RABBITMQ_HOME |
|
||||
| mnesia-dir | RABBITMQ_MNESIA_DIR |
|
||||
| plugins-dir | RABBITMQ_PLUGINS_DIR |
|
||||
| enabled-plugins-file | RABBITMQ_ENABLED_PLUGINS_FILE |
|
||||
| longnames | RABBITMQ_USE_LONGNAME |
|
||||
| node | RABBITMQ_NODENAME |
|
||||
| aliases_file | RABBITMQ_CLI_ALIASES_FILE |
|
||||
| aliases-file | RABBITMQ_CLI_ALIASES_FILE |
|
||||
| erlang-cookie | RABBITMQ_ERLANG_COOKIE |
|
||||
|
||||
|
|
|
|||
|
|
@ -22,9 +22,14 @@ defmodule RabbitMQ.CLI.Core.Config do
|
|||
normalize(name, raw_option)
|
||||
end
|
||||
|
||||
def normalize(:node, nil), do: nil
|
||||
def normalize(:node, node) when not is_atom(node) do
|
||||
Rabbitmq.Atom.Coerce.to_atom(node)
|
||||
end
|
||||
def normalize(:erlang_cookie, nil), do: nil
|
||||
def normalize(:erlang_cookie, c) when not is_atom(c) do
|
||||
Rabbitmq.Atom.Coerce.to_atom(c)
|
||||
end
|
||||
def normalize(:longnames, true), do: :longnames
|
||||
def normalize(:longnames, "true"), do: :longnames
|
||||
def normalize(:longnames, 'true'), do: :longnames
|
||||
|
|
@ -44,7 +49,8 @@ defmodule RabbitMQ.CLI.Core.Config do
|
|||
:plugins_dir -> "RABBITMQ_PLUGINS_DIR";
|
||||
:enabled_plugins_file -> "RABBITMQ_ENABLED_PLUGINS_FILE";
|
||||
:node -> "RABBITMQ_NODENAME";
|
||||
:aliases_file -> "RABBITMQ_CLI_ALIASES_FILE"
|
||||
:aliases_file -> "RABBITMQ_CLI_ALIASES_FILE";
|
||||
:erlang_cookie -> "RABBITMQ_ERLANG_COOKIE";
|
||||
_ -> ""
|
||||
end
|
||||
System.get_env(system_env_option)
|
||||
|
|
|
|||
|
|
@ -27,13 +27,24 @@ defmodule RabbitMQ.CLI.Core.Distribution do
|
|||
def start(options) do
|
||||
node_name_type = Config.get_option(:longnames, options)
|
||||
:rabbit_nodes.ensure_epmd()
|
||||
start(node_name_type, 10, :undefined)
|
||||
distribution = start(node_name_type, 10, :undefined)
|
||||
ensure_cookie(options)
|
||||
distribution
|
||||
end
|
||||
|
||||
def start_as(node_name, opts) do
|
||||
def start_as(node_name, options) do
|
||||
:rabbit_nodes.ensure_epmd()
|
||||
node_name_type = Config.get_option(:longnames, opts)
|
||||
:net_kernel.start([node_name, node_name_type])
|
||||
node_name_type = Config.get_option(:longnames, options)
|
||||
distribution = :net_kernel.start([node_name, node_name_type])
|
||||
ensure_cookie(options)
|
||||
distribution
|
||||
end
|
||||
|
||||
def ensure_cookie(options) do
|
||||
case Config.get_option(:erlang_cookie, options) do
|
||||
nil -> :ok;
|
||||
cookie -> Node.set_cookie(cookie)
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
|
|
|
|||
|
|
@ -170,7 +170,8 @@ defmodule RabbitMQ.CLI.Core.Parser do
|
|||
mnesia_dir: :string,
|
||||
plugins_dir: :string,
|
||||
enabled_plugins_file: :string,
|
||||
aliases_file: :string
|
||||
aliases_file: :string,
|
||||
erlang_cookie: :atom
|
||||
]
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
## The contents of this file are subject to the Mozilla Public License
|
||||
## Version 1.1 (the "License"); you may not use this file except in
|
||||
## compliance with the License. You may obtain a copy of the License
|
||||
## at http://www.mozilla.org/MPL/
|
||||
##
|
||||
## Software distributed under the License is distributed on an "AS IS"
|
||||
## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
||||
## the License for the specific language governing rights and
|
||||
## limitations under the License.
|
||||
##
|
||||
## The Original Code is RabbitMQ.
|
||||
##
|
||||
## The Initial Developer of the Original Code is GoPivotal, Inc.
|
||||
## Copyright (c) 2007-2017 Pivotal Software, Inc. All rights reserved.
|
||||
|
||||
alias RabbitMQ.CLI.Core.Distribution, as: Distribution
|
||||
|
||||
defmodule DostributionTest do
|
||||
use ExUnit.Case, async: false
|
||||
import TestHelper
|
||||
|
||||
setup_all do
|
||||
:net_kernel.stop()
|
||||
:ok
|
||||
end
|
||||
|
||||
test "set cookie via environment variable" do
|
||||
on_exit(fn ->
|
||||
:net_kernel.stop()
|
||||
System.delete_env("RABBITMQ_ERLANG_COOKIE")
|
||||
end)
|
||||
:nocookie = Node.get_cookie()
|
||||
System.put_env("RABBITMQ_ERLANG_COOKIE", "mycookie")
|
||||
opts = %{}
|
||||
Distribution.start(opts)
|
||||
:mycookie = Node.get_cookie()
|
||||
end
|
||||
|
||||
test "set cookie via argument" do
|
||||
on_exit(fn ->
|
||||
:net_kernel.stop()
|
||||
end)
|
||||
:nocookie = Node.get_cookie()
|
||||
opts = %{erlang_cookie: :mycookie}
|
||||
Distribution.start(opts)
|
||||
:mycookie = Node.get_cookie()
|
||||
end
|
||||
end
|
||||
|
|
@ -27,9 +27,7 @@ defmodule RabbitMQCtlTest do
|
|||
set_scope(:all)
|
||||
on_exit([], fn ->
|
||||
:erlang.disconnect_node(get_rabbit_hostname())
|
||||
|
||||
end)
|
||||
|
||||
:ok
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue