You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2015/07/21 22:32:19 UTC

[4/4] mesos git commit: Exposed Docker container IP via labels.

Exposed Docker container IP via labels.

This would allow mesos-dns to lookup container information such as its
IP address.

Review: https://reviews.apache.org/r/36585


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/b175cfcd
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/b175cfcd
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/b175cfcd

Branch: refs/heads/master
Commit: b175cfcddec4aa4d66f1f85efc683046ae5ca723
Parents: a434ecc
Author: Kapil Arya <ka...@mesosphere.io>
Authored: Tue Jul 21 13:30:21 2015 -0700
Committer: Benjamin Hindman <be...@gmail.com>
Committed: Tue Jul 21 13:32:10 2015 -0700

----------------------------------------------------------------------
 src/docker/docker.cpp                    | 14 +++++++++++++-
 src/docker/docker.hpp                    | 14 ++++++++++++--
 src/docker/executor.cpp                  |  5 +++++
 src/tests/docker_containerizer_tests.cpp |  7 +++++++
 4 files changed, 37 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/b175cfcd/src/docker/docker.cpp
----------------------------------------------------------------------
diff --git a/src/docker/docker.cpp b/src/docker/docker.cpp
index 2793258..1367de8 100644
--- a/src/docker/docker.cpp
+++ b/src/docker/docker.cpp
@@ -274,7 +274,19 @@ Try<Docker::Container> Docker::Container::create(const string& output)
 
   bool started = startedAtValue.get().value != "0001-01-01T00:00:00Z";
 
-  return Docker::Container(output, id, name, optionalPid, started);
+  Result<JSON::String> ipAddressValue =
+    json.find<JSON::String>("NetworkSettings.IPAddress");
+  if (ipAddressValue.isNone()) {
+    return Error("Unable to find NetworkSettings.IPAddress in container");
+  } else if (ipAddressValue.isError()) {
+    return Error(
+        "Error finding NetworkSettings.Name in container: " +
+        ipAddressValue.error());
+  }
+
+  string ipAddress = ipAddressValue.get().value;
+
+  return Docker::Container(output, id, name, optionalPid, started, ipAddress);
 }
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/b175cfcd/src/docker/docker.hpp
----------------------------------------------------------------------
diff --git a/src/docker/docker.hpp b/src/docker/docker.hpp
index fbae7bd..38e5299 100644
--- a/src/docker/docker.hpp
+++ b/src/docker/docker.hpp
@@ -69,14 +69,24 @@ public:
     // needed since pid is empty when the container terminates.
     const bool started;
 
+    // Returns the IPAddress of the container, or None if no IP has
+    // been not been assigned.
+    const Option<std::string> ipAddress;
+
   private:
     Container(
         const std::string& output,
         const std::string& id,
         const std::string& name,
         const Option<pid_t>& pid,
-        bool started)
-      : output(output), id(id), name(name), pid(pid), started(started) {}
+        bool started,
+        const Option<std::string>& ipAddress)
+      : output(output),
+        id(id),
+        name(name),
+        pid(pid),
+        started(started),
+        ipAddress(ipAddress) {}
   };
 
   class Image

http://git-wip-us.apache.org/repos/asf/mesos/blob/b175cfcd/src/docker/executor.cpp
----------------------------------------------------------------------
diff --git a/src/docker/executor.cpp b/src/docker/executor.cpp
index cdcd8ee..256d53d 100644
--- a/src/docker/executor.cpp
+++ b/src/docker/executor.cpp
@@ -158,6 +158,11 @@ public:
           status.mutable_task_id()->CopyFrom(taskId);
           status.set_state(TASK_RUNNING);
           status.set_data(container.output);
+          if (container.ipAddress.isSome()) {
+            Label* label = status.mutable_labels()->add_labels();
+            label->set_key("Docker.NetworkSettings.IPAddress");
+            label->set_value(container.ipAddress.get());
+          }
           driver->sendStatusUpdate(status);
         }
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/b175cfcd/src/tests/docker_containerizer_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/docker_containerizer_tests.cpp b/src/tests/docker_containerizer_tests.cpp
index dc87d9f..5086af3 100644
--- a/src/tests/docker_containerizer_tests.cpp
+++ b/src/tests/docker_containerizer_tests.cpp
@@ -722,6 +722,13 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Launch)
   Try<JSON::Array> parse = JSON::parse<JSON::Array>(statusRunning.get().data());
   ASSERT_SOME(parse);
 
+  // Now verify that the Docker.NetworkSettings.IPAddress label is
+  // present.
+  ASSERT_TRUE(statusRunning.get().has_labels());
+  EXPECT_EQ(1, statusRunning.get().labels().labels().size());
+  EXPECT_EQ("Docker.NetworkSettings.IPAddress",
+            statusRunning.get().labels().labels(0).key());
+
   ASSERT_TRUE(exists(docker, slaveId, containerId.get()));
 
   Future<containerizer::Termination> termination =