diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-11-22 14:07:40 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2018-11-23 11:16:57 +0100 |
commit | 6f2dc7361f36eeb661da6fc8195be502855e4ec5 (patch) | |
tree | 1198c915dc43cda26e023d877de39332a119342a /node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancer.java | |
parent | 0713e24de6a12c3584112c9af60dc4105d2056d8 (diff) |
Add load balancer provisioner
Diffstat (limited to 'node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancer.java')
-rw-r--r-- | node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancer.java | 73 |
1 files changed, 73 insertions, 0 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 new file mode 100644 index 00000000000..07bd1ea06ed --- /dev/null +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancer.java @@ -0,0 +1,73 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.provision.lb; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Ordering; +import com.yahoo.config.provision.HostName; + +import java.util.List; +import java.util.Objects; + +/** + * Represents a load balancer for an application. + * + * @author mpolden + */ +public class LoadBalancer { + + private final LoadBalancerId id; + private final HostName hostname; + private final List<Integer> ports; + private final List<Real> reals; + private final boolean deleted; + + public LoadBalancer(LoadBalancerId id, HostName hostname, List<Integer> ports, List<Real> reals, boolean deleted) { + this.id = Objects.requireNonNull(id, "id must be non-null"); + this.hostname = Objects.requireNonNull(hostname, "hostname must be non-null"); + this.ports = Ordering.natural().immutableSortedCopy(requirePorts(ports)); + this.reals = ImmutableList.copyOf(Objects.requireNonNull(reals, "targets must be non-null")); + this.deleted = deleted; + } + + /** An identifier for this load balancer. The ID is unique inside the zone */ + public LoadBalancerId id() { + return id; + } + + /** Fully-qualified domain name of this load balancer. This hostname can be used for query and feed. */ + public HostName hostname() { + return hostname; + } + + /** Listening port(s) of this load balancer */ + public List<Integer> ports() { + return ports; + } + + /** Real servers behind this load balancer */ + public List<Real> reals() { + return reals; + } + + /** Whether this load balancer has been deleted */ + public boolean deleted() { + return deleted; + } + + /** Return a copy of this that is marked as deleted */ + public LoadBalancer delete() { + return new LoadBalancer(id, hostname, ports, reals, true); + } + + private static List<Integer> requirePorts(List<Integer> ports) { + Objects.requireNonNull(ports, "ports must be non-null"); + if (ports.isEmpty()) { + throw new IllegalArgumentException("ports must be non-empty"); + } + if (!ports.stream().allMatch(port -> port >= 1 && port <= 65535)) { + throw new IllegalArgumentException("all ports must be >= 1 and <= 65535"); + } + return ports; + } + +} |