summaryrefslogtreecommitdiffstats
path: root/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2023-01-18 13:29:34 +0100
committerjonmv <venstad@gmail.com>2023-01-18 13:29:34 +0100
commit0cb625f5fd5f94b4b8025a9d4f9b546c7ec94d41 (patch)
tree1f4c98f26d6dc4b339ce26c4f3b550e186881300 /config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
parenta395e87d6073c5b2d09dee8fdd2f5fb43f8192d4 (diff)
Revert "Merge pull request #25614 from vespa-engine/revert-25587-jonmv/private-endpoints"
This reverts commit 7b736f0a09444664cff118eac5b28e608632de72, reversing changes made to 6c457e6dd5993ec2ef15177dab4a16e3d3702b85.
Diffstat (limited to 'config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java')
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java26
1 files changed, 25 insertions, 1 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
index 6c519a4656e..d731e09d4e4 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
@@ -6,16 +6,21 @@ import com.yahoo.config.application.api.xml.DeploymentSpecXmlReader;
import com.yahoo.config.provision.AthenzDomain;
import com.yahoo.config.provision.AthenzService;
import com.yahoo.config.provision.CloudAccount;
+import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.RegionName;
+import com.yahoo.config.provision.ZoneEndpoint;
+import com.yahoo.config.provision.zone.ZoneId;
import java.io.Reader;
import java.time.Duration;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -47,7 +52,7 @@ public class DeploymentSpec {
private final List<Step> steps;
- // Attributes which can be set on the root tag and which must be available outside of any particular instance
+ // Attributes which can be set on the root tag and which must be available outside any particular instance
private final Optional<Integer> majorVersion;
private final Optional<AthenzDomain> athenzDomain;
private final Optional<AthenzService> athenzService;
@@ -145,6 +150,10 @@ public class DeploymentSpec {
illegal(prefix + "targets undeclared region '" + target.region() +
"' in instance '" + target.instance() + "'");
}
+ if (instance.get().zoneEndpoint(ZoneId.from(Environment.prod, target.region()), ClusterSpec.Id.from(endpoint.containerId()))
+ .map(zoneEndpoint -> ! zoneEndpoint.isPublicEndpoint()).orElse(false))
+ illegal(prefix + "targets '" + target.region().value() + "' in '" + target.instance().value() +
+ "', but its zone endpoint has 'enabled' set to 'false'");
}
}
}
@@ -175,6 +184,21 @@ public class DeploymentSpec {
/** Cloud account set on the deployment root; see discussion for {@link #athenzService}. */
public Optional<CloudAccount> cloudAccount() { return cloudAccount; }
+ /**
+ * Returns the most specific zone endpoint, where specificity is given, in decreasing order:
+ * 1. The given instance has declared a zone endpoint for the cluster, for the given region.
+ * 2. The given instance has declared a universal zone endpoint for the cluster.
+ * 3. The application has declared a zone endpoint for the cluster, for the given region.
+ * 4. The application has declared a universal zone endpoint for the cluster.
+ * 5. None of the above apply, and the default of a publicly visible endpoint is used.
+ */
+ public ZoneEndpoint zoneEndpoint(InstanceName instance, ZoneId zone, ClusterSpec.Id cluster) {
+ // TODO: look up endpoints from <dev> tag, or so, if we're to support non-prod settings.
+ if (zone.environment() != Environment.prod) return ZoneEndpoint.defaultEndpoint;
+ return instance(instance).flatMap(spec -> spec.zoneEndpoint(zone, cluster))
+ .orElse(ZoneEndpoint.defaultEndpoint);
+ }
+
/** Returns the XML form of this spec, or null if it was not created by fromXml, nor is empty */
public String xmlForm() { return xmlForm; }