This commit adds a button in the hardware view for quickly ejecting
unnecessary cdroms or ISO files by setting file to 'none'.

Signed-off-by: Daniel Herzig <d.her...@proxmox.com>
---
 www/manager6/qemu/HardwareView.js | 42 +++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/www/manager6/qemu/HardwareView.js 
b/www/manager6/qemu/HardwareView.js
index c6d193fc..d8a9e187 100644
--- a/www/manager6/qemu/HardwareView.js
+++ b/www/manager6/qemu/HardwareView.js
@@ -541,6 +541,44 @@ Ext.define('PVE.qemu.HardwareView', {
            apiurl: '/api2/extjs/' + baseurl,
        });
 
+       let eject_btn = new Proxmox.button.Button({
+           text: gettext('Eject'),
+           disabled: true,
+           selModel: sm,
+           RESTMethod: 'POST',
+           confirmMsg: function(rec) {
+               let confirmMessage = gettext("Are you sure you want to eject 
'{0}' ?");
+               let isoFile = PVE.Parser.parsePropertyString(rec.data.value, 
'volid').volid;
+               return Ext.htmlEncode(Ext.String.format(confirmMessage, 
isoFile));
+           },
+           handler: function(btn, e, rec) {
+               let params = {};
+               params[rec.data.key] = 'none,media=cdrom';
+               if (btn.RESTMethod === 'POST') {
+                   params.background_delay = 5;
+               }
+               Proxmox.Utils.API2Request({
+                   url: '/api2/extjs/' + baseurl,
+                   waitMsgTarget: me,
+                   method: btn.RESTMethod,
+                   params: params,
+                   callback: () => me.reload(),
+                   failure: response => Ext.Msg.alert('Error', 
response.htmlStatus),
+                   success: function(response, options) {
+                       if (btn.RESTMethod === 'POST' && response.result.data 
!== null) {
+                           Ext.create('Proxmox.window.TaskProgress', {
+                               autoShow: true,
+                               upid: response.result.data,
+                               listeners: {
+                                   destroy: () => me.reload(),
+                               },
+                           });
+                       }
+                   },
+               });
+           },
+       });
+
        let efidisk_menuitem = Ext.create('Ext.menu.Item', {
            text: gettext('EFI Disk'),
            iconCls: 'fa fa-fw fa-hdd-o black',
@@ -611,6 +649,7 @@ Ext.define('PVE.qemu.HardwareView', {
                edit_btn.disable();
                diskaction_btn.disable();
                revert_btn.disable();
+               eject_btn.disable();
                return;
            }
            const { key, value } = rec.data;
@@ -622,6 +661,7 @@ Ext.define('PVE.qemu.HardwareView', {
 
            const isCloudInit = isCloudInitKey(value);
            const isCDRom = value && !!value.toString().match(/media=cdrom/);
+           const isEjectedCDRom = value && 
!!value.toString().match(/none,media=cdrom/);
 
            const isUnusedDisk = key.match(/^unused\d+/);
            const isUsedDisk = !isUnusedDisk && row.isOnStorageBus && !isCDRom;
@@ -651,6 +691,7 @@ Ext.define('PVE.qemu.HardwareView', {
            resize_menuitem.setDisabled(pending || !isUsedDisk);
 
            revert_btn.setDisabled(!pending);
+           eject_btn.setDisabled(!cdromCap || !isCDRom || isCloudInit || 
isEjectedCDRom);
        };
 
        let editorFactory = (classPath, extraOptions) => {
@@ -754,6 +795,7 @@ Ext.define('PVE.qemu.HardwareView', {
                remove_btn,
                edit_btn,
                diskaction_btn,
+               eject_btn,
                revert_btn,
            ],
            rows: rows,
-- 
2.39.5


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

Reply via email to