aboutsummaryrefslogtreecommitdiffstats
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 18:59:51 +0100
committerjonmv <venstad@gmail.com>2023-01-18 18:59:51 +0100
commit669ae1bc6572c198e609bc20cacbdc592e8e2731 (patch)
tree0ecf6e5d73433301117b6ecebdd241eec472460a /config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
parentc47ed544a31a6b56f518901247212a47d8eb9d31 (diff)
Revert "Merge pull request #25624 from vespa-engine/revert-25617-jonmv/private-endpoints"
This reverts commit c47ed544a31a6b56f518901247212a47d8eb9d31, reversing changes made to e0191b4d49048f9398395dc8c1c60dfcb383f705.
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; }