summaryrefslogtreecommitdiffstats
path: root/modules-available/sysconfig
diff options
context:
space:
mode:
authorSimon Rettberg2020-07-07 16:36:46 +0200
committerSimon Rettberg2020-07-07 16:36:46 +0200
commitd635a52fd965519eecb717ea5b953a5f12ef9b88 (patch)
tree621d70b385d35409ff5a9f93edbf42ba39ad584f /modules-available/sysconfig
parent[systemstatus] Add dnbd3-master-proxy to service status (diff)
downloadslx-admin-d635a52fd965519eecb717ea5b953a5f12ef9b88.tar.gz
slx-admin-d635a52fd965519eecb717ea5b953a5f12ef9b88.tar.xz
slx-admin-d635a52fd965519eecb717ea5b953a5f12ef9b88.zip
[systemstatus/sysconfig] Manage LDADP via systemd
Finally got rid of our own little service manager. Status/restart handling capabilities were added to the system status page. TODO: Permissions for dnbd3, service (re)starting in general
Diffstat (limited to 'modules-available/sysconfig')
-rw-r--r--modules-available/sysconfig/hooks/cron.inc.php2
-rw-r--r--modules-available/sysconfig/inc/configmodulebaseldap.inc.php41
-rw-r--r--modules-available/sysconfig/page.inc.php5
3 files changed, 40 insertions, 8 deletions
diff --git a/modules-available/sysconfig/hooks/cron.inc.php b/modules-available/sysconfig/hooks/cron.inc.php
index b518ca06..b959060d 100644
--- a/modules-available/sysconfig/hooks/cron.inc.php
+++ b/modules-available/sysconfig/hooks/cron.inc.php
@@ -1,7 +1,5 @@
<?php
-Trigger::ldadp();
-
// Cleanup orphaned config<->location where the location has been deleted
Database::exec("DELETE c FROM configtgz_location c
LEFT JOIN location l USING (locationid)
diff --git a/modules-available/sysconfig/inc/configmodulebaseldap.inc.php b/modules-available/sysconfig/inc/configmodulebaseldap.inc.php
index ad3d32c5..39f4f68e 100644
--- a/modules-available/sysconfig/inc/configmodulebaseldap.inc.php
+++ b/modules-available/sysconfig/inc/configmodulebaseldap.inc.php
@@ -32,12 +32,43 @@ abstract class ConfigModuleBaseLdap extends ConfigModule
return $list;
}
- protected function generateInternal($tgz, $parent)
+ public static function getActiveModuleIds()
+ {
+ return Database::queryColumnArray("SELECT DISTINCT moduleid FROM configtgz_module"
+ . " INNER JOIN configtgz_x_module USING (moduleid)"
+ . " INNER JOIN configtgz USING (configid)"
+ . " INNER JOIN configtgz_location USING (configid)"
+ . " WHERE moduletype IN ('AdAuth', 'LdapAuth')");
+ }
+
+ /**
+ * Launch all ldadp instances that need to be running.
+ *
+ * @param string $command start, restart, check
+ * @param bool|int|int[] $ids list of IDs to run command on, or false meaning "all"
+ * @param string $parent if not NULL, this will be the parent task of the launch-task
+ * @return boolean|string false on error, id of task otherwise
+ */
+ public static function ldadp($command = 'start', $ids = false, $parent = null)
{
- $np = Trigger::ldadp($this->id(), $parent);
- if ($np !== false) {
- $parent = $np;
+ if ($ids === false) {
+ $ids = self::getActiveModuleIds();
+ } elseif (!is_array($ids)) {
+ $ids = [$ids];
}
+ $task = Taskmanager::submit('LdadpLauncher', array(
+ 'ids' => $ids,
+ 'command' => $command,
+ 'parentTask' => $parent,
+ 'failOnParentFail' => false
+ ));
+ if (!isset($task['id']))
+ return false;
+ return $task['id'];
+ }
+
+ protected function generateInternal($tgz, $parent)
+ {
$config = $this->moduleData;
if (isset($config['certificate']) && !is_string($config['certificate'])) {
unset($config['certificate']);
@@ -72,7 +103,7 @@ abstract class ConfigModuleBaseLdap extends ConfigModule
$this->preTaskmanagerHook($config);
$task = Taskmanager::submit('CreateLdapConfig', $config);
if (is_array($task) && isset($task['id'])) {
- Trigger::ldadp(null, $task['id']);
+ self::ldadp('restart', $this->id(), $task['id']); // TODO: Use --restart for this one only
}
return $task;
}
diff --git a/modules-available/sysconfig/page.inc.php b/modules-available/sysconfig/page.inc.php
index 7f2277dc..64162294 100644
--- a/modules-available/sysconfig/page.inc.php
+++ b/modules-available/sysconfig/page.inc.php
@@ -343,7 +343,10 @@ class Page_SysConfig extends Page
Database::exec("INSERT INTO configtgz_location (locationid, configid) VALUES (:locationid, :configid)"
. " ON DUPLICATE KEY UPDATE configid = :configid", compact('locationid', 'configid'));
}
- Event::activeConfigChanged();
+ $task = ConfigModuleBaseLdap::ldadp();
+ if ($task !== false) {
+ TaskmanagerCallback::addCallback($task, 'ldadpStartup');
+ }
Util::redirect('?do=sysconfig&locationid=' . $this->currentLoc);
}