fetch(PDO::FETCH_ASSOC)) { if (readlink('/srv/openslx/www/boot/default/config.tgz') === $row['filepath']) { $id[] = (int) $row['moduleid']; break; } } $task = Taskmanager::submit('LdadpLauncher', array( 'ids' => $id, 'parentTask' => $parent, 'failOnParentFail' => false )); if (!isset($task['id'])) return false; return $task['id']; } /** * To be called if the server ip changes, as it's embedded in the AD module configs. * This will then recreate all AD tgz modules. */ public static function rebuildAdModules() { $task = Taskmanager::submit('LdadpLauncher', array('ids' => array())); // Stop all running instances $ads = ConfigModule::getAdConfigs(); if (empty($ads)) return; $parent = isset($task['id']) ? $task['id'] : NULL; foreach ($ads as $ad) { $ad['parentTask'] = $parent; $ad['failOnParentFail'] = false; $task = Taskmanager::submit('CreateAdConfig', $ad); if (isset($task['id'])) $parent = $task['id']; } if (Taskmanager::waitComplete($parent, 2000) === false) { EventLog::warning('Rebuilding LDAP-AD-Proxy config failed. AD Auth might not work properly.'); sleep(1); } Trigger::ldadp(); } /** * Mount the VM store into the server. * * @return array task status of mount procedure, or false on error */ public static function mount() { $vmstore = Property::getVmStoreConfig(); if (!is_array($vmstore)) return false; $storetype = $vmstore['storetype']; if ($storetype === 'nfs') $addr = $vmstore['nfsaddr']; if ($storetype === 'cifs') $addr = $vmstore['cifsaddr']; if ($storetype === 'internal') $addr = 'null'; return Taskmanager::submit('MountVmStore', array( 'address' => $addr, 'type' => 'images', 'username' => $vmstore['cifsuser'], 'password' => $vmstore['cifspasswd'] )); } /** * Check and process all callbacks */ public static function checkCallbacks() { $res = Database::simpleQuery("SELECT taskid, cbfunction FROM callback"); while ($row = $res->fetch(PDO::FETCH_ASSOC)) { $status = Taskmanager::status($row['taskid']); if (Taskmanager::isFailed($status) || Taskmanager::isFinished($status)) Database::exec("DELETE FROM callback WHERE taskid = :task AND cbfunction = :cb LIMIT 1", array('task' => $row['taskid'], 'cb' => $row['cbfunction'])); if (Taskmanager::isFinished($status)) { $func = array('TaskmanagerCallback', preg_replace('/\W/', '', $row['cbfunction'])); if (!call_user_func_array('method_exists', $func)) { Eventlog::warning("Callback {$row['cbfunction']} doesn't exist."); } else { call_user_func($func, $status); } } } } private static function triggerDaemons($action, $parent, &$taskids) { $task = Taskmanager::submit('SyncdaemonLauncher', array( 'operation' => $action, 'parentTask' => $parent, 'failOnParentFail' => false )); if (isset($task['id'])) { $taskids['syncid'] = $task['id']; $parent = $task['id']; } $task = Taskmanager::submit('DozmodLauncher', array( 'operation' => $action, 'parentTask' => $parent, 'failOnParentFail' => false )); if (isset($task['id'])) { $taskids['dmsdid'] = $task['id']; $parent = $task['id']; } return $parent; } public static function stopDaemons($parent, &$taskids) { $parent = self::triggerDaemons('stop', $parent, $taskids); $task = Taskmanager::submit('LdadpLauncher', array( 'ids' => array(), 'parentTask' => $parent, 'failOnParentFail' => false )); if (isset($task['id'])) { $taskids['ldadpid'] = $task['id']; $parent = $task['id']; } return $parent; } public static function startDaemons($parent, &$taskids) { $parent = self::triggerDaemons('start', $parent, $taskids); $taskid = self::ldadp($parent); if ($taskid !== false) { $taskids['ldadpid'] = $taskid; $parent = $taskid; } return $parent; } }