Skip to content

Commit a3d80dd

Browse files
committed
Add aws_ec2_instance_states configuration option
Adds a new configuration option to filter EC2 instances by state during peer discovery. This prevents dead or dying instances from being included in cluster membership during node joins. The configuration accepts a list of instance state names to include in discovery results. The default value is `["running", "pending"]`, which excludes instances in `stopping`, `stopped`, `shutting-down`, and `terminated` states. Configuration can be set via `rabbitmq.conf`: cluster_formation.aws.ec2_instance_states.1 = running cluster_formation.aws.ec2_instance_states.2 = pending Or via environment variable: AWS_EC2_INSTANCE_STATES="running,pending" The schema file includes cuttlefish mappings to support the `rabbitmq.conf` syntax, and test snippets verify the configuration parsing works correctly for both single and multiple state values.
1 parent 0c21d68 commit a3d80dd

3 files changed

Lines changed: 44 additions & 0 deletions

File tree

deps/rabbitmq_peer_discovery_aws/priv/schema/rabbitmq_peer_discovery_aws.schema

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,17 @@ fun(Conf) ->
108108
Value -> rabbit_peer_discovery_util:as_list(Value)
109109
end
110110
end}.
111+
112+
%% ec2_instance_states
113+
114+
{mapping, "cluster_formation.aws.ec2_instance_states.$state", "rabbit.cluster_formation.peer_discovery_aws.aws_ec2_instance_states", [
115+
{datatype, string}
116+
]}.
117+
118+
{translation, "rabbit.cluster_formation.peer_discovery_aws.aws_ec2_instance_states",
119+
fun(Conf) ->
120+
case cuttlefish_variable:filter_by_prefix("cluster_formation.aws.ec2_instance_states", Conf) of
121+
[] -> ["running", "pending"];
122+
Settings -> [V || {_K, V} <- Settings]
123+
end
124+
end}.

deps/rabbitmq_peer_discovery_aws/src/rabbit_peer_discovery_aws.erl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@
6666
type = atom,
6767
env_variable = "AWS_USE_PRIVATE_IP",
6868
default_value = false
69+
},
70+
aws_ec2_instance_states => #peer_discovery_config_entry_meta{
71+
type = list,
72+
env_variable = "AWS_EC2_INSTANCE_STATES",
73+
default_value = ["running", "pending"]
6974
}
7075
}).
7176

deps/rabbitmq_peer_discovery_aws/test/config_schema_SUITE_data/rabbitmq_peer_discovery_aws.snippets

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,5 +103,30 @@
103103
]}
104104
]}
105105
], [rabbitmq_peer_discovery_aws]
106+
},
107+
{aws_ec2_instance_states,
108+
"cluster_formation.aws.ec2_instance_states.1 = running
109+
cluster_formation.aws.ec2_instance_states.2 = pending",
110+
[
111+
{rabbit, [
112+
{cluster_formation, [
113+
{peer_discovery_aws, [
114+
{aws_ec2_instance_states, ["running", "pending"]}
115+
]}
116+
]}
117+
]}
118+
], [rabbitmq_peer_discovery_aws]
119+
},
120+
{aws_ec2_instance_states_single,
121+
"cluster_formation.aws.ec2_instance_states.1 = running",
122+
[
123+
{rabbit, [
124+
{cluster_formation, [
125+
{peer_discovery_aws, [
126+
{aws_ec2_instance_states, ["running"]}
127+
]}
128+
]}
129+
]}
130+
], [rabbitmq_peer_discovery_aws]
106131
}
107132
].

0 commit comments

Comments
 (0)