summaryrefslogtreecommitdiffstats
path: root/modules-available/vmstore
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/vmstore')
-rw-r--r--modules-available/vmstore/baseconfig/getconfig.inc.php6
-rw-r--r--modules-available/vmstore/config.json4
-rw-r--r--modules-available/vmstore/lang/de/permissions.json4
-rw-r--r--modules-available/vmstore/lang/de/template-tags.json6
-rw-r--r--modules-available/vmstore/lang/en/permissions.json4
-rw-r--r--modules-available/vmstore/lang/en/template-tags.json4
-rw-r--r--modules-available/vmstore/page.inc.php22
-rw-r--r--modules-available/vmstore/permissions/permissions.json10
-rw-r--r--modules-available/vmstore/templates/page-vmstore.html16
9 files changed, 38 insertions, 38 deletions
diff --git a/modules-available/vmstore/baseconfig/getconfig.inc.php b/modules-available/vmstore/baseconfig/getconfig.inc.php
index 75f7279b..3bad16e1 100644
--- a/modules-available/vmstore/baseconfig/getconfig.inc.php
+++ b/modules-available/vmstore/baseconfig/getconfig.inc.php
@@ -9,11 +9,17 @@ if (is_array($vmstore) && isset($vmstore['storetype'])) {
break;
case 'nfs';
ConfigHolder::add("SLX_VM_NFS", $vmstore['nfsaddr']);
+ if (!empty($vmstore['nfsopts'])) {
+ ConfigHolder::add("SLX_VM_NFS_OPTS", $vmstore['nfsopts']);
+ }
break;
case 'cifs';
ConfigHolder::add("SLX_VM_NFS", $vmstore['cifsaddr']);
ConfigHolder::add("SLX_VM_NFS_USER", $vmstore['cifsuserro']);
ConfigHolder::add("SLX_VM_NFS_PASSWD", $vmstore['cifspasswdro']);
+ if (!empty($vmstore['cifsopts'])) {
+ ConfigHolder::add("SLX_VM_NFS_OPTS", $vmstore['cifsopts']);
+ }
break;
}
}
diff --git a/modules-available/vmstore/config.json b/modules-available/vmstore/config.json
index 7205d70a..36268c6a 100644
--- a/modules-available/vmstore/config.json
+++ b/modules-available/vmstore/config.json
@@ -1,3 +1,3 @@
{
- "category":"main.settings-server"
-}
+ "category": "main.settings-server"
+} \ No newline at end of file
diff --git a/modules-available/vmstore/lang/de/permissions.json b/modules-available/vmstore/lang/de/permissions.json
index f3148ea8..1f8d18d7 100644
--- a/modules-available/vmstore/lang/de/permissions.json
+++ b/modules-available/vmstore/lang/de/permissions.json
@@ -1,5 +1,3 @@
{
- "choose.internal": "Internen Speicher auswählen.",
- "choose.nfs": "Einen NFS Netzwerkspeicher auswählen.",
- "choose.cifs": "Einen CIFS Netzwerkspeicher auswählen."
+ "edit": "Den verwendeten VM-Speicher konfigurieren."
} \ No newline at end of file
diff --git a/modules-available/vmstore/lang/de/template-tags.json b/modules-available/vmstore/lang/de/template-tags.json
index 0b56d84f..8b6661c2 100644
--- a/modules-available/vmstore/lang/de/template-tags.json
+++ b/modules-available/vmstore/lang/de/template-tags.json
@@ -4,12 +4,12 @@
"lang_cifsHelp3": "Wenn exklusiv DNBD3 verwendet wird, k\u00f6nnen Sie den passwortlosen\r\nGastzugriff deaktivieren und die Zeile \"Nur-Lese-Zugangsdaten\" leer\r\nlassen. Dies erh\u00f6ht die Sicherheit.",
"lang_configure": "Konfigurieren",
"lang_internal": "Intern",
- "lang_nfsHelp1": "Ben\u00f6tigt wird ein NFSv4\/3-Share, der f\u00fcr den Satelliten-Server schreibbar, und f\u00fcr die Arbeitsstationen lesbar ist. Beispielkonfiguration auf dem NFS-Server, wenn der Satelliten-Server die Adresse 1.2.3.4 hat:",
+ "lang_nfsHelp1": "Ben\u00f6tigt wird ein NFSv4\/3-Share, der f\u00fcr den Satellitenserver schreibbar, und f\u00fcr die Arbeitsstationen lesbar ist. Beispielkonfiguration auf dem NFS-Server, wenn der Satellitenserver die Adresse 1.2.3.4 hat:",
"lang_nfsHelp2": "Alternative Konfiguration mittels all_squash. In diesem Fall muss das Verzeichnis auf dem Server dem Benutzer mit der uid 1234 geh\u00f6ren:",
"lang_nfsHelp3": "Die erste Zeile erlaubt den Lese- und Schreibzugriff des\r\nSatellitenservers. Die zweite Zeile erteilt allen anderen Rechnern\r\nausschlie\u00dflich Lesezugriff. Sie k\u00f6nnen dies nat\u00fcrlich auch auf\r\nspezielle Subnetze oder IP-Bereiche beschr\u00e4nken.",
"lang_nfsHelp4": "Wenn exklusiv DNBD3 verwendet wird, kann die zweite Zeile ausgelassen\r\nwerden. Dies erh\u00f6ht die Sicherheit.",
"lang_noAdditionalInformation": "Keine weitere Konfiguration notwendig",
- "lang_path": "Pfad",
+ "lang_optionalMountOptions": "Zu verwendende Mount-Optionen (optional):",
"lang_readOnly": "Nur-Lese-Zugangsdaten",
"lang_readWrite": "Lese\/Schreib-Zugangsdaten",
"lang_vmLocation": "VM Speicherort",
@@ -19,4 +19,4 @@
"lang_vmLocationHelp2": "Im Produktivbetrieb bietet es sich an, hierf\u00fcr einen performanten\r\nNetzwerkspeicher zu benutzen. Dieser Netzwerkspeicher kann per NFS oder\r\nCIFS\/SMB eingebunden werden. In jedem Fall muss sichergestellt werden,\r\ndass der Satellitenserver zum Hinzuf\u00fcgen neuer Virtueller Maschinen\r\nSchreibzugriff auf diesen Netzwerkspeicher hat. Bei der Nutzung von\r\nNFSv3 kann dies IP-Basiert eingerichtet werden, f\u00fcr die Nutzung von\r\nCIFS\/SMB k\u00f6nnen Sie Zugangsdaten angeben, die zum Schreiben\r\nberechtigen.",
"lang_vmLocationHelp3": "Im Fall von NFS und CIFS ben\u00f6tigen die bwLehrpool-Clients\r\nausschlie\u00dflich Lesezugriff auf den Netzwerkspeicher (und sollten aus\r\nSicherheitsgr\u00fcnden auch wirklich nur lesen k\u00f6nnen). Wenn Sie exklusiv\r\nDNBD3 verwenden, sind f\u00fcr die Clients keine Freigaben oder\r\nBerechtigungen notwendig, da der Zugriff \u00fcber den Sallitenserver\r\nstattfindet.",
"lang_vmLocationHelp4": "Sie k\u00f6nnen DNBD3 entweder exklusiv oder mit Fallback auf NFS\/CIFS verwenden. Im exklusiven Modus wird der Zugriff der Clients auf den kompletten VM-Speicher verhindert bzw. erschwert. Die Clients ben\u00f6tigen keinerlei Berechtigungen auf dem konfigurierten Share. Wenn Sie den Fallback Modus nutzen, werden f\u00fcr die Clients weiterhin Leseberechtigungen ben\u00f6tigt."
-}
+} \ No newline at end of file
diff --git a/modules-available/vmstore/lang/en/permissions.json b/modules-available/vmstore/lang/en/permissions.json
index 00708f7d..6d34014a 100644
--- a/modules-available/vmstore/lang/en/permissions.json
+++ b/modules-available/vmstore/lang/en/permissions.json
@@ -1,5 +1,3 @@
{
- "choose.internal": "Choose internal storage.",
- "choose.nfs": "Choose a NFS network storage.",
- "choose.cifs": "Choose a CIFS network storage."
+ "edit": "Configure VM storage to use."
} \ No newline at end of file
diff --git a/modules-available/vmstore/lang/en/template-tags.json b/modules-available/vmstore/lang/en/template-tags.json
index 1e712b13..5ec68318 100644
--- a/modules-available/vmstore/lang/en/template-tags.json
+++ b/modules-available/vmstore/lang/en/template-tags.json
@@ -9,7 +9,7 @@
"lang_nfsHelp3": "The first line allows read\/write access for the satellite server. The second line grants read-only access for every other IP address. You could limit the second line to specific IP ranges only if desired.",
"lang_nfsHelp4": "If using DNBD3 in exclusive mode, you can remove the second line completely, so only the satellite server has access to the NFS store.",
"lang_noAdditionalInformation": "No additional cofiguration required",
- "lang_path": "Path",
+ "lang_optionalMountOptions": "Mount options to use (optional):",
"lang_readOnly": "Read-only Access",
"lang_readWrite": "Read\/Write Access",
"lang_vmLocation": "VM Storage Location",
@@ -19,4 +19,4 @@
"lang_vmLocationHelp2": "In productive operation, it makes sense for this to use a high-performance network storage. This network storage can be integrated via NFS or CIFS \/ SMB. In any case, it must be ensured that the satellite server has write access to this network storage to add a new Virtual Machine . When using NFSv3 this can be set up IP-based, for the use of CIFS \/ SMB, you can access data disclosures that would entitle them to write.",
"lang_vmLocationHelp3": "The bwLehrpool clients only need read access to the network storage (and for security reasons, really can only read). In CIFS \/ SMB You can do this most easily by allowing passwordless guest access with read access to the share.",
"lang_vmLocationHelp4": "You can use DNBD3 exclusively or with NFS\/CIFS as fallback. In exclusive mode, you can deny direct access to the NFS\/CIFS store for clients, to prevent anyone from browsing the VM store directly. In fallback mode, the clients first try to use DNBD3 to run a VM and if that fails, they use NFS\/CIFS directly."
-}
+} \ No newline at end of file
diff --git a/modules-available/vmstore/page.inc.php b/modules-available/vmstore/page.inc.php
index c3d5da77..1e0cc619 100644
--- a/modules-available/vmstore/page.inc.php
+++ b/modules-available/vmstore/page.inc.php
@@ -8,10 +8,7 @@ class Page_VmStore extends Page
{
User::load();
- if (!User::isLoggedIn()) {
- Message::addError('main.no-permission');
- Util::redirect('?do=Main');
- }
+ User::assertPermission('edit');
$action = Request::post('action');
@@ -33,30 +30,25 @@ class Page_VmStore extends Page
if (isset($vmstore['storetype'])) {
$vmstore['pre-' . $vmstore['storetype']] = 'checked';
}
- $vmstore['internalAllowed'] = User::hasPermission("choose.internal");
- $vmstore['nfsAllowed'] = User::hasPermission("choose.nfs");
- $vmstore['cifsAllowed'] = User::hasPermission("choose.cifs");
- $vmstore['saveAllowed'] = $vmstore['internalAllowed'] || $vmstore['nfsAllowed'] || $vmstore['cifsAllowed'];
Render::addTemplate('page-vmstore', $vmstore);
}
private function setStore()
{
$vmstore = array();
- foreach (array('storetype', 'nfsaddr', 'cifsaddr', 'cifsuser', 'cifspasswd', 'cifsuserro', 'cifspasswdro') as $key) {
+ foreach (array('storetype', 'nfsaddr', 'nfsopts', 'cifsaddr', 'cifsuser', 'cifspasswd', 'cifsuserro', 'cifspasswdro', 'cifsopts') as $key) {
$vmstore[$key] = trim(Request::post($key, '', 'string'));
+ // Remove rw setting
+ if ($key === 'cifsopts' || $key === 'nfsopts') {
+ $vmstore[$key] = preg_replace('/\s+,\s+/', ',', $vmstore[$key]);
+ $vmstore[$key] = preg_replace('/^rw,|,rw$/', '', str_replace(',rw,', ',', $vmstore[$key]));
+ }
}
$storetype = $vmstore['storetype'];
if (!in_array($storetype, array('internal', 'nfs', 'cifs'))) {
Message::addError('main.value-invalid', 'type', $storetype);
Util::redirect('?do=VmStore');
}
- if (($storetype === 'internal' && !User::hasPermission("choose.internal")) ||
- ($storetype === 'nfs' && !User::hasPermission("choose.nfs")) ||
- ($storetype === 'cifs' && !User::hasPermission("choose.cifs"))) {
- Message::addError('main.no-permission');
- Util::redirect('?do=VmStore');
- }
// Validate syntax of nfs/cifs
if ($storetype === 'nfs' && !preg_match('#^\S+:\S+$#is', $vmstore['nfsaddr'])) {
Message::addError('main.value-invalid', 'nfsaddr', $vmstore['nfsaddr']);
diff --git a/modules-available/vmstore/permissions/permissions.json b/modules-available/vmstore/permissions/permissions.json
index f2c22c72..8303fd02 100644
--- a/modules-available/vmstore/permissions/permissions.json
+++ b/modules-available/vmstore/permissions/permissions.json
@@ -1,5 +1,5 @@
-[
- "choose.internal",
- "choose.nfs",
- "choose.cifs"
-] \ No newline at end of file
+{
+ "edit": {
+ "location-aware": false
+ }
+} \ No newline at end of file
diff --git a/modules-available/vmstore/templates/page-vmstore.html b/modules-available/vmstore/templates/page-vmstore.html
index fece8e24..0e1ad601 100644
--- a/modules-available/vmstore/templates/page-vmstore.html
+++ b/modules-available/vmstore/templates/page-vmstore.html
@@ -9,7 +9,7 @@
<p>{{lang_vmLocationChoose}} <a class="btn btn-default" data-toggle="modal" data-target="#help-store"><span class="glyphicon glyphicon-question-sign"></span></a></p>
- <div class="panel panel-default {{^internalAllowed}}disabledPanel{{/internalAllowed}}">
+ <div class="panel panel-default">
<div class="panel-heading">
<div class="radio">
<input type="radio" name="storetype" value="internal" {{pre-internal}} id="id-internal">
@@ -21,7 +21,7 @@
</div>
</div>
- <div class="panel panel-default {{^nfsAllowed}}disabledPanel{{/nfsAllowed}}">
+ <div class="panel panel-default">
<div class="panel-heading">
<div class="radio radio-inline">
<input type="radio" name="storetype" value="nfs" {{pre-nfs}} id="id-nfs">
@@ -32,12 +32,15 @@
<div class="panel-body">
<label for="nfsaddr">NFS-Export</label>
<input type="text" class="form-control" name="nfsaddr" value="{{nfsaddr}}" placeholder="1.2.3.4:/export/bwlp" id="nfsaddr">
+ <br>
+ <label for="nfsopts">{{lang_optionalMountOptions}}</label>
+ <input type="text" class="form-control" name="nfsopts" value="{{nfsopts}}" placeholder="vers=4.0,async,nolock" id="nfsopts">
</div>
</div>
- <div class="panel panel-default {{^cifsAllowed}}disabledPanel{{/cifsAllowed}}">
+ <div class="panel panel-default">
<div class="panel-heading">
<div class="radio radio-inline">
<input type="radio" name="storetype" value="cifs" {{pre-cifs}} id="id-cifs">
@@ -46,9 +49,12 @@
<a class="btn btn-default btn-sm" data-toggle="modal" data-target="#help-cifs"><span class="glyphicon glyphicon-question-sign"></span></a>
</div>
<div class="panel-body">
- <label for="cifsaddr">UNC-{{lang_path}}</label>
+ <label for="cifsaddr">UNC-Pfad</label>
<input type="text" class="form-control" name="cifsaddr" value="{{cifsaddr}}" placeholder="\\samba.server.example.com\bwlp" id="cifsaddr">
<br>
+ <label for="cifsopts">{{lang_optionalMountOptions}}</label>
+ <input type="text" class="form-control" name="cifsopts" value="{{cifsopts}}" placeholder="vers=3.0,sec=ntlmssp,nobrl,nounix" id="cifsopts">
+ <br>
<label for="cifsuser">{{lang_readWrite}}</label>
<div class="input-group">
<span class="input-group-addon slx-ga">
@@ -75,7 +81,7 @@
</div>
</div>
<div class="text-right">
- <button class="btn btn-primary" type="submit" {{^saveAllowed}}disabled{{/saveAllowed}}><span class="glyphicon glyphicon-floppy-disk"></span> {{lang_save}}</button>
+ <button class="btn btn-primary" type="submit"><span class="glyphicon glyphicon-floppy-disk"></span> {{lang_save}}</button>
</div>
</form>