diff options
author | Simon Rettberg | 2021-04-20 16:40:25 +0200 |
---|---|---|
committer | Simon Rettberg | 2021-04-20 16:40:25 +0200 |
commit | 7c5748d3a6bc12ece61ccf782047f6200b79b325 (patch) | |
tree | d409550975adb7e014dd919892d4e110e55f62c4 /modules-available/serversetup-bwlp-ipxe/page.inc.php | |
parent | [sysconfig] Enforce proper ldadp services running on reboot/install (diff) | |
download | slx-admin-7c5748d3a6bc12ece61ccf782047f6200b79b325.tar.gz slx-admin-7c5748d3a6bc12ece61ccf782047f6200b79b325.tar.xz slx-admin-7c5748d3a6bc12ece61ccf782047f6200b79b325.zip |
[serversetup-bwlp-ipxe] Add iPXE version selector
Diffstat (limited to 'modules-available/serversetup-bwlp-ipxe/page.inc.php')
-rw-r--r-- | modules-available/serversetup-bwlp-ipxe/page.inc.php | 65 |
1 files changed, 53 insertions, 12 deletions
diff --git a/modules-available/serversetup-bwlp-ipxe/page.inc.php b/modules-available/serversetup-bwlp-ipxe/page.inc.php index bc13ab6a..f0422fd3 100644 --- a/modules-available/serversetup-bwlp-ipxe/page.inc.php +++ b/modules-available/serversetup-bwlp-ipxe/page.inc.php @@ -6,14 +6,13 @@ class Page_ServerSetup extends Page private $addrListTask; private $compileTask = null; private $currentAddress; - private $currentMenu; private $hasIpSet = false; private function getCompileTask() { if ($this->compileTask !== null) return $this->compileTask; - $this->compileTask = Property::get('ipxe-task-id'); + $this->compileTask = Property::get(IPxeBuilder::PROP_IPXE_COMPILE_TASKID); if ($this->compileTask !== false) { $this->compileTask = Taskmanager::status($this->compileTask); if (!Taskmanager::isTask($this->compileTask) || Taskmanager::isFinished($this->compileTask)) { @@ -37,7 +36,10 @@ class Page_ServerSetup extends Page $this->handleGetImage(); } - $this->currentMenu = Property::getBootMenu(); + if (User::hasPermission('edit.address')) { + Taskmanager::submit('IpxeVersion', + ['id' => IPxeBuilder::VERSION_LIST_TASK, 'action' => 'LIST'], true); + } $action = Request::post('action'); @@ -49,9 +51,20 @@ class Page_ServerSetup extends Page if ($action === 'compile') { User::assertPermission("edit.address"); if ($this->getCompileTask() === false) { - Trigger::ipxe(); + $taskId = IPxeBuilder::setIpxeVersion(Request::post('version', false, 'string')); + Trigger::ipxe($taskId); } - Util::redirect('?do=serversetup'); + Util::redirect('?do=serversetup&show=address&sv=1'); + } + if ($action === 'fetch' || $action === 'reset') { + User::assertPermission("edit.address"); + if ($this->getCompileTask() === false) { + $task = Taskmanager::submit('IpxeVersion', ['action' => strtoupper($action)]); + if (Taskmanager::isTask($task)) { + Property::set(IPxeBuilder::PROP_VERSION_SELECT_TASKID, $task['id'], 2); + } + } + Util::redirect('?do=serversetup&show=address&sv=1'); } if ($action === 'ip') { @@ -130,12 +143,13 @@ class Page_ServerSetup extends Page } if (Request::get('show') === false) { $subs = Dashboard::getSubmenus(); + $sv = Request::get('sv') ? '&sv=' . Request::get('sv') : ''; if (empty($subs)) { User::assertPermission('download'); } elseif ($addr && !preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', Property::getServerIp())) { - Util::redirect('?do=serversetup&show=address'); + Util::redirect('?do=serversetup&show=address' . $sv); } else { - Util::redirect($subs[0]['url']); + Util::redirect($subs[0]['url'] . $sv); } } } @@ -147,15 +161,22 @@ class Page_ServerSetup extends Page $show = Request::get('show'); if (in_array($show, ['menu', 'address', 'download'])) { - $task = $this->getCompileTask(); - if ($task !== false) { + $selectTask = Taskmanager::status(Property::get(IPxeBuilder::PROP_VERSION_SELECT_TASKID)); + $buildTask = $this->getCompileTask(); + if ($buildTask !== false || Taskmanager::isRunning($selectTask) || Request::get('sv')) { + Render::addTemplate('git_task', [ + 'selectTask' => Property::get(IPxeBuilder::PROP_VERSION_SELECT_TASKID), + 'reload' => Taskmanager::isRunning($selectTask), + ]); + } + if ($buildTask !== false) { $files = []; - if ($task['data'] && $task['data']['files']) { - foreach ($task['data']['files'] as $k => $v) { + if ($buildTask['data'] && $buildTask['data']['files']) { + foreach ($buildTask['data']['files'] as $k => $v) { $files[] = ['name' => $k, 'namehyphen' => str_replace(['/', '.'], '-', $k)]; } } - Render::addTemplate('ipxe_update', array('taskid' => $task['id'], 'files' => $files)); + Render::addTemplate('ipxe_update', ['taskid' => $buildTask['id'], 'files' => $files]); } } @@ -572,10 +593,30 @@ class Page_ServerSetup extends Page private function showEditAddress() { + $status = IPxeBuilder::getVersionTaskResult(); + $versions = false; + if ($status === false) { + $error = 'Taskmanager down'; + } elseif (!empty($status['versions'])) { + $versions = $status['versions']; + foreach ($versions as &$version) { + if ($version['hash'] === Property::get(IPxeBuilder::PROP_IPXE_HASH)) { + $version['hash_selected'] = 'selected'; + } + $version['date_s'] = date('Y-m-d H:i', $version['date']); + $version['hash_s'] = substr($version['hash'], 0, 7); + } + $error = false; + } else { + $error = $status['error'] ?? 'Unknown error'; + } Render::addTemplate('ipaddress', array( 'ips' => $this->addrListTask['data']['addresses'], 'chooseHintClass' => $this->hasIpSet ? '' : 'alert alert-danger', 'disabled' => ($this->getCompileTask() === false) ? '' : 'disabled', + 'versions' => $versions, + 'error' => $error, + 'lastBuild' => Property::get(IPxeBuilder::PROP_IPXE_BUILDSTRING), )); } |