@@ -99,12 +99,13 @@ Available commands:
9999
100100action (start_all , [NodeCount ], RpcTimeout ) ->
101101 io :format (" Starting all nodes...~n " , []),
102+ application :load (rabbit ),
102103 N = list_to_integer (NodeCount ),
103104 {NodePids , Running } =
104105 start_nodes (N , N , [], true ,
105106 rabbit_misc :nodeparts (
106107 getenv (" RABBITMQ_NODENAME" )),
107- list_to_integer ( getenv ( " RABBITMQ_NODE_PORT " ) ),
108+ get_node_tcp_listener ( 1 == N ),
108109 RpcTimeout ),
109110 write_pids_file (NodePids ),
110111 case Running of
@@ -158,26 +159,30 @@ action(rotate_logs, [Suffix], RpcTimeout) ->
158159% % Running is a boolean exhibiting success at some moment
159160start_nodes (0 , _ , PNodePid , Running , _ , _ , _ ) -> {PNodePid , Running };
160161
162+ start_nodes (1 , 1 , [], true , NodeName , NodeListen , RpcTimeout ) ->
163+ {NodePid , Started } = start_single_node (rabbit_misc :makenode (NodeName ),
164+ RpcTimeout ),
165+ start_nodes (0 , 1 , [NodePid ], Started , NodeName , NodeListen , RpcTimeout );
166+
161167start_nodes (N , Total , PNodePid , Running ,
162- NodeNameBase , NodePortBase , RpcTimeout ) ->
168+ NodeNameBase , { NodeIpAddress , NodePortBase } , RpcTimeout ) ->
163169 {NodePre , NodeSuff } = NodeNameBase ,
164170 NodeNumber = Total - N ,
165- NodePre1 = if NodeNumber == 0 ->
166- % % For compatibility with running a single node
167- NodePre ;
168- true ->
169- NodePre ++ " _" ++ integer_to_list (NodeNumber )
170- end ,
171+ NodePre1 = NodePre ++ " _" ++ integer_to_list (NodeNumber ),
171172 {NodePid , Started } = start_node (rabbit_misc :makenode ({NodePre1 , NodeSuff }),
172- NodePortBase + NodeNumber ,
173+ { NodeIpAddress , NodePortBase + NodeNumber } ,
173174 RpcTimeout ),
174175 start_nodes (N - 1 , Total , [NodePid | PNodePid ],
175- Started and Running ,
176- NodeNameBase , NodePortBase , RpcTimeout ).
176+ Started and Running , NodeNameBase ,
177+ { NodeIpAddress , NodePortBase } , RpcTimeout ).
177178
178- start_node (Node , NodePort , RpcTimeout ) ->
179+ start_node (Node , { NodeIpAddress , NodePort } , RpcTimeout ) ->
179180 os :putenv (" RABBITMQ_NODENAME" , atom_to_list (Node )),
180181 os :putenv (" RABBITMQ_NODE_PORT" , integer_to_list (NodePort )),
182+ os :putenv (" RABBITMQ_NODE_IP_ADDRESS" , atom_to_list (NodeIpAddress )),
183+ start_single_node (Node , RpcTimeout ).
184+
185+ start_single_node (Node , RpcTimeout ) ->
181186 io :format (" Starting node ~s ...~n " , [Node ]),
182187 case rpc :call (Node , os , getpid , []) of
183188 {badrpc , _ } ->
@@ -321,3 +326,21 @@ getenv(Var) ->
321326 false -> throw ({missing_env_var , Var });
322327 Value -> Value
323328 end .
329+
330+ get_node_tcp_listener (OneNode ) ->
331+ try
332+ {list_to_atom (getenv (" RABBITMQ_NODE_IP_ADDRESS" )),
333+ list_to_integer (getenv (" RABBITMQ_NODE_PORT" ))}
334+ catch _ ->
335+ case application :get_env (rabbit , tcp_listeners ) of
336+ {ok , [{_IpAddy , _Port } = Listener ]} ->
337+ Listener ;
338+ {ok , _Other } when OneNode ->
339+ it_matters_not ;
340+ {ok , Other } ->
341+ throw ({cannot_start_multiple_nodes , multiple_tcp_listeners ,
342+ Other });
343+ undefined ->
344+ throw ({missing_configuration , tcp_listeners })
345+ end
346+ end .
0 commit comments