diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-01-17 11:27:38 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-01-17 13:32:38 +0100 |
commit | 531f4c20a21d79b9b8c839e5ed403ad97543f2bb (patch) | |
tree | c23f390ff59cfb579eb95b0174c8e6b4387e0db1 /node-repository/src | |
parent | 5dfcc4b234750b3df603d4baf97601c68745c4e7 (diff) |
Add networks field
Diffstat (limited to 'node-repository/src')
4 files changed, 23 insertions, 3 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancer.java index c07666cee63..1230c9dc41e 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancer.java @@ -5,6 +5,7 @@ import com.google.common.collect.ImmutableSortedSet; import com.yahoo.config.provision.HostName; import com.yahoo.vespa.hosted.provision.maintenance.LoadBalancerExpirer; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Set; @@ -19,18 +20,20 @@ public class LoadBalancer { private final LoadBalancerId id; private final HostName hostname; private final Set<Integer> ports; + private final Set<String> networks; private final Set<Real> reals; private final boolean inactive; // TODO: Remove this when no longer used by internal code public LoadBalancer(LoadBalancerId id, HostName hostname, List<Integer> ports, List<Real> reals, boolean inactive) { - this(id, hostname, ImmutableSortedSet.copyOf(ports), ImmutableSortedSet.copyOf(reals), inactive); + this(id, hostname, ImmutableSortedSet.copyOf(ports), Collections.emptySet(), ImmutableSortedSet.copyOf(reals), inactive); } - public LoadBalancer(LoadBalancerId id, HostName hostname, Set<Integer> ports, Set<Real> reals, boolean inactive) { + public LoadBalancer(LoadBalancerId id, HostName hostname, Set<Integer> ports, Set<String> networks, Set<Real> reals, boolean inactive) { this.id = Objects.requireNonNull(id, "id must be non-null"); this.hostname = Objects.requireNonNull(hostname, "hostname must be non-null"); this.ports = ImmutableSortedSet.copyOf(requirePorts(ports)); + this.networks = ImmutableSortedSet.copyOf(Objects.requireNonNull(networks, "networks must be non-null")); this.reals = ImmutableSortedSet.copyOf(Objects.requireNonNull(reals, "targets must be non-null")); this.inactive = inactive; } @@ -50,6 +53,11 @@ public class LoadBalancer { return ports; } + /** Networks (CIDR blocks) of this load balancer */ + public Set<String> networks() { + return networks; + } + /** Real servers behind this load balancer */ public Set<Real> reals() { return reals; @@ -65,7 +73,7 @@ public class LoadBalancer { /** Return a copy of this that is set inactive */ public LoadBalancer deactivate() { - return new LoadBalancer(id, hostname, ports, reals, true); + return new LoadBalancer(id, hostname, ports, networks, reals, true); } private static Set<Integer> requirePorts(Set<Integer> ports) { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java index c3ec3ea9402..c20f6f50237 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java @@ -32,6 +32,7 @@ public class LoadBalancerServiceMock implements LoadBalancerService { new LoadBalancerId(application, cluster), HostName.from("lb-" + application.toShortString() + "-" + cluster.value()), Collections.singleton(4443), + Collections.singleton("10.2.3.4/24"), reals, false); loadBalancers.put(loadBalancer.id(), loadBalancer); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java index 53f825f960b..334e851a4e5 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java @@ -26,6 +26,7 @@ public class LoadBalancerSerializer { private static final String hostnameField = "hostname"; private static final String inactiveField = "inactive"; private static final String portsField = "ports"; + private static final String networksField = "networks"; private static final String realsField = "reals"; private static final String ipAddressField = "ipAddress"; private static final String portField = "port"; @@ -38,6 +39,8 @@ public class LoadBalancerSerializer { root.setString(hostnameField, loadBalancer.hostname().toString()); Cursor portArray = root.setArray(portsField); loadBalancer.ports().forEach(portArray::addLong); + Cursor networkArray = root.setArray(networksField); + loadBalancer.networks().forEach(networkArray::addString); Cursor realArray = root.setArray(realsField); loadBalancer.reals().forEach(real -> { Cursor realObject = realArray.addObject(); @@ -68,9 +71,15 @@ public class LoadBalancerSerializer { Set<Integer> ports = new LinkedHashSet<>(); object.field(portsField).traverse((ArrayTraverser) (i, port) -> ports.add((int) port.asLong())); + Set<String> networks = new LinkedHashSet<>(); + if (object.field(networksField).valid()) { // TODO: Remove check after 2019-03-01 + object.field(networksField).traverse((ArrayTraverser) (i, network) -> networks.add(network.asString())); + } + return new LoadBalancer(LoadBalancerId.fromSerializedForm(object.field(idField).asString()), HostName.from(object.field(hostnameField).asString()), ports, + networks, reals, object.field(inactiveField).asBool()); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java index ce8475a3a07..e0e62fbe628 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java @@ -25,6 +25,7 @@ public class LoadBalancerSerializerTest { ClusterSpec.Id.from("qrs")), HostName.from("lb-host"), ImmutableSet.of(4080, 4443), + ImmutableSet.of("10.2.3.4/24"), ImmutableSet.of(new Real(HostName.from("real-1"), "127.0.0.1", 4080), @@ -37,6 +38,7 @@ public class LoadBalancerSerializerTest { assertEquals(loadBalancer.id(), serialized.id()); assertEquals(loadBalancer.hostname(), serialized.hostname()); assertEquals(loadBalancer.ports(), serialized.ports()); + assertEquals(loadBalancer.networks(), serialized.networks()); assertEquals(loadBalancer.inactive(), serialized.inactive()); assertEquals(loadBalancer.reals(), serialized.reals()); } |