Parsed DNS related info from the output of `docker inspect`. Review: https://reviews.apache.org/r/60760
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/28faca0a Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/28faca0a Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/28faca0a Branch: refs/heads/master Commit: 28faca0ae2b3aeeddd078a978f4b7b2483d03c20 Parents: 30b4901 Author: Qian Zhang <zhq527...@gmail.com> Authored: Tue Jul 11 14:41:17 2017 +0800 Committer: Qian Zhang <zhq527...@gmail.com> Committed: Thu Aug 3 13:53:26 2017 +0800 ---------------------------------------------------------------------- src/docker/docker.cpp | 74 +++++++++++++++++++++++++++++++++++++++++++++- src/docker/docker.hpp | 19 ++++++++++-- 2 files changed, 90 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/28faca0a/src/docker/docker.cpp ---------------------------------------------------------------------- diff --git a/src/docker/docker.cpp b/src/docker/docker.cpp index daa340f..df1490f 100755 --- a/src/docker/docker.cpp +++ b/src/docker/docker.cpp @@ -409,7 +409,79 @@ Try<Docker::Container> Docker::Container::create(const string& output) } } - return Container(output, id, name, optionalPid, started, ipAddress, devices); + vector<string> dns; + + Result<JSON::Array> dnsArray = + json.find<JSON::Array>("HostConfig.Dns"); + + if (dnsArray.isError()) { + return Error("Failed to parse HostConfig.Dns: " + dnsArray.error()); + } + + if (dnsArray.isSome()) { + foreach (const JSON::Value& entry, dnsArray->values) { + if (!entry.is<JSON::String>()) { + return Error("Malformed HostConfig.Dns" + " entry '" + stringify(entry) + "'"); + } + + dns.push_back(entry.as<JSON::String>().value); + } + } + + vector<string> dnsOptions; + + Result<JSON::Array> dnsOptionArray = + json.find<JSON::Array>("HostConfig.DnsOptions"); + + if (dnsOptionArray.isError()) { + return Error("Failed to parse HostConfig.DnsOptions: " + + dnsOptionArray.error()); + } + + if (dnsOptionArray.isSome()) { + foreach (const JSON::Value& entry, dnsOptionArray->values) { + if (!entry.is<JSON::String>()) { + return Error("Malformed HostConfig.DnsOptions" + " entry '" + stringify(entry) + "'"); + } + + dnsOptions.push_back(entry.as<JSON::String>().value); + } + } + + vector<string> dnsSearch; + + Result<JSON::Array> dnsSearchArray = + json.find<JSON::Array>("HostConfig.DnsSearch"); + + if (dnsSearchArray.isError()) { + return Error("Failed to parse HostConfig.DnsSearch: " + + dnsSearchArray.error()); + } + + if (dnsSearchArray.isSome()) { + foreach (const JSON::Value& entry, dnsSearchArray->values) { + if (!entry.is<JSON::String>()) { + return Error("Malformed HostConfig.DnsSearch" + " entry '" + stringify(entry) + "'"); + } + + dnsSearch.push_back(entry.as<JSON::String>().value); + } + } + + return Container( + output, + id, + name, + optionalPid, + started, + ipAddress, + devices, + dns, + dnsOptions, + dnsSearch); } http://git-wip-us.apache.org/repos/asf/mesos/blob/28faca0a/src/docker/docker.hpp ---------------------------------------------------------------------- diff --git a/src/docker/docker.hpp b/src/docker/docker.hpp index 9581aa2..95e60a7 100644 --- a/src/docker/docker.hpp +++ b/src/docker/docker.hpp @@ -115,6 +115,15 @@ public: const std::vector<Device> devices; + // Returns the DNS nameservers set by "--dns" option. + const std::vector<std::string> dns; + + // Returns the DNS options set by "--dns-option" option. + const std::vector<std::string> dnsOptions; + + // Returns the DNS search domains set by "--dns-search" option. + const std::vector<std::string> dnsSearch; + private: Container( const std::string& output, @@ -123,14 +132,20 @@ public: const Option<pid_t>& pid, bool started, const Option<std::string>& ipAddress, - const std::vector<Device>& devices) + const std::vector<Device>& devices, + const std::vector<std::string>& dns, + const std::vector<std::string>& dnsOptions, + const std::vector<std::string>& dnsSearch) : output(output), id(id), name(name), pid(pid), started(started), ipAddress(ipAddress), - devices(devices) {} + devices(devices), + dns(dns), + dnsOptions(dnsOptions), + dnsSearch(dnsSearch) {} }; class Image