diff options
author | Morten Tokle <morten.tokle@gmail.com> | 2017-10-23 13:18:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-23 13:18:50 +0200 |
commit | 79c1773d3353863451e0d75243e280c40b6658b0 (patch) | |
tree | e9c83538e92b63afabc418003cbccc754f21ba9d /config-model | |
parent | 7f93a3bd50c534c92d3d7b37a4a5a47e512ff0d7 (diff) | |
parent | 0cf7be3cc88be1211c48cfb520e0c13920639c0b (diff) |
Merge pull request #3830 from vespa-engine/bjorncs/athenz-identity-provider-service
Initial Athenz copper argos implementation
Diffstat (limited to 'config-model')
10 files changed, 97 insertions, 12 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java b/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java index 8e2c6b8532d..ddd998c8816 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java @@ -7,6 +7,7 @@ import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.container.ComponentsConfig; import com.yahoo.container.QrConfig; import com.yahoo.container.core.ContainerHttpConfig; +import com.yahoo.container.core.identity.IdentityConfig; import com.yahoo.container.jdisc.ContainerMbusConfig; import com.yahoo.container.jdisc.JdiscBindingsConfig; import com.yahoo.search.config.QrStartConfig; @@ -48,7 +49,8 @@ public class Container extends AbstractService implements ComponentsConfig.Producer, JdiscBindingsConfig.Producer, ContainerHttpConfig.Producer, - ContainerMbusConfig.Producer { + ContainerMbusConfig.Producer, + IdentityConfig.Producer { public static final int BASEPORT = Defaults.getDefaults().vespaWebServicePort(); public static final String SINGLENODE_CONTAINER_SERVICESPEC = "default_singlenode_container"; @@ -394,6 +396,18 @@ public class Container extends AbstractService implements this.httpServerEnabled = httpServerEnabled; } + @Override + public void getConfig(IdentityConfig.Builder builder) { + if(parent instanceof ContainerCluster) { + ContainerCluster containerCluster = (ContainerCluster) parent; + Optional<Identity> identity = containerCluster.getIdentity(); + identity.ifPresent(id -> { + builder.serviceName(id.getService()); + builder.domain(id.getDomain()); + }); + } + } + public static final class PortOverride { public final ComponentSpecification serverId; public final int port; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java index 4eb611a1dbe..45a50af8f3b 100755 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java @@ -7,11 +7,11 @@ import com.yahoo.cloud.config.RoutingProviderConfig; import com.yahoo.component.ComponentId; import com.yahoo.component.ComponentSpecification; import com.yahoo.config.FileReference; +import com.yahoo.config.application.api.ApplicationMetaData; +import com.yahoo.config.application.api.ComponentInfo; import com.yahoo.config.application.api.DeploymentSpec; import com.yahoo.config.docproc.DocprocConfig; import com.yahoo.config.docproc.SchemamappingConfig; -import com.yahoo.config.application.api.ApplicationMetaData; -import com.yahoo.config.application.api.ComponentInfo; import com.yahoo.config.model.ApplicationConfigProducerRoot; import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.config.model.producer.AbstractConfigProducerRoot; @@ -65,8 +65,8 @@ import com.yahoo.vespa.model.container.component.ConfigProducerGroup; import com.yahoo.vespa.model.container.component.DiscBindingsConfigGenerator; import com.yahoo.vespa.model.container.component.FileStatusHandlerComponent; import com.yahoo.vespa.model.container.component.Handler; -import com.yahoo.vespa.model.container.component.SimpleComponent; import com.yahoo.vespa.model.container.component.Servlet; +import com.yahoo.vespa.model.container.component.SimpleComponent; import com.yahoo.vespa.model.container.component.StatisticsComponent; import com.yahoo.vespa.model.container.component.chain.ProcessingHandler; import com.yahoo.vespa.model.container.docproc.ContainerDocproc; @@ -82,7 +82,6 @@ import com.yahoo.vespa.model.content.Content; import com.yahoo.vespa.model.search.AbstractSearchCluster; import com.yahoo.vespa.model.utils.FileSender; import com.yahoo.vespaclient.config.FeederConfig; - import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.Nullable; @@ -187,6 +186,8 @@ public final class ContainerCluster private Optional<String> hostClusterId = Optional.empty(); private Optional<Integer> memoryPercentage = Optional.empty(); + private Identity identity; + private static class AcceptAllVerifier implements ContainerClusterVerifier { @Override public boolean acceptComponent(Component component) { return true; } @@ -238,6 +239,9 @@ public final class ContainerCluster public void setZone(Zone zone) { this.zone = zone; } + public Zone getZone() { + return zone; + } public void addMetricStateHandler() { Handler<AbstractConfigProducer<?>> stateHandler = new Handler<>( @@ -836,6 +840,15 @@ public final class ContainerCluster */ public Optional<Integer> getMemoryPercentage() { return memoryPercentage; } + public Optional<Identity> getIdentity() { + return Optional.ofNullable(identity); + } + + public void setIdentity(Identity identity) { + this.identity = identity; + addSimpleComponent("com.yahoo.container.jdisc.athenz.AthenzIdentityProvider"); + } + @Override public String toString() { return "container cluster '" + getName() + "'"; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/Identity.java b/config-model/src/main/java/com/yahoo/vespa/model/container/Identity.java new file mode 100644 index 00000000000..e872cb7a73b --- /dev/null +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/Identity.java @@ -0,0 +1,22 @@ +package com.yahoo.vespa.model.container; + +/** + * @author mortent + */ +public class Identity { + private final String domain; + private final String service; + + public Identity(String domain, String service) { + this.domain = domain; + this.service = service; + } + + public String getDomain() { + return domain; + } + + public String getService() { + return service; + } +} diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/ConfigserverCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/ConfigserverCluster.java index c3361426d64..f7caa0c734c 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/ConfigserverCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/ConfigserverCluster.java @@ -141,6 +141,9 @@ public class ConfigserverCluster extends AbstractConfigProducer if (options.dockerVespaBaseImage().isPresent()) { builder.dockerVespaBaseImage(options.dockerVespaBaseImage().get()); } + if (options.serviceProviderEndpoint().isPresent()) { + builder.serviceProviderEndpoint(options.serviceProviderEndpoint().get()); + } } private String[] getConfigModelPluginDirs() { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/option/CloudConfigOptions.java b/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/option/CloudConfigOptions.java index 8acab12414d..ae29a912c11 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/option/CloudConfigOptions.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/configserver/option/CloudConfigOptions.java @@ -43,4 +43,5 @@ public interface CloudConfigOptions { Optional<Integer> numParallelTenantLoaders(); Optional<String> dockerRegistry(); Optional<String> dockerVespaBaseImage(); + Optional<String> serviceProviderEndpoint(); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java index 49229fcc87a..0d221b57748 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java @@ -4,16 +4,16 @@ package com.yahoo.vespa.model.container.xml; import com.google.common.collect.ImmutableList; import com.yahoo.component.Version; import com.yahoo.config.application.Xml; -import com.yahoo.config.model.ConfigModelContext; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.application.api.DeployLogger; +import com.yahoo.config.model.ConfigModelContext; import com.yahoo.config.model.application.provider.IncludeDirs; import com.yahoo.config.model.builder.xml.ConfigModelBuilder; import com.yahoo.config.model.builder.xml.ConfigModelId; import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.config.provision.Capacity; -import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.ClusterMembership; +import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.NodeType; import com.yahoo.container.jdisc.config.MetricDefaultsConfig; @@ -22,14 +22,15 @@ import com.yahoo.text.XML; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.model.AbstractService; import com.yahoo.vespa.model.HostResource; +import com.yahoo.vespa.model.container.Identity; import com.yahoo.vespa.model.builder.xml.dom.DomClientProviderBuilder; import com.yahoo.vespa.model.builder.xml.dom.DomComponentBuilder; import com.yahoo.vespa.model.builder.xml.dom.DomFilterBuilder; import com.yahoo.vespa.model.builder.xml.dom.DomHandlerBuilder; import com.yahoo.vespa.model.builder.xml.dom.ModelElement; import com.yahoo.vespa.model.builder.xml.dom.NodesSpecification; -import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder; import com.yahoo.vespa.model.builder.xml.dom.ServletBuilder; +import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder; import com.yahoo.vespa.model.builder.xml.dom.chains.docproc.DomDocprocChainsBuilder; import com.yahoo.vespa.model.builder.xml.dom.chains.processing.DomProcessingBuilder; import com.yahoo.vespa.model.builder.xml.dom.chains.search.DomSearchChainsBuilder; @@ -52,12 +53,15 @@ import com.yahoo.vespa.model.container.search.QueryProfiles; import com.yahoo.vespa.model.container.search.SemanticRules; import com.yahoo.vespa.model.container.search.searchchain.SearchChains; import com.yahoo.vespa.model.container.xml.document.DocumentFactoryBuilder; - import com.yahoo.vespa.model.content.StorageGroup; import org.w3c.dom.Element; import org.w3c.dom.Node; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -108,7 +112,6 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { ContainerCluster cluster = createContainerCluster(spec, modelContext); addClusterContent(cluster, spec, modelContext); addBundlesForPlatformComponents(cluster); - model.setCluster(cluster); } @@ -157,6 +160,9 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { addServerProviders(spec, cluster); addLegacyFilters(spec, cluster); // TODO: Remove for Vespa 7 + // Athenz copper argos + addIdentity(spec, cluster); + //TODO: overview handler, see DomQrserverClusterBuilder } @@ -683,6 +689,16 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { } } + private void addIdentity(Element element, ContainerCluster cluster) { + Element identityElement = XML.getChild(element, "identity"); + if(identityElement != null) { + String domain = XML.getValue(XML.getChild(identityElement, "domain")); + String service = XML.getValue(XML.getChild(identityElement, "service")); + Identity identity = new Identity(domain.trim(), service.trim()); + cluster.setIdentity(identity); + } + } + /** * Disallow renderers named "DefaultRenderer" or "JsonRenderer" */ diff --git a/config-model/src/main/resources/schema/containercluster.rnc b/config-model/src/main/resources/schema/containercluster.rnc index 85219bdb46a..af9b89b8553 100644 --- a/config-model/src/main/resources/schema/containercluster.rnc +++ b/config-model/src/main/resources/schema/containercluster.rnc @@ -7,7 +7,8 @@ ContainerCluster = element container | jdisc { ContainerServices & DocumentBinding* & Aliases? & - NodesOfContainerCluster? + NodesOfContainerCluster? & + Identity? } ContainerServices = @@ -225,3 +226,7 @@ DocumentBinding = element document { attribute bundle { xsd:NCName } } +Identity = element identity { + element domain { xsd:NCName } & + element service { xsd:NCName } +} diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java index e2ed57251d9..4c09fd8d713 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java @@ -62,6 +62,10 @@ public class DedicatedAdminV4Test { " <metric name='nginx.upstreams.down.last' output-name='nginx.upstreams.down'/>" + " </consumer>" + " </metric-consumers>" + + " <identity>" + + " <domain>mydomain</domain>" + + " <service>myservice</service>" + + " </identity>" + " </admin>" + "</services>"; diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/TestOptions.java b/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/TestOptions.java index 663a656347d..fe5cd3dc029 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/TestOptions.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/TestOptions.java @@ -115,6 +115,9 @@ public class TestOptions implements CloudConfigOptions { @Override public Optional<String> dockerVespaBaseImage() { return Optional.empty(); } + @Override + public Optional<String> serviceProviderEndpoint() { return Optional.empty(); } + public TestOptions numParallelTenantLoaders(int numLoaders) { this.numParallelTenantLoaders = Optional.of(numLoaders); return this; diff --git a/config-model/src/test/schema-test-files/services.xml b/config-model/src/test/schema-test-files/services.xml index bf2a924e62d..380ce7f5a3d 100644 --- a/config-model/src/test/schema-test-files/services.xml +++ b/config-model/src/test/schema-test-files/services.xml @@ -36,6 +36,10 @@ </config> <jdisc id='qrsCluster_1' version='1.0'> + <identity> + <domain>mydomain</domain> + <service>myservice</service> + </identity> <rest-api path="jersey1"> <components bundle="my-bundle" /> <components bundle="other-bundle"> |