diff options
author | Jon Bratseth <bratseth@oath.com> | 2019-01-23 22:02:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-23 22:02:48 +0100 |
commit | 47521adeb37d8d0bc68c90bc67ca994b3a04e2a5 (patch) | |
tree | 64760442352f098a47b97c64e4a1065a3e994da9 | |
parent | 6ca04ddc2b74153473c8f5d7ececa2105bf284b8 (diff) | |
parent | 9fb45e03476aa9b5c676b28a52f08701d9552839 (diff) |
Merge pull request #8184 from vespa-engine/balder/control-environment-var
Balder/control environment var MERGEOK
5 files changed, 47 insertions, 2 deletions
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 b90f18d4f24..a6de284f4b7 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 @@ -182,6 +182,7 @@ public final class ContainerCluster private String hostClusterId = null; private String jvmGCOptions = null; + private String environmentVars = null; private Integer memoryPercentage = null; private static class AcceptAllVerifier implements ContainerClusterVerifier { @@ -631,6 +632,11 @@ public final class ContainerCluster } else { jvmBuilder.gcopts(G1GC); } + if (environmentVars != null) { + QrStartConfig.Qrs.Builder qrsBuilder = new QrStartConfig.Qrs.Builder(); + qrsBuilder.env(environmentVars); + builder.qrs(qrsBuilder); + } builder.jvm(jvmBuilder); } @@ -779,6 +785,7 @@ public final class ContainerCluster public void setMemoryPercentage(Integer memoryPercentage) { this.memoryPercentage = memoryPercentage; } public void setJvmGCOptions(String opts) { this.jvmGCOptions = opts; } + public void setEnvironmentVars(String environmentVars) { this.environmentVars = environmentVars; } public Optional<String> getJvmGCOptions() { return Optional.ofNullable(jvmGCOptions); } /** 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 4401bfa08dd..bb35b66edef 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 @@ -21,7 +21,6 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.NodeType; -import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.Rotation; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; @@ -95,6 +94,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { * Path to vip status file for container in Hosted Vespa. Only used if set, else use HOSTED_VESPA_STATUS_FILE */ private static final String HOSTED_VESPA_STATUS_FILE_INSTALL_SETTING = "cloudconfig_server__tenant_vip_status_file"; + private static final String ENVIRONMENT_VARIABLES_ELEMENT = "environment-variables"; public enum Networking { disable, enable } @@ -484,6 +484,10 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { applyRoutingAliasProperties(nodes, cluster); applyDefaultPreload(nodes, nodesElement); + String environmentVars = getEnvironmentVariables(XML.getChild(nodesElement, ENVIRONMENT_VARIABLES_ELEMENT)); + if (environmentVars != null && !environmentVars.isEmpty()) { + cluster.setEnvironmentVars(environmentVars); + } applyMemoryPercentage(cluster, nodesElement.getAttribute(VespaDomBuilder.Allocated_MEMORY_ATTRIB_NAME)); if (useCpuSocketAffinity(nodesElement)) AbstractService.distributeCpuSocketAffinity(nodes); @@ -491,6 +495,16 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { cluster.addContainers(nodes); } } + + private static String getEnvironmentVariables(Element environmentVariables) { + StringBuilder sb = new StringBuilder(); + if (environmentVariables != null) { + for (Element var: XML.getChildren(environmentVariables)) { + sb.append(var.getNodeName()).append('=').append(var.getTextContent()).append(' '); + } + } + return sb.toString(); + } private List<Container> createNodes(ContainerCluster cluster, Element nodesElement, ConfigModelContext context) { if (nodesElement.hasAttribute("count")) // regular, hosted node spec diff --git a/config-model/src/main/resources/schema/containercluster.rnc b/config-model/src/main/resources/schema/containercluster.rnc index a30f61809ad..2f40a090678 100644 --- a/config-model/src/main/resources/schema/containercluster.rnc +++ b/config-model/src/main/resources/schema/containercluster.rnc @@ -212,6 +212,7 @@ NodesOfContainerCluster = element nodes { attribute jvm-options { text }? & attribute jvm-gc-options { text }? & attribute preload { text }? & + attribute environment-vars { text }? & attribute allocated-memory { text }? & attribute cpu-socket-affinity { xsd:boolean }? & ( @@ -230,6 +231,10 @@ NodesOfContainerCluster = element nodes { attribute docker-image { xsd:string }? ) | + element environment-variables { + anyElement + + } + | element node { attribute hostalias { xsd:NCName } & attribute cpu-socket { xsd:positiveInteger }? & diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java index ee829607da1..15c017d86e3 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java @@ -702,6 +702,25 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { assertEquals("env1", secretStore.getGroups().get(0).environment); } + @Test + public void honours_environment_vars() { + Element clusterElem = DomBuilderTest.parse( + "<container version='1.0'>", + " <nodes>", + " <environment-variables>", + " <KMP_SETTING>1</KMP_SETTING>", + " <KMP_AFFINITY>granularity=fine,verbose,compact,1,0</KMP_AFFINITY>", + " </environment-variables>", + " <node hostalias='mockhost'/>", + " </nodes>", + "</container>" ); + createModel(root, clusterElem); + QrStartConfig.Builder qrStartBuilder = new QrStartConfig.Builder(); + root.getConfig(qrStartBuilder, "container/container.0"); + QrStartConfig qrStartConfig = new QrStartConfig(qrStartBuilder); + assertEquals("KMP_SETTING=1 KMP_AFFINITY=granularity=fine,verbose,compact,1,0 ", qrStartConfig.qrs().env()); + } + private Element generateContainerElementWithRenderer(String rendererId) { return DomBuilderTest.parse( "<jdisc id='default' version='1.0'>", diff --git a/container-search/src/main/resources/configdefinitions/qr-start.def b/container-search/src/main/resources/configdefinitions/qr-start.def index 8547ad08458..30983b4bcc7 100644 --- a/container-search/src/main/resources/configdefinitions/qr-start.def +++ b/container-search/src/main/resources/configdefinitions/qr-start.def @@ -32,7 +32,7 @@ jvm.heapSizeAsPercentageOfPhysicalMemory int default=0 restart jvm.availableProcessors int default=0 restart ## Extra environment variables -qrs.env string default="YELL_MA_EURO=INXIGHT" restart +qrs.env string default="" restart ## Set ulimit -v in start script? this is mainly a safeguard against JNI stuff leaking memory. ulimitv string default="" restart |