Image::Appc getTestImage() const { Image::Appc appc; appc.set_name("foo.com/bar"); Label version; version.set_key("version"); version.set_value("1.0.0"); Label arch; arch.set_key("arch"); arch.set_value("amd64"); Label os; os.set_key("os"); os.set_value("linux"); Labels labels; labels.add_labels()->CopyFrom(version); labels.add_labels()->CopyFrom(arch); labels.add_labels()->CopyFrom(os); appc.mutable_labels()->CopyFrom(labels); return appc; }
Future<vector<string>> StoreProcess::fetchDependencies( const string& imageId, bool cached) { const string imagePath = paths::getImagePath(rootDir, imageId); Try<spec::ImageManifest> manifest = spec::getManifest(imagePath); if (manifest.isError()) { return Failure( "Failed to get dependencies for image id '" + imageId + "': " + manifest.error()); } vector<Image::Appc> dependencies; foreach (const spec::ImageManifest::Dependency& dependency, manifest->dependencies()) { Image::Appc appc; appc.set_name(dependency.imagename()); if (dependency.has_imageid()) { appc.set_id(dependency.imageid()); } // TODO(jojy): Make Image::Appc use appc::spec::Label instead of // mesos::Label so that we can avoid this loop here. foreach (const spec::ImageManifest::Label& label, dependency.labels()) { mesos::Label appcLabel; appcLabel.set_key(label.name()); appcLabel.set_value(label.value()); appc.mutable_labels()->add_labels()->CopyFrom(appcLabel); } dependencies.emplace_back(appc); } if (dependencies.size() == 0) { return vector<string>(); } // Do a depth first search. vector<Future<vector<string>>> futures; futures.reserve(dependencies.size()); foreach (const Image::Appc& appc, dependencies) { futures.emplace_back(fetchImage(appc, cached)); }