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 =