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/SharedFilesEdit.js | 101 +++++++++++++++++++++++++++
 4 files changed, 122 insertions(+)
 create mode 100644 www/manager6/qemu/SharedFilesEdit.js

diff --git a/www/manager6/Makefile b/www/manager6/Makefile
index bce14fdb..5900c9a4 100644
--- a/www/manager6/Makefile
+++ b/www/manager6/Makefile
@@ -241,6 +241,7 @@ JSSRC=                                                      
\
        qemu/QemuBiosEdit.js                            \
        qemu/RNGEdit.js                                 \
        qemu/SSHKey.js                                  \
+       qemu/SharedFilesEdit.js                         \
        qemu/ScsiHwEdit.js                              \
        qemu/SerialEdit.js                              \
        qemu/Smbios1Edit.js                             \
diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index 94e75d5c..a8e749b5 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -1596,6 +1596,7 @@ Ext.define('PVE.Utils', {
        serial: 4,
        rng: 1,
        tpmstate: 1,
+       sharedfiles: 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 af35a980..e1ceb32a 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.sharedfiles; i++) {
+           let confid = "sharedfiles" + i.toString();
+           rows[confid] = {
+               group: 50,
+               order: i,
+               iconCls: 'folder',
+               editor: 'PVE.qemu.SharedFilesEdit',
+               header: gettext('Shared FS') + ' (' + confid +')',
+           };
+       }
 
        var sorterFn = function(rec1, rec2) {
            var v1 = rec1.data.key;
@@ -582,6 +592,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(noSysConsolePerm || isAtUsbLimit());
            me.down('#addPci').setDisabled(noSysConsolePerm || 
isAtLimit('hostpci'));
@@ -591,6 +602,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('#addFileshare').setDisabled(noVMConfigOptionsPerm || 
isAtLimit('sharedfiles'));
            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("Shared Filesystem"),
+                               itemId: 'addFileshare',
+                               iconCls: 'fa fa-folder',
+                               disabled: !caps.nodes['Sys.Console'],
+                               handler: editorFactory('SharedFilesEdit'),
+                           },
                        ],
                    }),
                },
diff --git a/www/manager6/qemu/SharedFilesEdit.js 
b/www/manager6/qemu/SharedFilesEdit.js
new file mode 100644
index 00000000..b4d0a253
--- /dev/null
+++ b/www/manager6/qemu/SharedFilesEdit.js
@@ -0,0 +1,101 @@
+Ext.define('PVE.qemu.SharedFilesInputPanel', {
+    extend: 'Proxmox.panel.InputPanel',
+    xtype: 'pveSharedFilesInputPanel',
+    onlineHelp: 'qm_sharedfiles',
+
+    insideWizard: false,
+
+    onGetValues: function(values) {
+       var me = this;
+       var confid = me.confid;
+       var params = {};
+       params[confid] = PVE.Parser.printPropertyString(values, 'type');
+       return params;
+    },
+
+    setSharedfiles: function(confid, data) {
+       var me = this;
+       me.confid = confid;
+       me.sharedfiles = data;
+       me.setValues(me.sharedfiles);
+    },
+    items: [
+       {
+           name: 'type',
+           xtype: 'proxmoxKVComboBox',
+           fieldLabel: gettext('Shared FS Type'),
+           comboItems: [['virtio-9p', 'virtio-9p'], ['virtio-fs', 
'virtio-fs']],
+           allowBlank: false,
+       },
+       {
+           xtype: 'proxmoxtextfield',
+           emptyText: 'dirid',
+           fieldLabel: gettext('Directory ID'),
+           name: 'dirid',
+           allowBlank: false,
+       },
+       {
+           xtype: 'proxmoxtextfield',
+           emptyText: 'tag name',
+           fieldLabel: gettext('tag'),
+           name: 'tag',
+           allowBlank: false,
+       },
+    ],
+    initComponent: function() {
+       var me = this;
+
+       me.sharedfiles = {};
+       me.confid = 'sharedfiles0';
+       me.callParent();
+    },
+});
+
+Ext.define('PVE.qemu.SharedFilesEdit', {
+    extend: 'Proxmox.window.Edit',
+
+    subject: gettext('Filesystem Passthrough'),
+
+    initComponent: function() {
+       var me = this;
+
+       me.isCreate = !me.confid;
+
+       var ipanel = Ext.create('PVE.qemu.SharedFilesInputPanel', {
+           confid: me.confid,
+           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 sharedfiles = PVE.Parser.parsePropertyString(value, 
"type");
+                   if (!sharedfiles) {
+                       Ext.Msg.alert(gettext('Error'), 'Unable to parse 
sharedfiles options');
+                       me.close();
+                       return;
+                   }
+                   ipanel.setSharedfiles(me.confid, sharedfiles);
+               } else {
+                   for (i = 0; i < PVE.Utils.hardware_counts.sharedfiles; i++) 
{
+                       confid = 'sharedfiles' + i.toString();
+                       if (!Ext.isDefined(me.conf[confid])) {
+                           me.confid = confid;
+                           break;
+                       }
+                   }
+                   ipanel.setSharedfiles(me.confid, {});
+               }
+           },
+       });
+    },
+});
-- 
2.30.2



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

Reply via email to