summaryrefslogtreecommitdiffstats
path: root/modules-available/dnbd3
diff options
context:
space:
mode:
authorSimon Rettberg2017-10-13 15:13:38 +0200
committerSimon Rettberg2017-10-13 15:13:38 +0200
commitda6ecc50178f51d4fefe9730d88d4aa88f90dba4 (patch)
tree8d6dfa82d8d2926645b34aa3e5bc2be5265c1255 /modules-available/dnbd3
parent[dnbd3] Show free space, fix styling, add help texts and strings (de) (diff)
downloadslx-admin-da6ecc50178f51d4fefe9730d88d4aa88f90dba4.tar.gz
slx-admin-da6ecc50178f51d4fefe9730d88d4aa88f90dba4.tar.xz
slx-admin-da6ecc50178f51d4fefe9730d88d4aa88f90dba4.zip
[dnbd3] Implement settings dialog for automatic proxies
Diffstat (limited to 'modules-available/dnbd3')
-rw-r--r--modules-available/dnbd3/inc/dnbd3util.inc.php9
-rw-r--r--modules-available/dnbd3/lang/de/messages.json1
-rw-r--r--modules-available/dnbd3/lang/de/template-tags.json5
-rw-r--r--modules-available/dnbd3/page.inc.php97
-rw-r--r--modules-available/dnbd3/templates/fragment-server-settings.html14
-rw-r--r--modules-available/dnbd3/templates/page-serverlist.html29
6 files changed, 109 insertions, 46 deletions
diff --git a/modules-available/dnbd3/inc/dnbd3util.inc.php b/modules-available/dnbd3/inc/dnbd3util.inc.php
index ae5e0cd7..03499413 100644
--- a/modules-available/dnbd3/inc/dnbd3util.inc.php
+++ b/modules-available/dnbd3/inc/dnbd3util.inc.php
@@ -38,7 +38,7 @@ class Dnbd3Util {
array('machineuuid' => $client['machineuuid']));
// Missing from $servers now but we'll handle them in the next run, so don't bother
}
- // Same for this server - we use the special fixedip '<self>' for it and need to prevent we don't have the
+ // Same for this server - we use the special fixedip '<self>' for it and need to make surecx we don't have the
// IP address of the server itself in the list.
Database::exec('DELETE FROM dnbd3_server WHERE fixedip = :serverip', array('serverip' => $satServerIp));
Database::exec("INSERT IGNORE INTO dnbd3_server (fixedip) VALUES ('<self>')");
@@ -93,7 +93,8 @@ class Dnbd3Util {
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
$assignedLocs[] = $row['locationid'];
}
- if (!empty($assignedLocs)) {
+ $modeData = (array)json_decode($modeData, true);
+ if (!empty($assignedLocs) && isset($modeData['firewall']) && $modeData['firewall']) {
// Get all sub-locations too
$recursiveLocs = $assignedLocs;
$locations = Location::getLocationsAssoc();
@@ -140,6 +141,10 @@ class Dnbd3Util {
if (!empty($private)) {
ConfigHolder::add('SLX_DNBD3_PRIVATE', implode(' ', $private));
}
+ if (isset($modeData['bgr']) && $modeData['bgr']) {
+ // Background replication
+ ConfigHolder::add('SLX_DNBD3_BGR', '1');
+ }
ConfigHolder::add('SLX_ADDONS', '', 1000);
ConfigHolder::add('SLX_SHUTDOWN_TIMEOUT', '', 1000);
ConfigHolder::add('SLX_SHUTDOWN_SCHEDULE', '', 1000);
diff --git a/modules-available/dnbd3/lang/de/messages.json b/modules-available/dnbd3/lang/de/messages.json
index b5f455dd..630ebe31 100644
--- a/modules-available/dnbd3/lang/de/messages.json
+++ b/modules-available/dnbd3/lang/de/messages.json
@@ -1,5 +1,6 @@
{
"invalid-ipv4": "{{0}} ist keine g\u00fcltige IPv4-Adresse",
+ "not-automatic-server": "{{0}} wird nicht \u00fcber den Satelliten verwaltet",
"server-added": "Server {{0}} hinzugef\u00fcgt",
"server-already-exists": "Server {{0}} existiert bereits",
"server-deleted": "Server {{0}} gel\u00f6scht",
diff --git a/modules-available/dnbd3/lang/de/template-tags.json b/modules-available/dnbd3/lang/de/template-tags.json
index 0593950c..0f9920a2 100644
--- a/modules-available/dnbd3/lang/de/template-tags.json
+++ b/modules-available/dnbd3/lang/de/template-tags.json
@@ -1,6 +1,8 @@
{
"lang_addServer": "Server hinzuf\u00fcgen",
"lang_allowedSubnets": "Zum Zugriff freigegebene Subnets",
+ "lang_backgroundReplication": "Replikation im Hintergrund",
+ "lang_backgroundReplicationInfo": "Sobald eine VM \u00fcber den Proxy angefragt wird, spiegelt der Proxy im Hintergrund den vollst\u00e4ndigen Inhalt des VM-Abbildes, nicht nur die angefragten Bl\u00f6cke.",
"lang_bytesSent": "Gesendet",
"lang_changeDnbd3Status": "DNBD3 ein-\/ausschalten",
"lang_client": "Client",
@@ -13,12 +15,15 @@
"lang_dnbd3IntroText": "DNBD3 ist ganz toll. Einfach einschalten und los gehts, zu beachten gibt es rein gar nichts!",
"lang_dnbd3Management": "DNBD3 Verwaltung",
"lang_dnbd3Status": "DNBD3 Status",
+ "lang_editProxyHeading": "Proxy-Einstellungen bearbeiten",
"lang_enableDnbd3": "DNBD3 aktivieren",
"lang_enabled": "Aktiviert",
"lang_enterIpOfServer": "Bitte geben Sie die IP-Adresse des hinzuzuf\u00fcgenden Servers ein",
"lang_externalServer": "Externer DNBD3-Server",
"lang_externalServerAdd": "Externen Server hinzuf\u00fcgen",
"lang_externalServerHelp": "Ein externer Server wird nicht \u00fcber den Satellitenserver konfiguriert und verwaltet. Das Installieren, Einrichten und ggf. Aktualisieren der DNBD3-Serversoftware muss manuell durchgef\u00fchrt werden.\r\nDies bietet mehr Flexibilit\u00e4t bei der Konfiguration und Anpassung, z.B. bei der Verwendung von RAID- oder bcache-Setups, oder wenn der DNBD3-Server auf einer Maschine laufen soll, die noch andere Services bereitstellt.\r\nWeitere Informationen dazu finden Sie im Wiki.",
+ "lang_firewallInfo": "Wird ein Proxy auf einen oder mehrere R\u00e4ume beschr\u00e4nkt, werden Clients aus anderen R\u00e4umen diesen Proxy nicht verwenden. Technisch ist der Zugriff aus anderen R\u00e4umen jedoch trotzdem noch m\u00f6glich. Mit aktivieren dieser Option wird der Zugriff aus anderen R\u00e4umen per Firewall verhindert.",
+ "lang_firewalled": "Zugriff auf zugewiesene R\u00e4ume beschr\u00e4nken",
"lang_global": "Global",
"lang_lastSeen": "Letzte Aktivit\u00e4t",
"lang_location": "Ort",
diff --git a/modules-available/dnbd3/page.inc.php b/modules-available/dnbd3/page.inc.php
index a2d47f1e..cfe86e48 100644
--- a/modules-available/dnbd3/page.inc.php
+++ b/modules-available/dnbd3/page.inc.php
@@ -18,6 +18,8 @@ class Page_Dnbd3 extends Page
$this->deleteServer();
} elseif ($action === 'addserver') {
$this->addServer();
+ } elseif ($action === 'editserver') {
+ $this->editServer();
} elseif ($action === 'savelocations') {
$this->saveServerLocations();
} elseif ($action === 'toggle-usage') {
@@ -28,6 +30,19 @@ class Page_Dnbd3 extends Page
}
}
+ private function editServer()
+ {
+ $server = $this->getServerById();
+ if (!isset($server['machineuuid'])) {
+ Message::addError('not-automatic-server', $server['ip']);
+ return;
+ }
+ $bgr = Request::post('bgr', false, 'bool');
+ $firewall = Request::post('firewall', false, 'bool');
+ RunMode::setRunMode($server['machineuuid'], 'dnbd3', 'proxy',
+ json_encode(compact('bgr', 'firewall')));
+ }
+
private function toggleUsage()
{
$enabled = Request::post('enabled', false, 'bool');
@@ -284,42 +299,60 @@ class Page_Dnbd3 extends Page
{
$action = Request::any('action', false, 'string');
if ($action === 'servertest') {
- Header('Content-Type: application/json; charset=utf-8');
- $ip = Request::post('ip', false, 'string');
- if ($ip === false)
- die('{"error": "Missing parameter", "fatal": true}');
- $ip = ip2long(trim($ip));
- if ($ip !== false) {
- $ip = long2ip($ip);
- }
- if ($ip === false)
- die('{"error": "Supports IPv4 only", "fatal": true}');
- // Dup?
- $res = Database::queryFirst('SELECT serverid FROM dnbd3_server s
- LEFT JOIN machine m USING (machineuuid)
- WHERE s.fixedip = :ip OR m.clientip = :ip', compact('ip'));
- if ($res !== false)
- die('{"error": "Server with this IP already exists", "fatal": true}');
- // Query
- $reply = Dnbd3Rpc::query($ip, 5003,true, false, false, true);
- if ($reply === false)
- die('{"error": "Could not reach server"}');
- if (!is_array($reply))
- die('{"error": "No JSON received from server"}');
- if (!isset($reply['uptime']) || !isset($reply['clientCount']))
- die('{"error": "Reply does not suggest this is a dnbd3 server"}');
- echo json_encode($reply);
+ $this->ajaxServerTest();
} elseif ($action === 'editserver') {
- $server = $this->getServerById();
- if (isset($server['machineuuid'])) {
- echo 'Not automatic server.';
- } else {
- //RunMode::getForModule()
- echo Render::parse('fragment-server-settings', $server);
- }
+ $this->ajaxEditServer();
} else {
die($action . '???');
}
}
+ private function ajaxServerTest()
+ {
+ Header('Content-Type: application/json; charset=utf-8');
+ $ip = Request::post('ip', false, 'string');
+ if ($ip === false)
+ die('{"error": "Missing parameter", "fatal": true}');
+ $ip = ip2long(trim($ip));
+ if ($ip !== false) {
+ $ip = long2ip($ip);
+ }
+ if ($ip === false)
+ die('{"error": "Supports IPv4 only", "fatal": true}');
+ // Dup?
+ $res = Database::queryFirst('SELECT serverid FROM dnbd3_server s
+ LEFT JOIN machine m USING (machineuuid)
+ WHERE s.fixedip = :ip OR m.clientip = :ip', compact('ip'));
+ if ($res !== false)
+ die('{"error": "Server with this IP already exists", "fatal": true}');
+ // Query
+ $reply = Dnbd3Rpc::query($ip, 5003,true, false, false, true);
+ if ($reply === false)
+ die('{"error": "Could not reach server"}');
+ if (!is_array($reply))
+ die('{"error": "No JSON received from server"}');
+ if (!isset($reply['uptime']) || !isset($reply['clientCount']))
+ die('{"error": "Reply does not suggest this is a dnbd3 server"}');
+ echo json_encode($reply);
+ }
+
+ private function ajaxEditServer()
+ {
+ $server = $this->getServerById();
+ if (!isset($server['machineuuid'])) {
+ echo 'Not automatic server.';
+ return;
+ }
+ $rm = RunMode::getForMode(Page::getModule(), 'proxy', false, true);
+ if (!isset($rm[$server['machineuuid']])) {
+ echo 'Error: RunMode entry missing.';
+ return;
+ }
+ $modeData = json_decode($rm[$server['machineuuid']]['modedata'], true);
+ if (is_array($modeData)) {
+ $server += $modeData;
+ }
+ echo Render::parse('fragment-server-settings', $server);
+ }
+
}
diff --git a/modules-available/dnbd3/templates/fragment-server-settings.html b/modules-available/dnbd3/templates/fragment-server-settings.html
new file mode 100644
index 00000000..61b0626d
--- /dev/null
+++ b/modules-available/dnbd3/templates/fragment-server-settings.html
@@ -0,0 +1,14 @@
+<input type="hidden" name="server" value="{{serverid}}">
+
+<div class="checkbox">
+ <input type="checkbox" name="bgr" id="bgr" {{#bgr}}checked{{/bgr}}>
+ <label for="bgr">{{lang_backgroundReplication}}</label>
+</div>
+<i>{{lang_backgroundReplicationInfo}}</i>
+<br>
+<div class="checkbox">
+ <input type="checkbox" name="firewall" id="firewall" {{#firewall}}checked{{/firewall}}>
+ <label for="firewall">{{lang_firewalled}}</label>
+</div>
+<i>{{lang_firewallInfo}}</i>
+<br>
diff --git a/modules-available/dnbd3/templates/page-serverlist.html b/modules-available/dnbd3/templates/page-serverlist.html
index 84c587a2..2280511b 100644
--- a/modules-available/dnbd3/templates/page-serverlist.html
+++ b/modules-available/dnbd3/templates/page-serverlist.html
@@ -203,18 +203,23 @@
<div id="server-edit-modal" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal">&times;</button>
- <h4 class="modal-title"><b>{{lang_editProxyHeading}}</b></h4>
- </div>
- <div class="modal-body" id="server-edit-body">
- .
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-primary pull-right" data-dismiss="modal">
- {{lang_close}}
- </button>
- </div>
+ <form method="post" action="?do=dnbd3">
+ <input type="hidden" name="token" value="{{token}}">
+ <input type="hidden" name="action" value="editserver">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal">&times;</button>
+ <h4 class="modal-title"><b>{{lang_editProxyHeading}}</b></h4>
+ </div>
+ <div class="modal-body" id="server-edit-body">
+ .
+ </div>
+ <div class="modal-footer">
+ <button type="submit" class="btn btn-primary pull-right">
+ <span class="glyphicon glyphicon-floppy-disk"></span>
+ {{lang_save}}
+ </button>
+ </div>
+ </form>
</div>
</div>
</div>