diff options
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 |