|
| 1 | +-module(rabbit_cli). |
| 2 | + |
| 3 | +-include_lib("kernel/include/logger.hrl"). |
| 4 | + |
| 5 | +-export([main/1]). |
| 6 | + |
| 7 | +main(Args) -> |
| 8 | + Nodename = determine_rabbitmq_nodename(Args), |
| 9 | + ?LOG_ALERT("Nodename = ~p", [Nodename]), |
| 10 | + io:format("Nodename = ~p~n", [Nodename]), |
| 11 | + erlang:halt(). |
| 12 | + |
| 13 | +determine_rabbitmq_nodename(Args) -> |
| 14 | + case get_rabbitmq_nodename_from_args(Args) of |
| 15 | + {ok, Args1} -> |
| 16 | + GuessedNodename = guess_rabbitmq_nodename(), |
| 17 | + {ok, Args1, GuessedNodename}; |
| 18 | + {ok, Args1, Nodename} -> |
| 19 | + {ok, Args1, Nodename} |
| 20 | + end. |
| 21 | + |
| 22 | +get_rabbitmq_nodename_from_args(Args) -> |
| 23 | + Definition = #{arguments => |
| 24 | + [#{name => node, |
| 25 | + long => "-node", |
| 26 | + short => $n}, |
| 27 | + #{name => rest, |
| 28 | + nargs => list, |
| 29 | + action => extend, |
| 30 | + required => false, |
| 31 | + default => []}]}, |
| 32 | + case argparse:parse(Args, Definition, #{}) of |
| 33 | + {ok, #{node := Nodename, rest := Rest}, _, _} -> |
| 34 | + {ok, {Nodename, Rest}}; |
| 35 | + {ok, #{rest := Rest}, _, _} -> |
| 36 | + {ok, Rest} |
| 37 | + end. |
| 38 | + |
| 39 | +guess_rabbitmq_nodename() -> |
| 40 | + case net_adm:names() of |
| 41 | + {ok, NamesAndPorts} -> |
| 42 | + Names0 = [Name || {Name, _Port} <- NamesAndPorts], |
| 43 | + Names1 = lists:sort(Names0), |
| 44 | + Names2 = lists:filter( |
| 45 | + fun |
| 46 | + ("rabbit" ++ _) -> true; |
| 47 | + (_) -> false |
| 48 | + end, Names1), |
| 49 | + case Names2 of |
| 50 | + [First | _] -> |
| 51 | + First; |
| 52 | + [] -> |
| 53 | + "rabbit" |
| 54 | + end; |
| 55 | + {error, address} -> |
| 56 | + "rabbit" |
| 57 | + end. |
0 commit comments