aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentInstanceSpec.java2
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java7
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java35
3 files changed, 42 insertions, 2 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentInstanceSpec.java b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentInstanceSpec.java
index c04874f2b16..6ce08250649 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentInstanceSpec.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentInstanceSpec.java
@@ -288,7 +288,7 @@ public class DeploymentInstanceSpec extends DeploymentSpec.Steps {
/** Returns whether this instance deploys to the given zone, either implicitly or explicitly */
public boolean deploysTo(Environment environment, RegionName region) {
- return zones().stream().anyMatch(zone -> zone.concerns(environment, Optional.of(region)));
+ return zones().stream().anyMatch(zone -> zone.concerns(environment, Optional.ofNullable(region)));
}
/** Returns the zone endpoint specified for the given region, or empty. */
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 fdaa7d57074..2ab7c128046 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
@@ -223,11 +223,16 @@ public class DeploymentSpec {
* 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().isTest()
&& instances().stream()
.anyMatch(spec -> spec.zoneEndpoints().getOrDefault(cluster, Map.of()).values().stream()
.anyMatch(endpoint -> ! endpoint.isPublicEndpoint()))) return ZoneEndpoint.privateEndpoint;
+
+ if (zone.environment().isManuallyDeployed())
+ return instance(instance).filter(spec -> spec.deploysTo(zone.environment(), zone.region()))
+ .map(spec -> spec.zoneEndpoints().getOrDefault(cluster, Map.of()).get(null))
+ .orElse(ZoneEndpoint.defaultEndpoint);
+
if (zone.environment() != Environment.prod) return ZoneEndpoint.defaultEndpoint;
return instance(instance).flatMap(spec -> spec.zoneEndpoint(zone, cluster))
.orElse(ZoneEndpoint.defaultEndpoint);
diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java
index a3df216eea7..d950970f0bb 100644
--- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java
+++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java
@@ -1232,6 +1232,19 @@ public class DeploymentSpecTest {
<allow with='gcp-service-connect' project='nine' />
</endpoint>
</endpoints>
+ <dev />
+ </instance>
+ <instance id='other'>
+ <dev />
+ <perf />
+ <endpoints>
+ <endpoint container-id='pew' type='private' />
+ </endpoints>
+ </instance>
+ <instance id='last'>
+ <endpoints>
+ <endpoint container-id='pew' type='private' />
+ </endpoints>
</instance>
</deployment>""");
@@ -1249,6 +1262,8 @@ public class DeploymentSpecTest {
var zone = from(prod, RegionName.from("us-east"));
var testZone = from(test, RegionName.from("us-east"));
+ var devZone = from(dev, RegionName.from("us-east"));
+ var perfZone = from(perf, RegionName.from("us-east"));
assertEquals(ZoneEndpoint.defaultEndpoint,
spec.zoneEndpoint(InstanceName.from("custom"), zone, ClusterSpec.Id.from("bax")));
assertEquals(ZoneEndpoint.defaultEndpoint,
@@ -1260,9 +1275,29 @@ public class DeploymentSpecTest {
assertEquals(ZoneEndpoint.privateEndpoint,
spec.zoneEndpoint(InstanceName.from("default"), testZone, ClusterSpec.Id.from("froz")));
+ assertEquals(ZoneEndpoint.defaultEndpoint,
+ spec.zoneEndpoint(InstanceName.from("default"), devZone, ClusterSpec.Id.from("bax")));
+ assertEquals(ZoneEndpoint.privateEndpoint,
+ spec.zoneEndpoint(InstanceName.from("default"), devZone, ClusterSpec.Id.from("froz")));
+
+ assertEquals(ZoneEndpoint.defaultEndpoint,
+ spec.zoneEndpoint(InstanceName.from("default"), perfZone, ClusterSpec.Id.from("bax")));
+ assertEquals(ZoneEndpoint.defaultEndpoint,
+ spec.zoneEndpoint(InstanceName.from("default"), perfZone, ClusterSpec.Id.from("froz")));
+
assertEquals(new ZoneEndpoint(false, true, List.of(new AllowedUrn(AccessType.awsPrivateLink, "barn"),
new AllowedUrn(AccessType.gcpServiceConnect, "nine"))),
spec.zoneEndpoint(InstanceName.from("default"), zone, ClusterSpec.Id.from("froz")));
+
+ assertEquals(new ZoneEndpoint(true, true, List.of()),
+ spec.zoneEndpoint(InstanceName.from("other"), devZone, ClusterSpec.Id.from("pew")));
+ assertEquals(new ZoneEndpoint(true, true, List.of()),
+ spec.zoneEndpoint(InstanceName.from("other"), perfZone, ClusterSpec.Id.from("pew")));
+
+ assertEquals(ZoneEndpoint.defaultEndpoint,
+ spec.zoneEndpoint(InstanceName.from("last"), devZone, ClusterSpec.Id.from("pew")));
+ assertEquals(ZoneEndpoint.defaultEndpoint,
+ spec.zoneEndpoint(InstanceName.from("last"), perfZone, ClusterSpec.Id.from("pew")));
}
@Test