diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-10-12 15:55:11 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-10-12 15:55:11 +0200 |
commit | 5e0502391c2ca7c4b0bfc9f4f652da2676f26314 (patch) | |
tree | 1fb5c7073f0af7b111d3290e4295a323d0d9ece2 /config-application-package | |
parent | 08f7a121fff008dd1307b106bd1b7d7a84433fe6 (diff) |
Add instance tags
Diffstat (limited to 'config-application-package')
9 files changed, 355 insertions, 67 deletions
diff --git a/config-application-package/src/main/java/com/yahoo/config/application/OverrideProcessor.java b/config-application-package/src/main/java/com/yahoo/config/application/OverrideProcessor.java index d7efca3b723..21bb193ef93 100644 --- a/config-application-package/src/main/java/com/yahoo/config/application/OverrideProcessor.java +++ b/config-application-package/src/main/java/com/yahoo/config/application/OverrideProcessor.java @@ -4,6 +4,7 @@ package com.yahoo.config.application; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.Tags; import com.yahoo.text.XML; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -23,7 +24,7 @@ import java.util.logging.Logger; import java.util.stream.Collectors; /** - * Handles overrides in a XML document according to the rules defined for multi environment application packages. + * Handles overrides in a XML document according to the rules defined for multi-environment application packages. * * Rules: * @@ -41,16 +42,19 @@ class OverrideProcessor implements PreProcessor { private final InstanceName instance; private final Environment environment; private final RegionName region; + private final Tags tags; private static final String ID_ATTRIBUTE = "id"; private static final String INSTANCE_ATTRIBUTE = "instance"; private static final String ENVIRONMENT_ATTRIBUTE = "environment"; private static final String REGION_ATTRIBUTE = "region"; + private static final String TAGS_ATTRIBUTE = "tags"; - public OverrideProcessor(InstanceName instance, Environment environment, RegionName region) { + public OverrideProcessor(InstanceName instance, Environment environment, RegionName region, Tags tags) { this.instance = instance; this.environment = environment; this.region = region; + this.tags = tags; } public Document process(Document input) throws TransformerException { @@ -80,6 +84,7 @@ class OverrideProcessor implements PreProcessor { child.removeAttributeNS(XmlPreProcessor.deployNamespaceUri, INSTANCE_ATTRIBUTE); child.removeAttributeNS(XmlPreProcessor.deployNamespaceUri, ENVIRONMENT_ATTRIBUTE); child.removeAttributeNS(XmlPreProcessor.deployNamespaceUri, REGION_ATTRIBUTE); + child.removeAttributeNS(XmlPreProcessor.deployNamespaceUri, TAGS_ATTRIBUTE); } } @@ -87,13 +92,16 @@ class OverrideProcessor implements PreProcessor { Set<InstanceName> instances = context.instances; Set<Environment> environments = context.environments; Set<RegionName> regions = context.regions; + Tags tags = context.tags; if (instances.isEmpty()) instances = getInstances(parent); if (environments.isEmpty()) environments = getEnvironments(parent); if (regions.isEmpty()) regions = getRegions(parent); - return Context.create(instances, environments, regions); + if (tags.isEmpty()) + tags = getTags(parent); + return Context.create(instances, environments, regions, tags); } /** @@ -128,17 +136,21 @@ class OverrideProcessor implements PreProcessor { throw new IllegalArgumentException("Regions in child (" + regions + ") are not a subset of those of the parent (" + context.regions + ") at " + child); } + + Tags tags = getTags(child); + if ( ! tags.isEmpty() && ! context.tags.isEmpty() && ! context.tags.containsAll(tags)) { + throw new IllegalArgumentException("Tags in child (" + environments + + ") are not a subset of those of the parent (" + context.tags + ") at " + child); + } } } - /** - * Prune elements that are not matching our environment and region - */ + /** Prune elements that are not matching our environment and region. */ private void pruneNonMatching(Element parent, List<Element> children) { Iterator<Element> elemIt = children.iterator(); while (elemIt.hasNext()) { Element child = elemIt.next(); - if ( ! matches(getInstances(child), getEnvironments(child), getRegions(child))) { + if ( ! matches(getInstances(child), getEnvironments(child), getRegions(child), getTags(child))) { parent.removeChild(child); elemIt.remove(); } @@ -147,7 +159,8 @@ class OverrideProcessor implements PreProcessor { private boolean matches(Set<InstanceName> elementInstances, Set<Environment> elementEnvironments, - Set<RegionName> elementRegions) { + Set<RegionName> elementRegions, + Tags elementTags) { if ( ! elementInstances.isEmpty()) { // match instance if ( ! elementInstances.contains(instance)) return false; } @@ -164,12 +177,14 @@ class OverrideProcessor implements PreProcessor { if ( ! environment.isMultiRegion() && elementEnvironments.isEmpty() ) return false; } + if ( ! elementTags.isEmpty()) { // match tags + if ( ! elementTags.intersects(tags)) return false; + } + return true; } - /** - * Find the most specific element and remove all others. - */ + /** Find the most specific element and remove all others. */ private void retainMostSpecific(Element parent, List<Element> children, Context context) { // Keep track of elements with highest number of matches (might be more than one element with same tag, need a list) List<Element> bestMatches = new ArrayList<>(); @@ -205,12 +220,15 @@ class OverrideProcessor implements PreProcessor { Set<InstanceName> elementInstances = hasInstance(child) ? getInstances(child) : context.instances; Set<Environment> elementEnvironments = hasEnvironment(child) ? getEnvironments(child) : context.environments; Set<RegionName> elementRegions = hasRegion(child) ? getRegions(child) : context.regions; + Tags elementTags = hasTag(child) ? getTags(child) : context.tags; if ( ! elementInstances.isEmpty() && elementInstances.contains(instance)) currentMatch++; if ( ! elementEnvironments.isEmpty() && elementEnvironments.contains(environment)) currentMatch++; if ( ! elementRegions.isEmpty() && elementRegions.contains(region)) currentMatch++; + if ( elementTags.intersects(tags)) + currentMatch++; return currentMatch; } @@ -233,16 +251,14 @@ class OverrideProcessor implements PreProcessor { return false; } - /** - * Retains all elements where at least one element is overridden. Removes non-overridden elements from map. - */ + /** Retains all elements where at least one element is overridden. Removes non-overridden elements from map. */ private void retainOverriddenElements(Map<String, List<Element>> elementsByTagName) { Iterator<Map.Entry<String, List<Element>>> it = elementsByTagName.entrySet().iterator(); while (it.hasNext()) { List<Element> elements = it.next().getValue(); boolean hasOverrides = false; for (Element element : elements) { - if (hasEnvironment(element) || hasRegion(element)) { + if (hasInstance(element) || hasEnvironment(element) || hasRegion(element) || hasTag(element)) { hasOverrides = true; } } @@ -264,24 +280,34 @@ class OverrideProcessor implements PreProcessor { return element.hasAttributeNS(XmlPreProcessor.deployNamespaceUri, ENVIRONMENT_ATTRIBUTE); } + private boolean hasTag(Element element) { + return element.hasAttributeNS(XmlPreProcessor.deployNamespaceUri, TAGS_ATTRIBUTE); + } + private Set<InstanceName> getInstances(Element element) { String instance = element.getAttributeNS(XmlPreProcessor.deployNamespaceUri, INSTANCE_ATTRIBUTE); - if (instance == null || instance.isEmpty()) return Collections.emptySet(); + if (instance == null || instance.isEmpty()) return Set.of(); return Arrays.stream(instance.split(" ")).map(InstanceName::from).collect(Collectors.toSet()); } private Set<Environment> getEnvironments(Element element) { String env = element.getAttributeNS(XmlPreProcessor.deployNamespaceUri, ENVIRONMENT_ATTRIBUTE); - if (env == null || env.isEmpty()) return Collections.emptySet(); + if (env == null || env.isEmpty()) return Set.of(); return Arrays.stream(env.split(" ")).map(Environment::from).collect(Collectors.toSet()); } private Set<RegionName> getRegions(Element element) { String reg = element.getAttributeNS(XmlPreProcessor.deployNamespaceUri, REGION_ATTRIBUTE); - if (reg == null || reg.isEmpty()) return Collections.emptySet(); + if (reg == null || reg.isEmpty()) return Set.of(); return Arrays.stream(reg.split(" ")).map(RegionName::from).collect(Collectors.toSet()); } + private Tags getTags(Element element) { + String env = element.getAttributeNS(XmlPreProcessor.deployNamespaceUri, TAGS_ATTRIBUTE); + if (env == null || env.isEmpty()) return Tags.empty(); + return Tags.fromString(env); + } + private Map<String, List<Element>> elementsByTagNameAndId(List<Element> children) { Map<String, List<Element>> elementsByTagName = new LinkedHashMap<>(); // Index by tag name @@ -336,21 +362,27 @@ class OverrideProcessor implements PreProcessor { final Set<InstanceName> instances; final Set<Environment> environments; final Set<RegionName> regions; + final Tags tags; - private Context(Set<InstanceName> instances, Set<Environment> environments, Set<RegionName> regions) { + private Context(Set<InstanceName> instances, + Set<Environment> environments, + Set<RegionName> regions, + Tags tags) { this.instances = Set.copyOf(instances); this.environments = Set.copyOf(environments); this.regions = Set.copyOf(regions); + this.tags = tags; } static Context empty() { - return new Context(Set.of(), Set.of(), Set.of()); + return new Context(Set.of(), Set.of(), Set.of(), Tags.empty()); } public static Context create(Set<InstanceName> instances, Set<Environment> environments, - Set<RegionName> regions) { - return new Context(instances, environments, regions); + Set<RegionName> regions, + Tags tags) { + return new Context(instances, environments, regions, tags); } } diff --git a/config-application-package/src/main/java/com/yahoo/config/application/XmlPreProcessor.java b/config-application-package/src/main/java/com/yahoo/config/application/XmlPreProcessor.java index ba68894c9f9..42333ea7662 100644 --- a/config-application-package/src/main/java/com/yahoo/config/application/XmlPreProcessor.java +++ b/config-application-package/src/main/java/com/yahoo/config/application/XmlPreProcessor.java @@ -5,6 +5,7 @@ import com.yahoo.config.application.FileSystemWrapper.FileWrapper; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.Tags; import com.yahoo.text.XML; import org.w3c.dom.Document; import org.xml.sax.InputSource; @@ -19,6 +20,7 @@ import java.io.IOException; import java.io.Reader; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * A preprocessor for services.xml files that handles deploy:environment, deploy:region, preprocess:properties, preprocess:include @@ -38,22 +40,53 @@ public class XmlPreProcessor { private final InstanceName instance; private final Environment environment; private final RegionName region; + private final Tags tags; private final List<PreProcessor> chain; - public XmlPreProcessor(File applicationDir, File xmlInput, InstanceName instance, Environment environment, RegionName region) throws IOException { - this(applicationDir, new FileReader(xmlInput), instance, environment, region); + // TODO: Remove after November 2022 + public XmlPreProcessor(File applicationDir, + File xmlInput, + InstanceName instance, + Environment environment, + RegionName region) throws IOException { + this(applicationDir, new FileReader(xmlInput), instance, environment, region, Tags.empty()); } - public XmlPreProcessor(File applicationDir, Reader xmlInput, InstanceName instance, Environment environment, RegionName region) { - this(FileSystemWrapper.getDefault(applicationDir.toPath()).wrap(applicationDir.toPath()), xmlInput, instance, environment, region); + public XmlPreProcessor(File applicationDir, + File xmlInput, + InstanceName instance, + Environment environment, + RegionName region, + Tags tags) throws IOException { + this(applicationDir, new FileReader(xmlInput), instance, environment, region, tags); } - public XmlPreProcessor(FileWrapper applicationDir, Reader xmlInput, InstanceName instance, Environment environment, RegionName region) { + public XmlPreProcessor(File applicationDir, + Reader xmlInput, + InstanceName instance, + Environment environment, + RegionName region, + Tags tags) { + this(FileSystemWrapper.getDefault(applicationDir.toPath()).wrap(applicationDir.toPath()), + xmlInput, + instance, + environment, + region, + tags); + } + + public XmlPreProcessor(FileWrapper applicationDir, + Reader xmlInput, + InstanceName instance, + Environment environment, + RegionName region, + Tags tags) { this.applicationDir = applicationDir; this.xmlInput = xmlInput; this.instance = instance; this.environment = environment; this.region = region; + this.tags = tags; this.chain = setupChain(); } @@ -73,7 +106,7 @@ public class XmlPreProcessor { private List<PreProcessor> setupChain() { List<PreProcessor> chain = new ArrayList<>(); chain.add(new IncludeProcessor(applicationDir)); - chain.add(new OverrideProcessor(instance, environment, region)); + chain.add(new OverrideProcessor(instance, environment, region, tags)); chain.add(new PropertiesProcessor()); chain.add(new ValidationProcessor()); // must be last in chain return chain; diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/DeployData.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/DeployData.java index 279af646a8c..c3e9b99f562 100644 --- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/DeployData.java +++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/DeployData.java @@ -2,6 +2,9 @@ package com.yahoo.config.model.application.provider; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.Tags; + +import java.util.Set; /** * Data generated or computed during deployment @@ -12,6 +15,8 @@ public class DeployData { private final ApplicationId applicationId; + private final Tags tags; + /** The absolute path to the directory holding the application */ private final String deployedFromDir; @@ -25,25 +30,16 @@ public class DeployData { private final long generation; private final long currentlyActiveGeneration; - // TODO: Remove when oldest version in use is 8.13 - public DeployData(String ignored, - String deployedFromDir, - ApplicationId applicationId, - Long deployTimestamp, - boolean internalRedeploy, - Long generation, - long currentlyActiveGeneration) { - this(deployedFromDir, applicationId, deployTimestamp, internalRedeploy, generation, currentlyActiveGeneration); - } - public DeployData(String deployedFromDir, ApplicationId applicationId, + Tags tags, Long deployTimestamp, boolean internalRedeploy, Long generation, long currentlyActiveGeneration) { this.deployedFromDir = deployedFromDir; this.applicationId = applicationId; + this.tags = tags; this.deployTimestamp = deployTimestamp; this.internalRedeploy = internalRedeploy; this.generation = generation; @@ -62,4 +58,6 @@ public class DeployData { public ApplicationId getApplicationId() { return applicationId; } + public Tags getTags() { return tags; } + } diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java index 7b483d0603c..e61ea01a99a 100644 --- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java +++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java @@ -17,6 +17,7 @@ import com.yahoo.config.model.application.AbstractApplicationPackage; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.InstanceName; +import com.yahoo.config.provision.Tags; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; import com.yahoo.io.HexDump; @@ -138,6 +139,7 @@ public class FilesApplicationPackage extends AbstractApplicationPackage { deployData.getDeployTimestamp(), deployData.isInternalRedeploy(), deployData.getApplicationId(), + deployData.getTags(), computeCheckSum(appDir), deployData.getGeneration(), deployData.getCurrentlyActiveGeneration()); @@ -484,6 +486,7 @@ public class FilesApplicationPackage extends AbstractApplicationPackage { ApplicationId.from(TenantName.defaultName(), ApplicationName.from(originalAppDir), InstanceName.defaultName()), + Tags.empty(), "", 0L, 0L); @@ -583,7 +586,8 @@ public class FilesApplicationPackage extends AbstractApplicationPackage { inputXml, metaData.getApplicationId().instance(), zone.environment(), - zone.region()) + zone.region(), + metaData.getTags()) .run(); try (FileOutputStream outputStream = new FileOutputStream(destination)) { diff --git a/config-application-package/src/test/java/com/yahoo/config/application/HostedOverrideProcessorTagsTest.java b/config-application-package/src/test/java/com/yahoo/config/application/HostedOverrideProcessorTagsTest.java new file mode 100644 index 00000000000..8d7431d33b6 --- /dev/null +++ b/config-application-package/src/test/java/com/yahoo/config/application/HostedOverrideProcessorTagsTest.java @@ -0,0 +1,124 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.application; + +import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.InstanceName; +import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.Tags; +import org.custommonkey.xmlunit.XMLUnit; +import org.junit.Test; +import org.w3c.dom.Document; + +import javax.xml.transform.TransformerException; +import java.io.StringReader; + +/** + * @author bratseth + */ +public class HostedOverrideProcessorTagsTest { + + static { + XMLUnit.setIgnoreWhitespace(true); + } + + private static final String input = + "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" + + "<services xmlns:deploy='vespa' xmlns:preprocess='?' version='1.0'>" + + " <container id='foo' version='1.0'>" + + " <nodes count='5' deploy:tags='a' deploy:environment='perf'/>" + + " <nodes count='10' deploy:tags='a b'/>" + + " <nodes count='20' deploy:tags='c'/>" + + " <search deploy:tags='b'/>" + + " <document-api deploy:tags='d'/>" + + " </container>" + + "</services>"; + + @Test + public void testParsingTagAPerf() throws TransformerException { + String expected = + "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" + + "<services xmlns:deploy='vespa' xmlns:preprocess='?' version='1.0'>" + + " <container id='foo' version='1.0'>" + + " <nodes count='5' required='true'/>" + + " </container>" + + "</services>"; + assertOverride(InstanceName.defaultName(), + Environment.perf, + RegionName.defaultName(), + Tags.fromString("a"), + expected); + } + + @Test + public void testParsingTagAProd() throws TransformerException { + String expected = + "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" + + "<services xmlns:deploy='vespa' xmlns:preprocess='?' version='1.0'>" + + " <container id='foo' version='1.0'>" + + " <nodes count='10' required='true'/>" + + " </container>" + + "</services>"; + assertOverride(InstanceName.defaultName(), + Environment.prod, + RegionName.defaultName(), + Tags.fromString("a"), + expected); + } + + @Test + public void testParsingTagB() throws TransformerException { + String expected = + "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" + + "<services xmlns:deploy='vespa' xmlns:preprocess='?' version='1.0'>" + + " <container id='foo' version='1.0'>" + + " <nodes count='10' required='true'/>" + + " <search/>" + + " </container>" + + "</services>"; + assertOverride(InstanceName.defaultName(), + Environment.prod, + RegionName.defaultName(), + Tags.fromString("b"), + expected); + } + + @Test + public void testParsingTagC() throws TransformerException { + String expected = + "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" + + "<services xmlns:deploy='vespa' xmlns:preprocess='?' version='1.0'>" + + " <container id='foo' version='1.0'>" + + " <nodes count='20' required='true'/>" + + " </container>" + + "</services>"; + assertOverride(InstanceName.defaultName(), + Environment.prod, + RegionName.defaultName(), + Tags.fromString("c"), + expected); + } + + @Test + public void testParsingTagCAndD() throws TransformerException { + String expected = + "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" + + "<services xmlns:deploy='vespa' xmlns:preprocess='?' version='1.0'>" + + " <container id='foo' version='1.0'>" + + " <nodes count='20' required='true'/>" + + " <document-api/>" + + " </container>" + + "</services>"; + assertOverride(InstanceName.defaultName(), + Environment.prod, + RegionName.defaultName(), + Tags.fromString("c d"), + expected); + } + + private void assertOverride(InstanceName instance, Environment environment, RegionName region, Tags tags, String expected) throws TransformerException { + Document inputDoc = Xml.getDocument(new StringReader(input)); + Document newDoc = new OverrideProcessor(instance, environment, region, tags).process(inputDoc); + TestBase.assertDocument(expected, newDoc); + } + +} diff --git a/config-application-package/src/test/java/com/yahoo/config/application/HostedOverrideProcessorTest.java b/config-application-package/src/test/java/com/yahoo/config/application/HostedOverrideProcessorTest.java index 1a4dab01930..451c7a3c217 100644 --- a/config-application-package/src/test/java/com/yahoo/config/application/HostedOverrideProcessorTest.java +++ b/config-application-package/src/test/java/com/yahoo/config/application/HostedOverrideProcessorTest.java @@ -4,6 +4,7 @@ package com.yahoo.config.application; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.Tags; import org.custommonkey.xmlunit.XMLUnit; import org.junit.Test; import org.w3c.dom.Document; @@ -14,6 +15,7 @@ import javax.xml.stream.XMLStreamException; import javax.xml.transform.TransformerException; import java.io.IOException; import java.io.StringReader; +import java.util.List; /** * @author bratseth @@ -48,7 +50,11 @@ public class HostedOverrideProcessorTest { " <nodes count='1'/>" + " </container>" + "</services>"; - assertOverride(Environment.test, RegionName.defaultName(), expected); + assertOverride(InstanceName.defaultName(), + Environment.test, + RegionName.defaultName(), + Tags.empty(), + expected); } @Test @@ -60,7 +66,27 @@ public class HostedOverrideProcessorTest { " <nodes count='4' required='true'/>" + " </container>" + "</services>"; - assertOverride(Environment.from("prod"), RegionName.from("us-west"), expected); + assertOverride(InstanceName.defaultName(), + Environment.from("prod"), + RegionName.from("us-west"), + Tags.empty(), + expected); + } + + @Test + public void testParsingSpecificTag() throws TransformerException { + String expected = + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"?\" version=\"1.0\">" + + " <container id=\"foo\" version=\"1.0\">" + + " <nodes count='4' required='true'/>" + + " </container>" + + "</services>"; + assertOverride(InstanceName.defaultName(), + Environment.from("prod"), + RegionName.from("us-west"), + Tags.empty(), + expected); } @Test @@ -72,7 +98,11 @@ public class HostedOverrideProcessorTest { " <nodes count='1' required='true'/>" + " </container>" + "</services>"; - assertOverride(InstanceName.from("myinstance"), Environment.from("prod"), RegionName.from("us-west"), expected); + assertOverride(InstanceName.from("myinstance"), + Environment.from("prod"), + RegionName.from("us-west"), + Tags.empty(), + expected); } @Test @@ -84,7 +114,11 @@ public class HostedOverrideProcessorTest { " <nodes count='5' flavor='v-8-8-100' required='true'/>" + " </container>" + "</services>"; - assertOverride(Environment.from("prod"), RegionName.from("us-east-3"), expected); + assertOverride(InstanceName.defaultName(), + Environment.from("prod"), + RegionName.from("us-east-3"), + Tags.empty(), + expected); } @Test @@ -96,7 +130,11 @@ public class HostedOverrideProcessorTest { " <nodes count='3' required='true'/>" + " </container>" + "</services>"; - assertOverride(Environment.from("perf"), RegionName.from("us-east-3"), expected); + assertOverride(InstanceName.defaultName(), + Environment.from("perf"), + RegionName.from("us-east-3"), + Tags.empty(), + expected); } @Test @@ -108,7 +146,11 @@ public class HostedOverrideProcessorTest { " <nodes count='3' flavor='v-4-8-100' required='true'/>" + " </container>" + "</services>"; - assertOverride(Environment.valueOf("prod"), RegionName.from("unknown"), expected); + assertOverride(InstanceName.defaultName(), + Environment.valueOf("prod"), + RegionName.from("unknown"), + Tags.empty(), + expected); } @Test @@ -120,7 +162,11 @@ public class HostedOverrideProcessorTest { " <nodes count='3' flavor='v-4-8-100' required='true'/>" + " </container>" + "</services>"; - assertOverride(Environment.from("prod"), RegionName.defaultName(), expected); + assertOverride(InstanceName.defaultName(), + Environment.from("prod"), + RegionName.defaultName(), + Tags.empty(), + expected); } @Test @@ -132,7 +178,11 @@ public class HostedOverrideProcessorTest { " <nodes count='1'/>" + " </container>" + "</services>"; - assertOverride(Environment.from("dev"), RegionName.defaultName(), expected); + assertOverride(InstanceName.defaultName(), + Environment.from("dev"), + RegionName.defaultName(), + Tags.empty(), + expected); } @Test @@ -144,7 +194,11 @@ public class HostedOverrideProcessorTest { " <nodes count='1'/>" + " </container>" + "</services>"; - assertOverride(Environment.from("test"), RegionName.from("us-west"), expected); + assertOverride(InstanceName.defaultName(), + Environment.from("test"), + RegionName.from("us-west"), + Tags.empty(), + expected); } @Test @@ -156,16 +210,16 @@ public class HostedOverrideProcessorTest { " <nodes count='2' required='true'/>" + " </container>" + "</services>"; - assertOverride(Environment.from("staging"), RegionName.from("us-west"), expected); - } - - private void assertOverride(Environment environment, RegionName region, String expected) throws TransformerException { - assertOverride(InstanceName.from("default"), environment, region, expected); + assertOverride(InstanceName.defaultName(), + Environment.from("staging"), + RegionName.from("us-west"), + Tags.empty(), + expected); } - private void assertOverride(InstanceName instance, Environment environment, RegionName region, String expected) throws TransformerException { + private void assertOverride(InstanceName instance, Environment environment, RegionName region, Tags tags, String expected) throws TransformerException { Document inputDoc = Xml.getDocument(new StringReader(input)); - Document newDoc = new OverrideProcessor(instance, environment, region).process(inputDoc); + Document newDoc = new OverrideProcessor(instance, environment, region, tags).process(inputDoc); TestBase.assertDocument(expected, newDoc); } diff --git a/config-application-package/src/test/java/com/yahoo/config/application/MultiOverrideProcessorTest.java b/config-application-package/src/test/java/com/yahoo/config/application/MultiOverrideProcessorTest.java index 44bcb12957a..debde6c1438 100644 --- a/config-application-package/src/test/java/com/yahoo/config/application/MultiOverrideProcessorTest.java +++ b/config-application-package/src/test/java/com/yahoo/config/application/MultiOverrideProcessorTest.java @@ -4,6 +4,7 @@ package com.yahoo.config.application; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.Tags; import org.custommonkey.xmlunit.XMLUnit; import org.junit.Test; import org.w3c.dom.Document; @@ -124,13 +125,13 @@ public class MultiOverrideProcessorTest { private void assertOverride(Environment environment, RegionName region, String expected) throws TransformerException { Document inputDoc = Xml.getDocument(new StringReader(input)); - Document newDoc = new OverrideProcessor(InstanceName.from("default"), environment, region).process(inputDoc); + Document newDoc = new OverrideProcessor(InstanceName.from("default"), environment, region, Tags.empty()).process(inputDoc); TestBase.assertDocument(expected, newDoc); } private void assertOverrideWithIds(Environment environment, RegionName region, String expected) throws TransformerException { Document inputDoc = Xml.getDocument(new StringReader(inputWithIds)); - Document newDoc = new OverrideProcessor(InstanceName.from("default"), environment, region).process(inputDoc); + Document newDoc = new OverrideProcessor(InstanceName.from("default"), environment, region, Tags.empty()).process(inputDoc); TestBase.assertDocument(expected, newDoc); } diff --git a/config-application-package/src/test/java/com/yahoo/config/application/OverrideProcessorTest.java b/config-application-package/src/test/java/com/yahoo/config/application/OverrideProcessorTest.java index e9ee7c97876..150999390d8 100644 --- a/config-application-package/src/test/java/com/yahoo/config/application/OverrideProcessorTest.java +++ b/config-application-package/src/test/java/com/yahoo/config/application/OverrideProcessorTest.java @@ -4,6 +4,7 @@ package com.yahoo.config.application; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.Tags; import org.custommonkey.xmlunit.XMLUnit; import org.junit.Test; import org.w3c.dom.Document; @@ -332,7 +333,10 @@ public class OverrideProcessorTest { " </admin>" + "</services>"; Document inputDoc = Xml.getDocument(new StringReader(in)); - new OverrideProcessor(InstanceName.from("default"), Environment.from("prod"), RegionName.from("us-west")).process(inputDoc); + new OverrideProcessor(InstanceName.from("default"), + Environment.from("prod"), + RegionName.from("us-west"), + Tags.empty()).process(inputDoc); } @Test(expected = IllegalArgumentException.class) @@ -344,7 +348,10 @@ public class OverrideProcessorTest { " </admin>" + "</services>"; Document inputDoc = Xml.getDocument(new StringReader(in)); - new OverrideProcessor(InstanceName.from("default"), Environment.defaultEnvironment(), RegionName.from("us-west")).process(inputDoc); + new OverrideProcessor(InstanceName.from("default"), + Environment.defaultEnvironment(), + RegionName.from("us-west"), + Tags.empty()).process(inputDoc); } @Test @@ -399,7 +406,7 @@ public class OverrideProcessorTest { private void assertOverride(String input, Environment environment, RegionName region, String expected) throws TransformerException { Document inputDoc = Xml.getDocument(new StringReader(input)); - Document newDoc = new OverrideProcessor(InstanceName.from("default"), environment, region).process(inputDoc); + Document newDoc = new OverrideProcessor(InstanceName.from("default"), environment, region, Tags.empty()).process(inputDoc); TestBase.assertDocument(expected, newDoc); } diff --git a/config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java b/config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java index 92c2c2a820f..0da94b69e58 100644 --- a/config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java +++ b/config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java @@ -4,11 +4,13 @@ package com.yahoo.config.application; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.Tags; import org.junit.Test; import org.w3c.dom.Document; import java.io.File; import java.io.StringReader; +import java.util.Set; /** * @author hmusum @@ -44,7 +46,13 @@ public class XmlPreprocessorTest { " </nodes>\n" + " </container>\n" + "</services>"; - TestBase.assertDocument(expectedDev, new XmlPreProcessor(appDir, services, InstanceName.defaultName(), Environment.dev, RegionName.defaultName()).run()); + TestBase.assertDocument(expectedDev, + new XmlPreProcessor(appDir, + services, + InstanceName.defaultName(), + Environment.dev, + RegionName.defaultName(), + Tags.empty()).run()); String expectedStaging = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + @@ -70,7 +78,13 @@ public class XmlPreprocessorTest { " </nodes>\n" + " </container>\n" + "</services>"; - TestBase.assertDocument(expectedStaging, new XmlPreProcessor(appDir, services, InstanceName.defaultName(), Environment.staging, RegionName.defaultName()).run()); + TestBase.assertDocument(expectedStaging, + new XmlPreProcessor(appDir, + services, + InstanceName.defaultName(), + Environment.staging, + RegionName.defaultName(), + Tags.empty()).run()); String expectedUsWest = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + @@ -104,7 +118,13 @@ public class XmlPreprocessorTest { " </nodes>\n" + " </container>\n" + "</services>"; - TestBase.assertDocument(expectedUsWest, new XmlPreProcessor(appDir, services, InstanceName.defaultName(), Environment.prod, RegionName.from("us-west")).run()); + TestBase.assertDocument(expectedUsWest, + new XmlPreProcessor(appDir, + services, + InstanceName.defaultName(), + Environment.prod, + RegionName.from("us-west"), + Tags.empty()).run()); String expectedUsEastAndCentral = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + @@ -138,9 +158,19 @@ public class XmlPreprocessorTest { " </container>\n" + "</services>"; TestBase.assertDocument(expectedUsEastAndCentral, - new XmlPreProcessor(appDir, services, InstanceName.defaultName(), Environment.prod, RegionName.from("us-east")).run()); + new XmlPreProcessor(appDir, + services, + InstanceName.defaultName(), + Environment.prod, + RegionName.from("us-east"), + Tags.empty()).run()); TestBase.assertDocument(expectedUsEastAndCentral, - new XmlPreProcessor(appDir, services, InstanceName.defaultName(), Environment.prod, RegionName.from("us-central")).run()); + new XmlPreProcessor(appDir, + services, + InstanceName.defaultName(), + Environment.prod, + RegionName.from("us-central"), + Tags.empty()).run()); } @Test @@ -184,7 +214,12 @@ public class XmlPreprocessorTest { " <adminserver hostalias=\"node0\"/>" + " </admin>" + "</services>"; - Document docDev = (new XmlPreProcessor(appDir, new StringReader(input), InstanceName.defaultName(), Environment.prod, RegionName.defaultName()).run()); + Document docDev = (new XmlPreProcessor(appDir, + new StringReader(input), + InstanceName.defaultName(), + Environment.prod, + RegionName.defaultName(), + Tags.empty()).run()); TestBase.assertDocument(expectedProd, docDev); } |