summaryrefslogtreecommitdiffstats
path: root/config-model-api
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-10-11 16:55:44 +0200
committerJon Bratseth <bratseth@verizonmedia.com>2019-10-11 16:55:44 +0200
commit1b0bd1f8097c95e888a3bd543aacac4204d1ceab (patch)
tree50d68fc3bd532bee548e1f63b103e8d0b2b8d91d /config-model-api
parent54268089601113c0289397ed9fdbb56a96d2ca12 (diff)
Propagate Athenz service
Diffstat (limited to 'config-model-api')
-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.java3
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java4
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecDeprecatedAPITest.java27
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java73
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java28
6 files changed, 132 insertions, 5 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 df611d66b87..f96400fc9a9 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
@@ -129,7 +129,7 @@ public class DeploymentInstanceSpec extends DeploymentSpec.Step {
// If athenz domain is not set, athenz service cannot be set on any level
if (athenzDomain.isEmpty()) {
for (DeploymentSpec.DeclaredZone zone : zones()) {
- if(zone.athenzService().isPresent()) {
+ if (zone.athenzService().isPresent()) {
throw new IllegalArgumentException("Athenz service configured for zone: " + zone + ", but Athenz domain is not configured");
}
}
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 9b0454cffee..b5bf2725b09 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
@@ -252,9 +252,10 @@ public class DeploymentSpec {
return instance.get();
}
- /** Returns the steps of this which are instances */
+ /** Returns the step descendants of this which are instances */
public List<DeploymentInstanceSpec> instances() {
return steps.stream()
+ .flatMap(step -> step instanceof ParallelZones ? ((ParallelZones)step).steps.stream() : List.of(step).stream())
.filter(step -> step instanceof DeploymentInstanceSpec).map(DeploymentInstanceSpec.class::cast)
.collect(Collectors.toList());
}
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java
index 59b31985376..bc17ee0cb2b 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java
@@ -102,7 +102,7 @@ public class DeploymentSpecXmlReader {
if (topLevelTag.getTagName().equals(instanceTag))
steps.addAll(readInstanceContent(topLevelTag.getAttribute(idAttribute), topLevelTag, new MutableOptional<>(), root));
else
- steps.addAll(readNonInstanceSteps(topLevelTag, new MutableOptional<>(), topLevelTag)); // (No global service id here)
+ steps.addAll(readNonInstanceSteps(topLevelTag, new MutableOptional<>(), root)); // (No global service id here)
}
}
@@ -194,7 +194,7 @@ public class DeploymentSpecXmlReader {
longAttribute("seconds", stepTag))));
case parallelTag: // regions and instances may be nested within
return List.of(new ParallelZones(XML.getChildren(stepTag).stream()
- .flatMap(child -> readSteps(child, globalServiceId, stepTag).stream())
+ .flatMap(child -> readSteps(child, globalServiceId, parentTag).stream())
.collect(Collectors.toList())));
case regionTag:
return List.of(readDeclaredZone(Environment.prod, athenzService, testerFlavor, stepTag));
diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecDeprecatedAPITest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecDeprecatedAPITest.java
index dabdd0c4a69..4ab287ab5c0 100644
--- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecDeprecatedAPITest.java
+++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecDeprecatedAPITest.java
@@ -3,6 +3,7 @@ package com.yahoo.config.application.api;
import com.google.common.collect.ImmutableSet;
import com.yahoo.config.provision.Environment;
+import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.RegionName;
import org.junit.Test;
@@ -26,7 +27,7 @@ import static org.junit.Assert.fail;
/**
* @author bratseth
*/
-// TODO: Remove after October 2019
+// TODO: Remove after November 2019
public class DeploymentSpecDeprecatedAPITest {
@Test
@@ -374,6 +375,30 @@ public class DeploymentSpecDeprecatedAPITest {
}
@Test
+ public void athenz_config_is_propagated_through_parallel_zones() {
+ StringReader r = new StringReader(
+ "<deployment athenz-domain='domain' athenz-service='service'>" +
+ " <prod athenz-service='prod-service'>" +
+ " <region active='true'>us-central-1</region>" +
+ " <parallel>" +
+ " <region active='true'>us-west-1</region>" +
+ " <region active='true'>us-east-3</region>" +
+ " </parallel>" +
+ " </prod>" +
+ "</deployment>"
+ );
+ DeploymentSpec spec = DeploymentSpec.fromXml(r);
+ assertEquals("domain", spec.athenzDomain().get().value());
+ assertEquals("prod-service", spec.athenzService(Environment.prod,
+ RegionName.from("us-central-1")).get().value());
+ assertEquals("prod-service", spec.athenzService(Environment.prod,
+ RegionName.from("us-west-1")).get().value());
+ assertEquals("prod-service", spec.athenzService(Environment.prod,
+ RegionName.from("us-east-3")).get().value());
+ assertEquals("domain", spec.athenzDomain().get().value());
+ }
+
+ @Test
public void athenz_service_is_overridden_from_environment() {
StringReader r = new StringReader(
"<deployment athenz-domain='domain' athenz-service='service'>\n" +
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 c6035ac8d46..7b571417ef8 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
@@ -617,6 +617,79 @@ public class DeploymentSpecTest {
}
@Test
+ public void athenz_config_is_propagated_through_parallel_zones() {
+ StringReader r = new StringReader(
+ "<deployment athenz-domain='domain' athenz-service='service'>" +
+ " <instance id='instance1'>" +
+ " <prod athenz-service='prod-service'>" +
+ " <region active='true'>us-central-1</region>" +
+ " <parallel>" +
+ " <region active='true'>us-west-1</region>" +
+ " <region active='true'>us-east-3</region>" +
+ " </parallel>" +
+ " </prod>" +
+ " </instance>" +
+ "</deployment>"
+ );
+ DeploymentSpec spec = DeploymentSpec.fromXml(r);
+ assertEquals("domain", spec.athenzDomain().get().value());
+ assertEquals("prod-service", spec.athenzService(InstanceName.from("instance1"),
+ Environment.prod,
+ RegionName.from("us-west-1")).get().value());
+ assertEquals("service", spec.athenzService(InstanceName.from("non-existent"),
+ Environment.prod,
+ RegionName.from("us-west-1")).get().value());
+ assertEquals("domain", spec.requireInstance("instance1").athenzDomain().get().value());
+ assertEquals("prod-service", spec.requireInstance("instance1").athenzService(Environment.prod,
+ RegionName.from("us-central-1")).get().value());
+ assertEquals("prod-service", spec.requireInstance("instance1").athenzService(Environment.prod,
+ RegionName.from("us-west-1")).get().value());
+ assertEquals("prod-service", spec.requireInstance("instance1").athenzService(Environment.prod,
+ RegionName.from("us-east-3")).get().value());
+ }
+
+ @Test
+ public void athenz_config_is_propagated_through_parallel_zones_and_instances() {
+ StringReader r = new StringReader(
+ "<deployment athenz-domain='domain' athenz-service='service'>" +
+ " <parallel>" +
+ " <instance id='instance1'>" +
+ " <prod>" +
+ " <parallel>" +
+ " <region active='true'>us-west-1</region>" +
+ " <region active='true'>us-east-3</region>" +
+ " </parallel>" +
+ " </prod>" +
+ " </instance>" +
+ " <instance id='instance2'>" +
+ " <prod>" +
+ " <parallel>" +
+ " <region active='true'>us-west-1</region>" +
+ " <region active='true'>us-east-3</region>" +
+ " </parallel>" +
+ " </prod>" +
+ " </instance>" +
+ " </parallel>" +
+ "</deployment>"
+ );
+ DeploymentSpec spec = DeploymentSpec.fromXml(r);
+ assertEquals("domain", spec.athenzDomain().get().value());
+ assertEquals("service", spec.athenzService(InstanceName.from("instance1"),
+ Environment.prod,
+ RegionName.from("us-west-1")).get().value());
+ assertEquals("service", spec.athenzService(InstanceName.from("non-existent"),
+ Environment.prod,
+ RegionName.from("us-west-1")).get().value());
+ assertEquals("domain", spec.requireInstance("instance1").athenzDomain().get().value());
+ assertEquals("service", spec.requireInstance("instance1").athenzService(Environment.prod,
+ RegionName.from("us-west-1")).get().value());
+ assertEquals("service", spec.requireInstance("instance1").athenzService(Environment.prod,
+ RegionName.from("us-east-3")).get().value());
+ assertEquals("service", spec.requireInstance("instance2").athenzService(Environment.prod,
+ RegionName.from("us-east-3")).get().value());
+ }
+
+ @Test
public void athenz_config_is_read_from_instance() {
StringReader r = new StringReader(
"<deployment>" +
diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java
index ad5c6375aa6..7805b73cc6a 100644
--- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java
+++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecWithoutInstanceTest.java
@@ -3,6 +3,7 @@ package com.yahoo.config.application.api;
import com.google.common.collect.ImmutableSet;
import com.yahoo.config.provision.Environment;
+import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.RegionName;
import org.junit.Test;
@@ -373,6 +374,33 @@ public class DeploymentSpecWithoutInstanceTest {
}
@Test
+ public void athenz_config_is_propagated_through_parallel_zones() {
+ StringReader r = new StringReader(
+ "<deployment athenz-domain='domain' athenz-service='service'>" +
+ " <prod athenz-service='prod-service'>" +
+ " <region active='true'>us-central-1</region>" +
+ " <parallel>" +
+ " <region active='true'>us-west-1</region>" +
+ " <region active='true'>us-east-3</region>" +
+ " </parallel>" +
+ " </prod>" +
+ "</deployment>"
+ );
+ DeploymentSpec spec = DeploymentSpec.fromXml(r);
+ assertEquals("domain", spec.athenzDomain().get().value());
+ assertEquals("prod-service", spec.athenzService(InstanceName.from("default"),
+ Environment.prod,
+ RegionName.from("us-central-1")).get().value());
+ assertEquals("prod-service", spec.athenzService(InstanceName.from("default"),
+ Environment.prod,
+ RegionName.from("us-west-1")).get().value());
+ assertEquals("prod-service", spec.athenzService(InstanceName.from("default"),
+ Environment.prod,
+ RegionName.from("us-east-3")).get().value());
+ assertEquals("domain", spec.athenzDomain().get().value());
+ }
+
+ @Test
public void athenz_service_is_overridden_from_environment() {
StringReader r = new StringReader(
"<deployment athenz-domain='domain' athenz-service='service'>\n" +