mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-26 07:04:37 +02:00
parent
c2ff0becaf
commit
ef5013b903
@ -102,12 +102,15 @@ String ConfigObjectUtility::CreateObjectConfig(const Type::Ptr& type, const Stri
|
|||||||
bool ConfigObjectUtility::CreateObject(const Type::Ptr& type, const String& fullName,
|
bool ConfigObjectUtility::CreateObject(const Type::Ptr& type, const String& fullName,
|
||||||
const String& config, const Array::Ptr& errors)
|
const String& config, const Array::Ptr& errors)
|
||||||
{
|
{
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticMutex());
|
||||||
if (!ConfigPackageUtility::PackageExists("_api")) {
|
if (!ConfigPackageUtility::PackageExists("_api")) {
|
||||||
ConfigPackageUtility::CreatePackage("_api");
|
ConfigPackageUtility::CreatePackage("_api");
|
||||||
|
|
||||||
String stage = ConfigPackageUtility::CreateStage("_api");
|
String stage = ConfigPackageUtility::CreateStage("_api");
|
||||||
ConfigPackageUtility::ActivateStage("_api", stage);
|
ConfigPackageUtility::ActivateStage("_api", stage);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String path = GetObjectConfigPath(type, fullName);
|
String path = GetObjectConfigPath(type, fullName);
|
||||||
Utility::MkDirP(Utility::DirName(path), 0700);
|
Utility::MkDirP(Utility::DirName(path), 0700);
|
||||||
@ -240,4 +243,3 @@ bool ConfigObjectUtility::DeleteObject(const ConfigObject::Ptr& object, bool cas
|
|||||||
|
|
||||||
return DeleteObjectHelper(object, cascade, errors);
|
return DeleteObjectHelper(object, cascade, errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +53,8 @@ void ConfigPackagesHandler::HandleGet(const ApiUser::Ptr& user, HttpRequest& req
|
|||||||
|
|
||||||
Array::Ptr results = new Array();
|
Array::Ptr results = new Array();
|
||||||
|
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticMutex());
|
||||||
for (const String& package : packages) {
|
for (const String& package : packages) {
|
||||||
Dictionary::Ptr packageInfo = new Dictionary();
|
Dictionary::Ptr packageInfo = new Dictionary();
|
||||||
packageInfo->Set("name", package);
|
packageInfo->Set("name", package);
|
||||||
@ -60,6 +62,7 @@ void ConfigPackagesHandler::HandleGet(const ApiUser::Ptr& user, HttpRequest& req
|
|||||||
packageInfo->Set("active-stage", ConfigPackageUtility::GetActiveStage(package));
|
packageInfo->Set("active-stage", ConfigPackageUtility::GetActiveStage(package));
|
||||||
results->Add(packageInfo);
|
results->Add(packageInfo);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Dictionary::Ptr result = new Dictionary();
|
Dictionary::Ptr result = new Dictionary();
|
||||||
result->Set("results", results);
|
result->Set("results", results);
|
||||||
@ -85,6 +88,7 @@ void ConfigPackagesHandler::HandlePost(const ApiUser::Ptr& user, HttpRequest& re
|
|||||||
Dictionary::Ptr result1 = new Dictionary();
|
Dictionary::Ptr result1 = new Dictionary();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticMutex());
|
||||||
ConfigPackageUtility::CreatePackage(packageName);
|
ConfigPackageUtility::CreatePackage(packageName);
|
||||||
} catch (const std::exception& ex) {
|
} catch (const std::exception& ex) {
|
||||||
HttpUtility::SendJsonError(response, 500, "Could not create package.",
|
HttpUtility::SendJsonError(response, 500, "Could not create package.",
|
||||||
|
@ -190,7 +190,10 @@ void ConfigPackageUtility::TryActivateStageCallback(const ProcessResult& pr, con
|
|||||||
|
|
||||||
/* validation went fine, activate stage and reload */
|
/* validation went fine, activate stage and reload */
|
||||||
if (pr.ExitStatus == 0) {
|
if (pr.ExitStatus == 0) {
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(GetStaticMutex());
|
||||||
ActivateStage(packageName, stageName);
|
ActivateStage(packageName, stageName);
|
||||||
|
}
|
||||||
|
|
||||||
if (reload)
|
if (reload)
|
||||||
Application::RequestRestart();
|
Application::RequestRestart();
|
||||||
@ -317,3 +320,8 @@ bool ConfigPackageUtility::ValidateName(const String& name)
|
|||||||
return (!boost::regex_search(name.GetData(), what, expr));
|
return (!boost::regex_search(name.GetData(), what, expr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::mutex& ConfigPackageUtility::GetStaticMutex(void)
|
||||||
|
{
|
||||||
|
static boost::mutex mutex;
|
||||||
|
return mutex;
|
||||||
|
}
|
||||||
|
@ -58,6 +58,8 @@ public:
|
|||||||
static bool ContainsDotDot(const String& path);
|
static bool ContainsDotDot(const String& path);
|
||||||
static bool ValidateName(const String& name);
|
static bool ValidateName(const String& name);
|
||||||
|
|
||||||
|
static boost::mutex& GetStaticMutex(void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void CollectDirNames(const String& path, std::vector<String>& dirs);
|
static void CollectDirNames(const String& path, std::vector<String>& dirs);
|
||||||
static void CollectPaths(const String& path, std::vector<std::pair<String, bool> >& paths);
|
static void CollectPaths(const String& path, std::vector<std::pair<String, bool> >& paths);
|
||||||
|
@ -110,6 +110,7 @@ void ConfigStagesHandler::HandlePost(const ApiUser::Ptr& user, HttpRequest& requ
|
|||||||
if (!files)
|
if (!files)
|
||||||
BOOST_THROW_EXCEPTION(std::invalid_argument("Parameter 'files' must be specified."));
|
BOOST_THROW_EXCEPTION(std::invalid_argument("Parameter 'files' must be specified."));
|
||||||
|
|
||||||
|
boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticMutex());
|
||||||
stageName = ConfigPackageUtility::CreateStage(packageName, files);
|
stageName = ConfigPackageUtility::CreateStage(packageName, files);
|
||||||
|
|
||||||
/* validate the config. on success, activate stage and reload */
|
/* validate the config. on success, activate stage and reload */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user