ContainerIP no longer stringly-typed.
diff --git a/core/dispatcher/src/main/scala/whisk/core/container/ContainerUtils.scala b/core/dispatcher/src/main/scala/whisk/core/container/ContainerUtils.scala
index 471eac8..b975676 100644
--- a/core/dispatcher/src/main/scala/whisk/core/container/ContainerUtils.scala
+++ b/core/dispatcher/src/main/scala/whisk/core/container/ContainerUtils.scala
@@ -49,7 +49,7 @@
* @param image the docker image to run
* @return container id and container host
*/
- def bringup(name: Option[String], image: String, network: String, cpuShare:Int, env: Map[String, String], args: Array[String], limits: ActionLimits, policy: Option[String])(implicit transid: TransactionId): (ContainerId, ContainerIP) = {
+ def bringup(name: Option[String], image: String, network: String, cpuShare: Int, env: Map[String, String], args: Array[String], limits: ActionLimits, policy: Option[String])(implicit transid: TransactionId): (ContainerId, Option[ContainerAddr]) = {
val id = makeContainer(name, image, network, cpuShare, env, args, limits, policy)
val host = id.flatMap(_ => getContainerHostAndPort(name))
(id, host)
@@ -155,12 +155,13 @@
}
- def getContainerHostAndPort(container: ContainerName)(implicit transid: TransactionId): ContainerIP = {
- container map { name =>
- runDockerCmd("inspect", "--format", "'{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'", name) map {
- output => appendPort(output.substring(1, output.length - 1))
- }
- } getOrElse None
+ def getContainerHostAndPort(container: ContainerName)(implicit transid: TransactionId): Option[ContainerAddr] = {
+ for (
+ name <- container;
+ output <- runDockerCmd("inspect", "--format", "'{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'", name)
+ ) yield {
+ ContainerAddr(output.substring(1, output.length - 1), 8080)
+ }
}
def runDockerCmd(args: String*)(implicit transid: TransactionId): DockerOutput = runDockerCmd(false, args)
@@ -189,8 +190,6 @@
val tokens = line.split("\\s+")
ContainerState(tokens(0), tokens(1), tokens(tokens.length - 1))
}
-
- protected def appendPort(host: String) = s"$host:8080"
}
object ContainerUtils extends Logging {
diff --git a/core/dispatcher/src/main/scala/whisk/core/container/WhiskContainer.scala b/core/dispatcher/src/main/scala/whisk/core/container/WhiskContainer.scala
index 50dde63..eaf5a8e 100644
--- a/core/dispatcher/src/main/scala/whisk/core/container/WhiskContainer.scala
+++ b/core/dispatcher/src/main/scala/whisk/core/container/WhiskContainer.scala
@@ -154,14 +154,12 @@
implicit val materializer = ActorMaterializer()
containerHostAndPort map { hp =>
- val host = hp.split(":")(0)
- val port = hp.split(":")(1).toInt
- val flow = Http().outgoingConnection(host, port)
+ val flow = Http().outgoingConnection(hp.host, hp.port)
val uri = Uri(
scheme = "http",
- authority = Uri.Authority(host = Uri.Host(host), port = port),
+ authority = Uri.Authority(host = Uri.Host(hp.host), port = hp.port),
path = Uri.Path(endpoint))
for (
diff --git a/core/dispatcher/src/main/scala/whisk/core/container/package.scala b/core/dispatcher/src/main/scala/whisk/core/container/package.scala
index 3b053fa..4161c00 100644
--- a/core/dispatcher/src/main/scala/whisk/core/container/package.scala
+++ b/core/dispatcher/src/main/scala/whisk/core/container/package.scala
@@ -77,8 +77,15 @@
case object Busy extends FinalContainerResult
case class Error(string: String) extends FinalContainerResult
+ // Note: not using InetAddress here because we don't want to do any lookup
+ // until used for something.
+ case class ContainerAddr(host: String, port: Int) {
+ override def toString() = s"$host:$port"
+ }
+
type ContainerName = Option[String]
+
type ContainerId = Option[String]
- type ContainerIP = Option[String]
+
type DockerOutput = Option[String]
}