summaryrefslogtreecommitdiffstats
path: root/modules-available/serversetup-bwlp/page.inc.php
diff options
context:
space:
mode:
authorSimon Rettberg2019-01-18 16:37:17 +0100
committerSimon Rettberg2019-01-18 16:37:17 +0100
commit63aa220d849dca2384773bf755358557a1d711c5 (patch)
treedda64ebb4c70bac3dae4d8e101d6570a2d6aa3c3 /modules-available/serversetup-bwlp/page.inc.php
parent[inc/Trigger] PHP 5.6 compat (diff)
downloadslx-admin-63aa220d849dca2384773bf755358557a1d711c5.tar.gz
slx-admin-63aa220d849dca2384773bf755358557a1d711c5.tar.xz
slx-admin-63aa220d849dca2384773bf755358557a1d711c5.zip
[serversetup-bwlp] Make localboot method configurable
Diffstat (limited to 'modules-available/serversetup-bwlp/page.inc.php')
-rw-r--r--modules-available/serversetup-bwlp/page.inc.php78
1 files changed, 78 insertions, 0 deletions
diff --git a/modules-available/serversetup-bwlp/page.inc.php b/modules-available/serversetup-bwlp/page.inc.php
index a71e56ef..7766050b 100644
--- a/modules-available/serversetup-bwlp/page.inc.php
+++ b/modules-available/serversetup-bwlp/page.inc.php
@@ -88,6 +88,11 @@ class Page_ServerSetup extends Page
Util::redirect('?do=locations');
}
+ if ($action === 'savelocalboot') {
+ User::assertPermission('ipxe.localboot.edit');
+ $this->saveLocalboot();
+ }
+
if ($action === 'deleteMenu') {
// Permcheck in function
$this->deleteMenu();
@@ -114,6 +119,9 @@ class Page_ServerSetup extends Page
if (User::hasPermission('download')) {
Dashboard::addSubmenu('?do=serversetup&show=download', Dictionary::translate('submenu_download', true));
}
+ if (User::hasPermission('ipxe.localboot.*')) {
+ Dashboard::addSubmenu('?do=serversetup&show=localboot', Dictionary::translate('submenu_localboot', true));
+ }
if (Request::get('show') === false) {
$subs = Dashboard::getSubmenus();
if (empty($subs)) {
@@ -168,6 +176,10 @@ class Page_ServerSetup extends Page
// Permcheck in function
$this->showEditLocation();
break;
+ case 'localboot':
+ User::assertPermission('ipxe.localboot.*');
+ $this->showLocalbootConfig();
+ break;
default:
Util::redirect('?do=serversetup');
break;
@@ -218,6 +230,49 @@ class Page_ServerSetup extends Page
Render::addTemplate('download', ['files' => $files]);
}
+ private function makeSelectArray($list, $default)
+ {
+ $ret = [];
+ foreach (array_keys($list) as $k) {
+ $ret[] = [
+ 'key' => $k,
+ 'selected' => ($k === $default ? 'selected' : ''),
+ ];
+ }
+ return $ret;
+ }
+
+ private function showLocalbootConfig()
+ {
+ // Default setting
+ $default = Property::get('serversetup.localboot', false);
+ if (!array_key_exists($default, Localboot::BOOT_METHODS)) {
+ $default = 'AUTO';
+ }
+ $optionList = $this->makeSelectArray(Localboot::BOOT_METHODS, $default);
+ // Exceptions
+ $cutoff = strtotime('-90 days');
+ $models = [];
+ $res = Database::simpleQuery('SELECT m.systemmodel, cnt, sl.bootmethod FROM (
+ SELECT m2.systemmodel, Count(*) AS cnt FROM machine m2
+ WHERE m2.lastseen > :cutoff
+ GROUP BY systemmodel
+ ) m
+ LEFT JOIN serversetup_localboot sl USING (systemmodel)
+ ORDER BY systemmodel', ['cutoff' => $cutoff]);
+ while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
+ $row['options'] = $this->makeSelectArray(Localboot::BOOT_METHODS, $row['bootmethod']);
+ $models[] = $row;
+ }
+ // Output
+ $data = [
+ 'default' => $default,
+ 'options' => $optionList,
+ 'exceptions' => $models,
+ ];
+ Render::addTemplate('localboot', $data);
+ }
+
private function showBootentryList()
{
$allowEdit = User::hasPermission('ipxe.bootentry.edit');
@@ -734,4 +789,27 @@ class Page_ServerSetup extends Page
Message::addSuccess('location-menu-assigned', $loc['locationname']);
}
+ private function saveLocalboot()
+ {
+ $default = Request::post('default', 'AUTO', 'string');
+ if (!array_key_exists($default, Localboot::BOOT_METHODS)) {
+ Message::addError('localboot-invalid-method', $default);
+ return;
+ }
+ $overrides = Request::post('override', [], 'array');
+ Database::exec('TRUNCATE TABLE serversetup_localboot');
+ foreach ($overrides as $model => $mode) {
+ if (empty($mode)) // No override
+ continue;
+ if (!array_key_exists($mode, Localboot::BOOT_METHODS)) {
+ Message::addWarning('localboot-invalid-method', $mode);
+ continue;
+ }
+ Database::exec('INSERT INTO serversetup_localboot (systemmodel, bootmethod)
+ VALUES (:model, :mode)', compact('model', 'mode'));
+ }
+ Message::addSuccess('localboot-saved');
+ Util::redirect('?do=serversetup&show=localboot');
+ }
+
}