[pve-devel] applied: [manager V2] Add imageRemoveButton

Thomas Lamprecht t.lamprecht at proxmox.com
Thu Nov 22 13:28:41 CET 2018


On 11/22/18 11:49 AM, Wolfgang Link wrote:
> If an image has a <vmid>  encoded in the image name
> and the guest does not exist in the cluster
> we can delete it on the GUI.
> 
> Also, if a config exists on another node and the storage is local
> we can delete.
> 
> In all other cases, it is not allowed to delete it.
> 
> For safety reason the safe remove windows are used.

applied, fixing jslint errors as followup and referencing the volid in the
confirm window title. thanks!

> ---
>  www/manager6/storage/ContentView.js | 57 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 57 insertions(+)
> 
> Change the message output as t.lamprecht suggest.
> 
> diff --git a/www/manager6/storage/ContentView.js b/www/manager6/storage/ContentView.js
> index 8716fba3..6e3e9fdb 100644
> --- a/www/manager6/storage/ContentView.js
> +++ b/www/manager6/storage/ContentView.js
> @@ -405,6 +405,8 @@ Ext.define('PVE.storage.ContentView', {
>  	    selModel: sm,
>  	    enableFn: function(rec) {
>  		if (rec && rec.data.content !== 'images') {
> +		    imageRemoveButton.setVisible(false);
> +		    removeButton.setVisible(true);
>  		    return true;
>  		}
>  		return false;
> @@ -415,6 +417,60 @@ Ext.define('PVE.storage.ContentView', {
>  	    baseurl: baseurl + '/'
>  	});
>  
> +	var imageRemoveButton = Ext.create('Proxmox.button.Button',{
> +	    selModel: sm,
> +	    hidden: true,
> +	    text: gettext('Remove'),
> +	    enableFn: function(rec) {
> +		if (rec && rec.data.content === 'images') {
> +		    removeButton.setVisible(false);
> +		    imageRemoveButton.setVisible(true);
> +		    return true;
> +		}
> +		return false;
> +	    },
> +	    handler: function(btn, event, rec) {
> +		me = this;
> +
> +		var url = baseurl + '/' + rec.data.volid;
> +		var vmid = rec.data.vmid;
> +		var storage_path = 'storage/' + nodename + '/' + storage;
> +
> +		var store = PVE.data.ResourceStore;
> +		var vmid_exists = vmid && store.findVMID(vmid);
> +		if (vmid_exists) {
> +		    var guest_node = store.guestNode(vmid);
> +		    var storage_is_shared = store.storageIsShared(storage_path);
> +
> +		    // allow to delete local backed images if a VMID exists on another node.
> +		    if (storage_is_shared || guest_node == nodename) {
> +			var msg = Ext.String.format(
> +			    gettext("Cannot remove image, a guest with VMID: '{0}' exists!"),
> +			    vmid) + '</br>' +
> +			    gettext("You can delete the image from the guest's hardware pane");
> +			Ext.Msg.show({
> +			    title: gettext('Cannot remove disk image.'),
> +			    icon: Ext.Msg.ERROR,
> +			    msg: msg,
> +			});
> +			return;
> +		    }
> +		}
> +		var win = Ext.create('PVE.window.SafeDestroy', {
> +		    showProgress: true,
> +		    url: url,
> +		    item: { type: 'Image', id: vmid },
> +		}).show();
> +		win.on('destroy', function() {
> +		    me.statusStore = Ext.create('Proxmox.data.ObjectStore', {
> +			url: '/api2/json/nodes/' + nodename + '/storage/' + storage + '/status'
> +		    });
> +		    reload();
> +
> +		});
> +	    },
> +	});
> +
>  	me.statusStore = Ext.create('Proxmox.data.ObjectStore', {
>  	    url: '/api2/json/nodes/' + nodename + '/storage/' + storage + '/status'
>  	});
> @@ -452,6 +508,7 @@ Ext.define('PVE.storage.ContentView', {
>  		    }
>  		},
>  		removeButton,
> +		imageRemoveButton,
>  		templateButton,
>  		uploadButton,
>  		{
> 





More information about the pve-devel mailing list