mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-09 22:45:04 +00:00
EC2 Discover: Support filtering instances by tags, closes #551.
This commit is contained in:
parent
ff0eeb3d1a
commit
698f67a31a
@ -23,6 +23,7 @@ import com.amazonaws.services.ec2.AmazonEC2;
|
|||||||
import com.amazonaws.services.ec2.model.*;
|
import com.amazonaws.services.ec2.model.*;
|
||||||
import org.elasticsearch.cluster.node.DiscoveryNode;
|
import org.elasticsearch.cluster.node.DiscoveryNode;
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
|
import org.elasticsearch.common.collect.ImmutableMap;
|
||||||
import org.elasticsearch.common.collect.ImmutableSet;
|
import org.elasticsearch.common.collect.ImmutableSet;
|
||||||
import org.elasticsearch.common.collect.Lists;
|
import org.elasticsearch.common.collect.Lists;
|
||||||
import org.elasticsearch.common.collect.Sets;
|
import org.elasticsearch.common.collect.Sets;
|
||||||
@ -35,6 +36,7 @@ import org.elasticsearch.discovery.zen.ping.unicast.UnicastHostsProvider;
|
|||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -57,6 +59,8 @@ public class AwsEc2UnicastHostsProvider extends AbstractComponent implements Uni
|
|||||||
|
|
||||||
private final ImmutableSet<String> groups;
|
private final ImmutableSet<String> groups;
|
||||||
|
|
||||||
|
private final ImmutableMap<String, String> tags;
|
||||||
|
|
||||||
private final ImmutableSet<String> availabilityZones;
|
private final ImmutableSet<String> availabilityZones;
|
||||||
|
|
||||||
private final HostType hostType;
|
private final HostType hostType;
|
||||||
@ -71,6 +75,8 @@ public class AwsEc2UnicastHostsProvider extends AbstractComponent implements Uni
|
|||||||
this.bindAnyGroup = componentSettings.getAsBoolean("any_group", true);
|
this.bindAnyGroup = componentSettings.getAsBoolean("any_group", true);
|
||||||
this.groups = ImmutableSet.copyOf(componentSettings.getAsArray("groups"));
|
this.groups = ImmutableSet.copyOf(componentSettings.getAsArray("groups"));
|
||||||
|
|
||||||
|
this.tags = componentSettings.getByPrefix("tag.").getAsMap();
|
||||||
|
|
||||||
Set<String> availabilityZones = Sets.newHashSet(componentSettings.getAsArray("availability_zones"));
|
Set<String> availabilityZones = Sets.newHashSet(componentSettings.getAsArray("availability_zones"));
|
||||||
if (componentSettings.get("availability_zones") != null) {
|
if (componentSettings.get("availability_zones") != null) {
|
||||||
availabilityZones.addAll(Strings.commaDelimitedListToSet(componentSettings.get("availability_zones")));
|
availabilityZones.addAll(Strings.commaDelimitedListToSet(componentSettings.get("availability_zones")));
|
||||||
@ -110,6 +116,33 @@ public class AwsEc2UnicastHostsProvider extends AbstractComponent implements Uni
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// see if we need to filter by tags
|
||||||
|
boolean filterByTag = false;
|
||||||
|
if (!tags.isEmpty()) {
|
||||||
|
if (instance.getTags() == null) {
|
||||||
|
filterByTag = true;
|
||||||
|
} else {
|
||||||
|
// check that all tags listed are there on the instance
|
||||||
|
for (Map.Entry<String, String> entry : tags.entrySet()) {
|
||||||
|
boolean found = false;
|
||||||
|
for (Tag tag : instance.getTags()) {
|
||||||
|
if (entry.getKey().equals(tag.getKey()) && entry.getValue().equals(tag.getValue())) {
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
filterByTag = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (filterByTag) {
|
||||||
|
logger.trace("filtering out instance {} based tags {}, not part of {}", instance.getInstanceId(), tags, instance.getTags());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
InstanceState state = instance.getState();
|
InstanceState state = instance.getState();
|
||||||
if (state.getName().equalsIgnoreCase("pending") || state.getName().equalsIgnoreCase("running")) {
|
if (state.getName().equalsIgnoreCase("pending") || state.getName().equalsIgnoreCase("running")) {
|
||||||
String address = null;
|
String address = null;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user