summaryrefslogtreecommitdiffstats
path: root/standalone-container/src/main/scala/com/yahoo/container/standalone/CloudConfigInstallVariables.scala
diff options
context:
space:
mode:
Diffstat (limited to 'standalone-container/src/main/scala/com/yahoo/container/standalone/CloudConfigInstallVariables.scala')
-rw-r--r--standalone-container/src/main/scala/com/yahoo/container/standalone/CloudConfigInstallVariables.scala91
1 files changed, 91 insertions, 0 deletions
diff --git a/standalone-container/src/main/scala/com/yahoo/container/standalone/CloudConfigInstallVariables.scala b/standalone-container/src/main/scala/com/yahoo/container/standalone/CloudConfigInstallVariables.scala
new file mode 100644
index 00000000000..8cfa01937c9
--- /dev/null
+++ b/standalone-container/src/main/scala/com/yahoo/container/standalone/CloudConfigInstallVariables.scala
@@ -0,0 +1,91 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.container.standalone
+
+import java.util.Optional
+
+import com.yahoo.vespa.model.container.configserver.option.CloudConfigOptions
+import com.yahoo.vespa.model.container.configserver.option.CloudConfigOptions.ConfigServer
+
+import scala.language.implicitConversions
+import scala.util.Try
+
+/**
+ * @author Tony Vaagenes
+ */
+class CloudConfigInstallVariables extends CloudConfigOptions {
+ import CloudConfigInstallVariables._
+
+ override val rpcPort = optionalInstallVar[Integer]("port_configserver_rpc", "services")
+ override val allConfigServers = installVar("addr_configserver", "services") withDefault Array[ConfigServer]()
+ override val multiTenant = optionalInstallVar[java.lang.Boolean]("multitenant")
+
+ override val zookeeperBarrierTimeout = optionalInstallVar[java.lang.Long]("zookeeper_barrier_timeout")
+ override val sessionLifeTimeSecs = optionalInstallVar[java.lang.Long]("session_lifetime")
+ override val configModelPluginDirs = installVar("config_model_plugin_dirs") withDefault Array[String]()
+ override val zookeeperClientPort = optionalInstallVar[Integer]("zookeeper_clientPort")
+ override val zookeeperQuorumPort = optionalInstallVar[Integer]("zookeeper_quoromPort")
+ override val zookeeperElectionPort = optionalInstallVar[Integer]("zookeeper_electionPort")
+ override val payloadCompressionType = optionalInstallVar[java.lang.String]("payload_compression_type")
+ override val environment = optionalInstallVar[java.lang.String]("environment")
+ override val region = optionalInstallVar[java.lang.String]("region")
+ override val system = optionalInstallVar[java.lang.String]("system")
+ override val defaultFlavor = optionalInstallVar[java.lang.String]("default_flavor")
+ override val defaultAdminFlavor = optionalInstallVar[java.lang.String]("default_admin_flavor")
+ override val defaultContainerFlavor = optionalInstallVar[java.lang.String]("default_container_flavor")
+ override val defaultContentFlavor = optionalInstallVar[java.lang.String]("default_content_flavor")
+ override val useVespaVersionInRequest = optionalInstallVar[java.lang.Boolean]("use_vespa_version_in_request")
+ override val hostedVespa = optionalInstallVar[java.lang.Boolean]("hosted_vespa")
+ override val numParallelTenantLoaders = optionalInstallVar[java.lang.Integer]("num_parallel_tenant_loaders")
+ override val dockerRegistry = optionalInstallVar[java.lang.String]("docker_registry")
+ override val dockerVespaBaseImage = optionalInstallVar[java.lang.String]("docker_vespa_base_image")
+ override val loadBalancerAddress = optionalInstallVar[java.lang.String]("load_balancer_address")
+}
+
+object CloudConfigInstallVariables {
+ private class InstallVariable(installPkg:String, name: String) {
+ val value = Environment.optionalInstallVariable(installPkg + "." + name)
+
+ def withDefault[T](defaultValue: T)(implicit c: Converter[T]) : T = {
+ value map { implicitly[Converter[T]].convert } getOrElse defaultValue
+ }
+ }
+
+ private def installVar(setting:String, installPkg: String = "cloudconfig_server") = new InstallVariable(installPkg, setting)
+
+ private def optionalInstallVar[T](setting:String, installPkg: String = "cloudconfig_server")(implicit c: Converter[T]): Optional[T] = {
+ Environment.optionalInstallVariable(installPkg + "." + setting) map ( c.convert )
+ }
+
+ implicit val configServerConverter: Converter[Array[ConfigServer]] = new Converter[Array[ConfigServer]] {
+ override def convert(s: String) = {
+ s split "[, ]" filter { !_.isEmpty } map { toConfigServer }
+ }
+ }
+
+ implicit val stringArrayConverter: Converter[Array[String]] = new Converter[Array[String]] {
+ override def convert(s: String) = {
+ s split "[, ]" filter { !_.isEmpty }
+ }
+ }
+
+ private def toConfigServer(hostPort: String): ConfigServer = Try {
+ val (host, portStr) = splitFirst(hostPort, ':')
+ val port = portStr map { _.toInt }
+ new ConfigServer(host, port)
+ }.getOrElse(throw new IllegalArgumentException(s"Invalid config server '$hostPort'"))
+
+ private def splitFirst(string: String, separator: Character): (String, Option[String]) = {
+ val (beginning, endWithSeparator) = string span { _ != separator }
+ (beginning, tailOption(endWithSeparator))
+ }
+
+ def tailOption(s: String) = {
+ if (s.isEmpty) None
+ else Some(s.tail)
+ }
+
+ implicit def toJavaOptional[U <% V, V](option: Option[U]): Optional[V] = option match {
+ case Some(u) => Optional.of(u: V)
+ case None => Optional.empty()
+ }
+}