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 2014/08/16 17:26:49 UTC
[4/5] git commit: Validate Docker version since we require >= 1.0.0.
Validate Docker version since we require >= 1.0.0.
Review: https://reviews.apache.org/r/24767
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/a7b706ae
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/a7b706ae
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/a7b706ae
Branch: refs/heads/master
Commit: a7b706ae891709d4915951cb1ac714d436688be1
Parents: 337e955
Author: Benjamin Hindman <be...@gmail.com>
Authored: Fri Aug 15 22:03:00 2014 -0700
Committer: Benjamin Hindman <be...@gmail.com>
Committed: Sat Aug 16 08:25:39 2014 -0700
----------------------------------------------------------------------
src/docker/docker.cpp | 39 +++++++++++++++++++++++++++++++++++----
1 file changed, 35 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/a7b706ae/src/docker/docker.cpp
----------------------------------------------------------------------
diff --git a/src/docker/docker.cpp b/src/docker/docker.cpp
index a4bad5b..73c62f9 100644
--- a/src/docker/docker.cpp
+++ b/src/docker/docker.cpp
@@ -106,13 +106,14 @@ Try<Docker> Docker::create(const string& path, bool validate)
"to mount cgroups manually!");
}
- std::string cmd = path + " info";
+ // Validate the version (and that we can use Docker at all).
+ string cmd = path + " version";
Try<Subprocess> s = subprocess(
cmd,
Subprocess::PATH("/dev/null"),
- Subprocess::PATH("/dev/null"),
- Subprocess::PATH("/dev/null"));
+ Subprocess::PIPE(),
+ Subprocess::PIPE());
if (s.isError()) {
return Error(s.error());
@@ -134,7 +135,37 @@ Try<Docker> Docker::create(const string& path, bool validate)
return Error(msg);
}
- return Docker(path);
+ CHECK_SOME(s.get().out());
+
+ Future<string> output = io::read(s.get().out().get());
+
+ if (!output.await(Seconds(5))) {
+ return Error("Timed out reading output from '" + cmd + "'");
+ } else if (output.isFailed()) {
+ return Error("Failed to read output from '" + cmd + "': " +
+ output.failure());
+ }
+
+ foreach (string line, strings::split(output.get(), "\n")) {
+ line = strings::trim(line);
+ if (strings::startsWith(line, "Client version: ")) {
+ line = line.substr(strlen("Client version: "));
+ vector<string> version = strings::split(line, ".");
+ if (version.size() < 1) {
+ return Error("Failed to parse Docker version '" + line + "'");
+ }
+ Try<int> major = numify<int>(version[0]);
+ if (major.isError()) {
+ return Error("Failed to parse Docker major version '" +
+ version[0] + "'");
+ } else if (major.get() < 1) {
+ break;
+ }
+ return Docker(path);
+ }
+ }
+
+ return Error("Insufficient version of Docker! Please upgrade to >= 1.0.0");
}