Aktualizr
C++ SOTA Client
dockerappmanager.h
1 #ifndef DOCKERAPPMGR_H_
2 #define DOCKERAPPMGR_H_
3 
4 #include "ostreemanager.h"
5 #include "uptane/iterator.h"
6 
7 using DockerAppCb = std::function<bool(const std::string &app, const Uptane::Target &app_target)>;
8 
10  public:
11  DockerAppManagerConfig(const PackageConfig &pconfig);
12 
13  std::vector<std::string> docker_apps;
14  boost::filesystem::path docker_apps_root;
15  boost::filesystem::path docker_app_params;
16  boost::filesystem::path docker_app_bin{"/usr/bin/docker-app"};
17  boost::filesystem::path docker_compose_bin{"/usr/bin/docker-compose"};
18  bool docker_prune{true};
19 };
20 
22  public:
23  DockerAppStandalone(const PackageConfig &pconfig, const BootloaderConfig &bconfig,
24  const std::shared_ptr<INvStorage> &storage, const std::shared_ptr<HttpInterface> &http)
25  : OstreeManager(pconfig, bconfig, storage, http), dappcfg_(pconfig) {
26  fake_fetcher_ = std::make_shared<Uptane::Fetcher>("", "", http_);
27  }
28  bool fetchTarget(const Uptane::Target &target, Uptane::Fetcher &fetcher, const KeyManager &keys,
29  const FetcherProgressCb &progress_cb, const api::FlowControlToken *token) override;
30  data::InstallationResult install(const Uptane::Target &target) const override;
31  std::string name() const override { return "ostree+docker-app-standalone"; }
32 
33  private:
34  DockerAppManagerConfig dappcfg_;
35 
36  bool iterate_apps(const Uptane::Target &target, const DockerAppCb &cb) const;
37  void handleRemovedApps(const Uptane::Target &target) const;
38 
39  // iterate_apps needs an Uptane::Fetcher. However, its an unused parameter
40  // and we just need to construct a dummy one to make the compiler happy.
41  std::shared_ptr<Uptane::Fetcher> fake_fetcher_;
42 };
43 
45  public:
46  DockerAppBundles(const PackageConfig &pconfig, const BootloaderConfig &bconfig,
47  const std::shared_ptr<INvStorage> &storage, const std::shared_ptr<HttpInterface> &http)
48  : OstreeManager(pconfig, bconfig, storage, http), dappcfg_(pconfig) {
49  fake_fetcher_ = std::make_shared<Uptane::Fetcher>("", "", http_);
50  }
51  bool fetchTarget(const Uptane::Target &target, Uptane::Fetcher &fetcher, const KeyManager &keys,
52  const FetcherProgressCb &progress_cb, const api::FlowControlToken *token) override;
53  data::InstallationResult install(const Uptane::Target &target) const override;
54  std::string name() const override { return "ostree+docker-app-bundles"; }
55 
56  private:
57  DockerAppManagerConfig dappcfg_;
58 
59  std::vector<std::pair<std::string, std::string>> iterate_apps(const Uptane::Target &target) const;
60  void handleRemovedApps(const Uptane::Target &target) const;
61 
62  // iterate_apps needs an Uptane::Fetcher. However, its an unused parameter
63  // and we just need to construct a dummy one to make the compiler happy.
64  std::shared_ptr<Uptane::Fetcher> fake_fetcher_;
65 };
66 
68  public:
69  DockerAppManager(const PackageConfig &pconfig, const BootloaderConfig &bconfig,
70  const std::shared_ptr<INvStorage> &storage, const std::shared_ptr<HttpInterface> &http)
71  : OstreeManager(pconfig, bconfig, storage, http) {
72  auto standalone = DockerAppManagerConfig(pconfig).docker_app_bin;
73  if (boost::filesystem::exists(standalone)) {
74  LOG_INFO << "DockerAppManager detects docker-app standalone environment";
75  impl_ = std_::make_unique<DockerAppStandalone>(pconfig, bconfig, storage, http);
76  } else {
77  LOG_INFO << "DockerAppManager detects docker app bundle environment";
78  impl_ = std_::make_unique<DockerAppBundles>(pconfig, bconfig, storage, http);
79  }
80  }
81  bool fetchTarget(const Uptane::Target &target, Uptane::Fetcher &fetcher, const KeyManager &keys,
82  const FetcherProgressCb &progress_cb, const api::FlowControlToken *token) override {
83  return impl_->fetchTarget(target, fetcher, keys, progress_cb, token);
84  }
85  data::InstallationResult install(const Uptane::Target &target) const override { return impl_->install(target); }
86  TargetStatus verifyTarget(const Uptane::Target &target) const override { return impl_->verifyTarget(target); }
87  std::string name() const override { return "ostree+docker-app"; }
88 
89  private:
90  std::unique_ptr<OstreeManager> impl_;
91 };
92 
93 #endif // DOCKERAPPMGR_H_
Uptane::Fetcher
Definition: fetcher.h:33
DockerAppManagerConfig
Definition: dockerappmanager.h:9
KeyManager
Definition: keymanager.h:13
data::InstallationResult
Definition: types.h:277
DockerAppBundles
Definition: dockerappmanager.h:44
OstreeManager
Definition: ostreemanager.h:41
api::FlowControlToken
Provides a thread-safe way to pause and terminate task execution.
Definition: apiqueue.h:19
PackageConfig
Definition: config.h:91
DockerAppStandalone
Definition: dockerappmanager.h:21
Uptane::Target
Definition: types.h:379
DockerAppManager
Definition: dockerappmanager.h:67
BootloaderConfig
Definition: config.h:156