Signed-off-by: Markus Frank <m.fr...@proxmox.com>
---
 www/manager6/Makefile             |   1 +
 www/manager6/Utils.js             |   1 +
 www/manager6/qemu/HardwareView.js |  19 +++++
 www/manager6/qemu/VirtiofsEdit.js | 137 ++++++++++++++++++++++++++++++
 4 files changed, 158 insertions(+)
 create mode 100644 www/manager6/qemu/VirtiofsEdit.js

diff --git a/www/manager6/Makefile b/www/manager6/Makefile
index cac8cd02..29d676df 100644
--- a/www/manager6/Makefile
+++ b/www/manager6/Makefile
@@ -270,6 +270,7 @@ JSSRC=                                                      
\
        qemu/Smbios1Edit.js                             \
        qemu/SystemEdit.js                              \
        qemu/USBEdit.js                                 \
+       qemu/VirtiofsEdit.js                            \
        sdn/Browser.js                                  \
        sdn/ControllerView.js                           \
        sdn/Status.js                                   \
diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index f5608944..52ea5589 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -1636,6 +1636,7 @@ Ext.define('PVE.Utils', {
        serial: 4,
        rng: 1,
        tpmstate: 1,
+       virtiofs: 10,
     },
 
     // we can have usb6 and up only for specific machine/ostypes
diff --git a/www/manager6/qemu/HardwareView.js 
b/www/manager6/qemu/HardwareView.js
index 672a7e1a..0d4a3984 100644
--- a/www/manager6/qemu/HardwareView.js
+++ b/www/manager6/qemu/HardwareView.js
@@ -309,6 +309,16 @@ Ext.define('PVE.qemu.HardwareView', {
            never_delete: !caps.nodes['Sys.Console'],
            header: gettext("VirtIO RNG"),
        };
+       for (let i = 0; i < PVE.Utils.hardware_counts.virtiofs; i++) {
+           let confid = "virtiofs" + i.toString();
+           rows[confid] = {
+               group: 50,
+               order: i,
+               iconCls: 'folder',
+               editor: 'PVE.qemu.VirtiofsEdit',
+               header: gettext('Virtiofs') + ' (' + confid +')',
+           };
+       }
 
        var sorterFn = function(rec1, rec2) {
            var v1 = rec1.data.key;
@@ -583,6 +593,7 @@ Ext.define('PVE.qemu.HardwareView', {
            const noVMConfigDiskPerm = !caps.vms['VM.Config.Disk'];
            const noVMConfigCDROMPerm = !caps.vms['VM.Config.CDROM'];
            const noVMConfigCloudinitPerm = !caps.vms['VM.Config.Cloudinit'];
+           const noVMConfigOptionsPerm = !caps.vms['VM.Config.Options'];
 
            me.down('#addUsb').setDisabled(noHWPerm || isAtUsbLimit());
            me.down('#addPci').setDisabled(noHWPerm || isAtLimit('hostpci'));
@@ -592,6 +603,7 @@ Ext.define('PVE.qemu.HardwareView', {
            me.down('#addRng').setDisabled(noSysConsolePerm || 
isAtLimit('rng'));
            efidisk_menuitem.setDisabled(noVMConfigDiskPerm || 
isAtLimit('efidisk'));
            me.down('#addTpmState').setDisabled(noSysConsolePerm || 
isAtLimit('tpmstate'));
+           me.down('#addVirtiofs').setDisabled(noVMConfigOptionsPerm || 
isAtLimit('virtiofs'));
            me.down('#addCloudinitDrive').setDisabled(noVMConfigCDROMPerm || 
noVMConfigCloudinitPerm || hasCloudInit);
 
            if (!rec) {
@@ -735,6 +747,13 @@ Ext.define('PVE.qemu.HardwareView', {
                                disabled: !caps.nodes['Sys.Console'],
                                handler: editorFactory('RNGEdit'),
                            },
+                           {
+                               text: gettext("Virtiofs"),
+                               itemId: 'addVirtiofs',
+                               iconCls: 'fa fa-folder',
+                               disabled: !caps.nodes['Sys.Console'],
+                               handler: editorFactory('VirtiofsEdit'),
+                           },
                        ],
                    }),
                },
diff --git a/www/manager6/qemu/VirtiofsEdit.js 
b/www/manager6/qemu/VirtiofsEdit.js
new file mode 100644
index 00000000..ec5c69fd
--- /dev/null
+++ b/www/manager6/qemu/VirtiofsEdit.js
@@ -0,0 +1,137 @@
+Ext.define('PVE.qemu.VirtiofsInputPanel', {
+    extend: 'Proxmox.panel.InputPanel',
+    xtype: 'pveVirtiofsInputPanel',
+    onlineHelp: 'qm_virtiofs',
+
+    insideWizard: false,
+
+    onGetValues: function(values) {
+       var me = this;
+       var confid = me.confid;
+       var params = {};
+       delete values.delete;
+       params[confid] = PVE.Parser.printPropertyString(values, 'dirid');
+       return params;
+    },
+
+    setSharedfiles: function(confid, data) {
+       var me = this;
+       me.confid = confid;
+       me.virtiofs = data;
+       me.setValues(me.virtiofs);
+    },
+    initComponent: function() {
+       let me = this;
+
+       me.nodename = me.pveSelNode.data.node;
+       if (!me.nodename) {
+           throw "no node name specified";
+       }
+       me.items = [
+           {
+               xtype: 'pveDirMapSelector',
+               emptyText: 'dirid',
+               nodename: me.nodename,
+               fieldLabel: gettext('Directory ID'),
+               name: 'dirid',
+               allowBlank: false,
+           },
+           {
+               xtype: 'proxmoxKVComboBox',
+               fieldLabel: gettext('Cache'),
+               name: 'cache',
+               value: '__default__',
+               deleteDefaultValue: false,
+               comboItems: [
+                   ['__default__', Proxmox.Utils.defaultText + ' (auto)'],
+                   ['auto', 'auto'],
+                   ['always', 'always'],
+                   ['never', 'never'],
+               ],
+           },
+           {
+               xtype: 'proxmoxKVComboBox',
+               fieldLabel: gettext('xattr'),
+               name: 'xattr',
+               value: '__default__',
+               deleteDefaultValue: false,
+               comboItems: [
+                   ['__default__', Proxmox.Utils.defaultText + ' (Mapping 
Settings)'],
+                   ['0', 'off'],
+                   ['1', 'on'],
+               ],
+           },
+           {
+               xtype: 'proxmoxKVComboBox',
+               fieldLabel: gettext('acl (implies xattr)'),
+               name: 'acl',
+               value: '__default__',
+               deleteDefaultValue: false,
+               comboItems: [
+                   ['__default__', Proxmox.Utils.defaultText + ' (Mapping 
Settings)'],
+                   ['0', 'off'],
+                   ['1', 'on'],
+               ],
+           },
+           {
+               xtype: 'proxmoxcheckbox',
+               fieldLabel: gettext('Direct-io'),
+               name: 'direct-io',
+           },
+       ];
+
+       me.virtiofs = {};
+       me.confid = 'virtiofs0';
+       me.callParent();
+    },
+});
+
+Ext.define('PVE.qemu.VirtiofsEdit', {
+    extend: 'Proxmox.window.Edit',
+
+    subject: gettext('Filesystem Passthrough'),
+
+    initComponent: function() {
+       var me = this;
+
+       me.isCreate = !me.confid;
+
+       var ipanel = Ext.create('PVE.qemu.VirtiofsInputPanel', {
+           confid: me.confid,
+           pveSelNode: me.pveSelNode,
+           isCreate: me.isCreate,
+       });
+
+       Ext.applyIf(me, {
+           items: ipanel,
+       });
+
+       me.callParent();
+
+       me.load({
+           success: function(response) {
+               me.conf = response.result.data;
+               var i, confid;
+               if (!me.isCreate) {
+                   var value = me.conf[me.confid];
+                   var virtiofs = PVE.Parser.parsePropertyString(value, 
"dirid");
+                   if (!virtiofs) {
+                       Ext.Msg.alert(gettext('Error'), 'Unable to parse 
virtiofs options');
+                       me.close();
+                       return;
+                   }
+                   ipanel.setSharedfiles(me.confid, virtiofs);
+               } else {
+                   for (i = 0; i < PVE.Utils.hardware_counts.virtiofs; i++) {
+                       confid = 'virtiofs' + i.toString();
+                       if (!Ext.isDefined(me.conf[confid])) {
+                           me.confid = confid;
+                           break;
+                       }
+                   }
+                   ipanel.setSharedfiles(me.confid, {});
+               }
+           },
+       });
+    },
+});
-- 
2.39.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to