Modify validate Docker to call 'info' instead.
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/9bd535e8 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/9bd535e8 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/9bd535e8 Branch: refs/heads/master Commit: 9bd535e81b1bf8526f916cdcdd3ac1d1e7164a8f Parents: d60cc83 Author: Timothy Chen <[email protected]> Authored: Wed Jun 25 06:56:57 2014 +0000 Committer: Benjamin Hindman <[email protected]> Committed: Mon Aug 4 15:08:15 2014 -0700 ---------------------------------------------------------------------- src/docker/docker.cpp | 37 +++++++++++++++++++++++++++++++++---- src/docker/docker.hpp | 2 ++ src/tests/environment.cpp | 8 ++++++++ 3 files changed, 43 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/9bd535e8/src/docker/docker.cpp ---------------------------------------------------------------------- diff --git a/src/docker/docker.cpp b/src/docker/docker.cpp index 500517c..1e3ed71 100644 --- a/src/docker/docker.cpp +++ b/src/docker/docker.cpp @@ -23,12 +23,12 @@ using std::vector; Try<Nothing> Docker::validateDocker(const Docker &docker) { - Future<list<Docker::Container> > containers = docker.ps(); + Future<std::string> info = docker.info(); - if (!containers.await(Seconds(3))) { + if (!info.await(Seconds(3))) { return Error("Failed to use Docker: Timed out"); - } else if (containers.isFailed()) { - return Error("Failed to use Docker: " + containers.failure()); + } else if (info.isFailed()) { + return Error("Failed to use Docker: " + info.failure()); } return Nothing(); @@ -300,3 +300,32 @@ Future<list<Docker::Container> > Docker::_ps( return collect(futures); } + +Future<std::string> Docker::info() const +{ + std::string cmd = path + " info"; + + VLOG(1) << "Running " << cmd; + + Try<Subprocess> s = subprocess( + cmd, + Subprocess::PIPE(), + Subprocess::PIPE(), + Subprocess::PIPE()); + + if (s.isError()) { + return Failure(s.error()); + } + + Result<string> output = os::read(s.get().out().get()); + + if (output.isError()) { + // TODO(benh): Include stderr in error message. + return Failure("Failed to read output: " + output.error()); + } else if (output.isNone()) { + // TODO(benh): Include stderr in error message. + return Failure("No output available"); + } + + return output.get(); +} http://git-wip-us.apache.org/repos/asf/mesos/blob/9bd535e8/src/docker/docker.hpp ---------------------------------------------------------------------- diff --git a/src/docker/docker.hpp b/src/docker/docker.hpp index b0d0a3a..080e341 100644 --- a/src/docker/docker.hpp +++ b/src/docker/docker.hpp @@ -81,6 +81,8 @@ public: process::Future<std::list<Container> > ps( const bool all = true) const; + process::Future<std::string> info() const; + private: // Continuations. static process::Future<Container> _inspect( http://git-wip-us.apache.org/repos/asf/mesos/blob/9bd535e8/src/tests/environment.cpp ---------------------------------------------------------------------- diff --git a/src/tests/environment.cpp b/src/tests/environment.cpp index 5c14cca..11a08e3 100644 --- a/src/tests/environment.cpp +++ b/src/tests/environment.cpp @@ -133,6 +133,14 @@ static bool enable(const ::testing::TestInfo& test) if (strings::contains(name, "DOCKER_")) { Docker docker("docker"); Try<Nothing> validate = Docker::validateDocker(docker); + if (validate.isError()) { + std::cerr + << "-------------------------------------------------------------\n" + << "Skipping Docker tests because validation failed\n" + << "[Error] " + validate.error() + "\n" + << "-------------------------------------------------------------" + << std::endl; + } return !validate.isError(); }
