From 4fa8521f1d23a64c0c0bc1b8fb11c1be7a7c3762 Mon Sep 17 00:00:00 2001 From: Morten Tokle Date: Wed, 22 Nov 2017 13:44:48 +0100 Subject: Move deployment spec ContainerCluster -> ContainerModelBuilder --- .../config/application/api/DeploymentSpec.java | 27 ++++++++++++---------- .../api/xml/DeploymentSpecXmlReader.java | 10 ++++---- .../config/application/api/DeploymentSpecTest.java | 8 +++---- 3 files changed, 25 insertions(+), 20 deletions(-) (limited to 'config-model-api') 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 1a2335c82db..64e986abf9b 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 @@ -3,6 +3,8 @@ package com.yahoo.config.application.api; import com.google.common.collect.ImmutableList; 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.Environment; import com.yahoo.config.provision.RegionName; @@ -48,8 +50,8 @@ public class DeploymentSpec { private final List changeBlockers; private final List steps; private final String xmlForm; - private final Optional athenzDomain; - private final Optional athenzService; + private final Optional athenzDomain; + private final Optional athenzService; public DeploymentSpec(Optional globalServiceId, UpgradePolicy upgradePolicy, List changeBlockers, List steps) { @@ -58,7 +60,7 @@ public class DeploymentSpec { public DeploymentSpec(Optional globalServiceId, UpgradePolicy upgradePolicy, List changeBlockers, List steps, String xmlForm, - Optional athenzDomain, Optional athenzService) { + Optional athenzDomain, Optional athenzService) { validateTotalDelay(steps); this.globalServiceId = globalServiceId; this.upgradePolicy = upgradePolicy; @@ -103,7 +105,7 @@ public class DeploymentSpec { throw new IllegalArgumentException("Athenz service configured for zone: " + zone + ", but Athenz domain is not configured"); } } - // if athenz domain is configured, athenz service must be set implicitly or directly on all zones. + // if athenz domain is not set, athenz service must be set implicitly or directly on all zones. } else if(! athenzService.isPresent()) { for (DeclaredZone zone : zones()) { if(! zone.athenzService().isPresent()) { @@ -244,17 +246,18 @@ public class DeploymentSpec { } /** Returns the athenz domain if configured */ - public Optional athenzDomain() { + public Optional athenzDomain() { return athenzDomain; } /** Returns the athenz service for environment/region if configured */ - public Optional athenzService(Environment environment, RegionName region) { - return zones().stream() + public Optional athenzService(Environment environment, RegionName region) { + AthenzService athenzService = zones().stream() .filter(zone -> zone.deploysTo(environment, Optional.of(region))) .findFirst() - .map(DeclaredZone::athenzService) - .orElse(athenzService); + .flatMap(DeclaredZone::athenzService) + .orElse(this.athenzService.orElse(null)); + return Optional.ofNullable(athenzService); } /** This may be invoked by a continuous build */ @@ -321,7 +324,7 @@ public class DeploymentSpec { private final boolean active; - private Optional athenzService; + private Optional athenzService; public DeclaredZone(Environment environment) { this(environment, Optional.empty(), false); @@ -331,7 +334,7 @@ public class DeploymentSpec { this(environment, region, active, Optional.empty()); } - public DeclaredZone(Environment environment, Optional region, boolean active, Optional athenzService) { + public DeclaredZone(Environment environment, Optional region, boolean active, Optional athenzService) { if (environment != Environment.prod && region.isPresent()) throw new IllegalArgumentException("Non-prod environments cannot specify a region"); if (environment == Environment.prod && ! region.isPresent()) @@ -350,7 +353,7 @@ public class DeploymentSpec { /** Returns whether this zone should receive production traffic */ public boolean active() { return active; } - public Optional athenzService() { return athenzService; } + public Optional athenzService() { return athenzService; } @Override public List zones() { return Collections.singletonList(this); } 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 1a970e53713..8bc4e0026a6 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 @@ -7,6 +7,8 @@ import com.yahoo.config.application.api.DeploymentSpec.Delay; import com.yahoo.config.application.api.DeploymentSpec.ParallelZones; import com.yahoo.config.application.api.DeploymentSpec.Step; import com.yahoo.config.application.api.TimeWindow; +import com.yahoo.config.provision.AthenzDomain; +import com.yahoo.config.provision.AthenzService; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.io.IOUtils; @@ -72,7 +74,7 @@ public class DeploymentSpecXmlReader { if (environment == Environment.prod) { for (Element stepTag : XML.getChildren(environmentTag)) { - Optional athenzService = stringAttribute("athenz-service", environmentTag); + Optional athenzService = stringAttribute("athenz-service", environmentTag).map(AthenzService::from); if (stepTag.getTagName().equals("delay")) { steps.add(new Delay(Duration.ofSeconds(longAttribute("hours", stepTag) * 60 * 60 + longAttribute("minutes", stepTag) * 60 + @@ -97,8 +99,8 @@ public class DeploymentSpecXmlReader { throw new IllegalArgumentException("Attribute 'global-service-id' is only valid on 'prod' tag."); } - Optional athenzDomain = stringAttribute("athenz-domain", root); - Optional athenzService = stringAttribute("athenz-service", root); + Optional athenzDomain = stringAttribute("athenz-domain", root).map(AthenzDomain::from); + Optional athenzService = stringAttribute("athenz-service", root).map(AthenzService::from); return new DeploymentSpec(globalServiceId, readUpgradePolicy(root), readChangeBlockers(root), steps, xmlForm, athenzDomain, athenzService); } @@ -146,7 +148,7 @@ public class DeploymentSpecXmlReader { return tagName.equals(testTag) || tagName.equals(stagingTag) || tagName.equals(prodTag); } - private DeclaredZone readDeclaredZone(Environment environment, Optional athenzService, Element regionTag) { + private DeclaredZone readDeclaredZone(Environment environment, Optional athenzService, Element regionTag) { return new DeclaredZone(environment, Optional.of(RegionName.from(XML.getValue(regionTag).trim())), readActive(regionTag), athenzService); } 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 5dcb3bc1ebe..99243125f9c 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 @@ -368,7 +368,7 @@ public class DeploymentSpecTest { } @Test - public void deploymentSpecWithAthenzIdentity() { + public void athenz_config_is_read_from_deployment() { StringReader r = new StringReader( "\n" + " \n" + @@ -382,7 +382,7 @@ public class DeploymentSpecTest { } @Test - public void deploymentSpecUsesServiceFromEnvironment() { + public void athenz_service_is_overridden_from_environment() { StringReader r = new StringReader( "\n" + " \n" + @@ -397,7 +397,7 @@ public class DeploymentSpecTest { } @Test(expected = IllegalArgumentException.class) - public void athenzDomainMissingService() { + public void it_fails_when_athenz_service_is_not_defined() { StringReader r = new StringReader( "\n" + " \n" + @@ -409,7 +409,7 @@ public class DeploymentSpecTest { } @Test(expected = IllegalArgumentException.class) - public void athenzDomainMissingDomain() { + public void it_fails_when_athenz_service_is_configured_but_not_athenz_domain() { StringReader r = new StringReader( "\n" + " \n" + -- cgit v1.2.3