summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorMorten Tokle <morten.tokle@gmail.com>2017-10-23 13:18:50 +0200
committerGitHub <noreply@github.com>2017-10-23 13:18:50 +0200
commit79c1773d3353863451e0d75243e280c40b6658b0 (patch)
treee9c83538e92b63afabc418003cbccc754f21ba9d /config-model
parent7f93a3bd50c534c92d3d7b37a4a5a47e512ff0d7 (diff)
parent0cf7be3cc88be1211c48cfb520e0c13920639c0b (diff)
Merge pull request #3830 from vespa-engine/bjorncs/athenz-identity-provider-service
Initial Athenz copper argos implementation
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/Container.java16
-rwxr-xr-xconfig-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java21
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/Identity.java22
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/configserver/ConfigserverCluster.java3
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/configserver/option/CloudConfigOptions.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java28
-rw-r--r--config-model/src/main/resources/schema/containercluster.rnc7
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java4
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/configserver/TestOptions.java3
-rw-r--r--config-model/src/test/schema-test-files/services.xml4
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">