diff --git a/daemon/lib/source/DobbyManager.cpp b/daemon/lib/source/DobbyManager.cpp index 866851c0..9de3ed38 100644 --- a/daemon/lib/source/DobbyManager.cpp +++ b/daemon/lib/source/DobbyManager.cpp @@ -677,6 +677,21 @@ bool DobbyManager::customiseConfig(const std::shared_ptr &config, changesMade = true; } + // Add the extra mounts + const std::list& extraMounts = mSettings->extraMounts(); + if (!extraMounts.empty()) + { + for (const auto& mount : extraMounts) + { + std::list flags; + std::copy(mount.flags.begin(), mount.flags.end(), std::back_inserter(flags)); + + config->addMount(mount.source, mount.target, mount.type, 0, flags); + AI_LOG_ERROR("Added extra mount src: '%s', target: '%s', type: '%s'", mount.source.c_str(), mount.target.c_str(), mount.type.c_str()); + } + changesMade = true; + } + AI_LOG_FN_EXIT(); return changesMade; } diff --git a/settings/include/IDobbySettings.h b/settings/include/IDobbySettings.h index 90c8e345..09e514c8 100644 --- a/settings/include/IDobbySettings.h +++ b/settings/include/IDobbySettings.h @@ -111,6 +111,14 @@ class IDobbySettings std::set flags; }; + // ------------------------------------------------------------------------- + /** + * @brief A list of extra mounts that will be set for all + * containers. + * + */ + virtual std::list extraMounts() const = 0; + // ------------------------------------------------------------------------- /** * Describes the details of anything extra needed to enable access to diff --git a/settings/include/Settings.h b/settings/include/Settings.h index d235a018..fa96fdfe 100644 --- a/settings/include/Settings.h +++ b/settings/include/Settings.h @@ -64,6 +64,7 @@ class Settings final : public IDobbySettings std::string consoleSocketPath() const override; std::map extraEnvVariables() const override; + std::list extraMounts() const override; public: std::shared_ptr gpuAccessSettings() const override; @@ -109,6 +110,8 @@ class Settings final : public IDobbySettings void dumpHardwareAccess(int aiLogLevel, const std::string& name, const std::shared_ptr& hwAccess) const; + void dumpExtraMounts(int aiLogLevel, const std::string& path, + const std::list& extraMouts) const; private: std::string mWorkspaceDir; @@ -116,6 +119,7 @@ class Settings final : public IDobbySettings std::string mConsoleSocketPath; std::map mExtraEnvVars; + std::list mExtraMounts; std::shared_ptr mGpuHardwareAccess; std::shared_ptr mVpuHardwareAccess; diff --git a/settings/source/Settings.cpp b/settings/source/Settings.cpp index ca76a157..60d2c368 100644 --- a/settings/source/Settings.cpp +++ b/settings/source/Settings.cpp @@ -152,6 +152,12 @@ Settings::Settings(const Json::Value& settings) getEnvVarsFromJson(settings, Json::Path(".extraEnvVariables")); } + // process the extra mounts + { + mExtraMounts = + getExtraMounts(settings, Json::Path(".extraMounts")); + } + // process the gpu settings { mGpuHardwareAccess = @@ -352,6 +358,16 @@ std::map Settings::extraEnvVariables() const return mExtraEnvVars; } +// ----------------------------------------------------------------------------- +/** + * @brief + * + */ +std::list Settings::extraMounts() const +{ + return mExtraMounts; +} + // ----------------------------------------------------------------------------- /** * @brief @@ -454,6 +470,8 @@ void Settings::dump(int aiLogLevel) const i++, envVar.first.c_str(), envVar.second.c_str()); } + dumpExtraMounts(aiLogLevel, "settings.extraMounts", mExtraMounts); + i = 0; for (const auto& extIface : mExternalInterfaces) { @@ -465,6 +483,30 @@ void Settings::dump(int aiLogLevel) const dumpHardwareAccess(aiLogLevel, "vpu", mVpuHardwareAccess); } +// ----------------------------------------------------------------------------- +/** + * @brief Debugging function to dump extra mounts. + * + * + */ +void Settings::dumpExtraMounts(int aiLogLevel, const std::string& path, + const std::list& extraMounts) const +{ + int i = 0; + for (const auto& extraMount : extraMounts) + { + std::ostringstream flags; + for (const std::string& flag : extraMount.flags) + flags << flag << ", "; + + __AI_LOG_PRINTF(aiLogLevel, "%s[%u]={ src='%s' dst='%s' type='%s' flags=[%s] }", + path.c_str(), i++, + extraMount.source.c_str(), extraMount.target.c_str(), + extraMount.type.c_str(), flags.str().c_str()); + } +} + + // ----------------------------------------------------------------------------- /** * @brief Debugging function to dump the settings to access certain H/W. @@ -488,18 +530,7 @@ void Settings::dumpHardwareAccess(int aiLogLevel, const std::string& name, name.c_str(), i++, devNode.c_str()); } - i = 0; - for (const auto& extraMount : hwAccess->extraMounts) - { - std::ostringstream flags; - for (const std::string& flag : extraMount.flags) - flags << flag << ", "; - - __AI_LOG_PRINTF(aiLogLevel, "settings.%s.extraMounts[%u]={ src='%s' dst='%s' type='%s' flags=[%s] }", - name.c_str(), i++, - extraMount.source.c_str(), extraMount.target.c_str(), - extraMount.type.c_str(), flags.str().c_str()); - } + dumpExtraMounts(aiLogLevel, "settings." + name + ".extraMounts", hwAccess->extraMounts); i = 0; for (const auto& envVar : hwAccess->extraEnvVariables) @@ -843,7 +874,7 @@ std::list Settings::getExtraMounts(const Json::Value& root // verify the value in an array is a string if (!extraMount.isObject()) { - AI_LOG_ERROR("invalid JSON value in extra gpu mount var array in settings file"); + AI_LOG_ERROR("invalid JSON value in extra mounts var array in settings file"); return std::list(); }