[pve-devel] [PATCH manager 2/4] add BulkAction window class

Dominik Csapak d.csapak at proxmox.com
Thu Jan 5 12:25:01 CET 2017


this is mostly copied from MigrateAll.js, but a more generic way,
to allow startall and stopall to also use it

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 www/manager6/window/BulkAction.js | 141 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 141 insertions(+)
 create mode 100644 www/manager6/window/BulkAction.js

diff --git a/www/manager6/window/BulkAction.js b/www/manager6/window/BulkAction.js
new file mode 100644
index 0000000..bd65f5c
--- /dev/null
+++ b/www/manager6/window/BulkAction.js
@@ -0,0 +1,141 @@
+Ext.define('PVE.window.BulkAction', {
+    extend: 'Ext.window.Window',
+
+    resizable: true,
+    width: 800,
+    modal: true,
+    layout: {
+	type: 'fit'
+    },
+    border: false,
+
+    // the action to be set
+    // currently there are
+    // startall
+    // migrateall
+    // stopall
+    action: undefined,
+
+    submit: function(params) {
+	var me = this;
+	PVE.Utils.API2Request({
+	    params: params,
+	    url: '/nodes/' + me.nodename + '/' + "/" + me.action,
+	    waitMsgTarget: me,
+	    method: 'POST',
+	    failure: function(response, opts) {
+		Ext.Msg.alert('Error', response.htmlStatus);
+	    },
+	    success: function(response, options) {
+		var upid = response.result.data;
+
+		var win = Ext.create('PVE.window.TaskViewer', {
+		    upid: upid
+		});
+		win.show();
+		me.hide();
+		win.on('destroy', function() {
+		    me.close();
+		});
+	    }
+	});
+    },
+
+    initComponent : function() {
+	var me = this;
+
+	if (!me.nodename) {
+	    throw "no node name specified";
+	}
+
+	if (!me.action) {
+	    throw "no action specified";
+	}
+
+	if (!me.btnText) {
+	    throw "no button text specified";
+	}
+
+	if (!me.title) {
+	    throw "no title specified";
+	}
+
+	var items = [];
+
+	if (me.action === 'migrateall') {
+	    items.push(
+		{
+		    xtype: 'pveNodeSelector',
+		    name: 'target',
+		    disallowedNodes: [me.nodename],
+		    fieldLabel: 'Target node',
+		    allowBlank: false,
+		    onlineValidator: true
+		},
+		{
+		    xtype: 'pveIntegerField',
+		    name: 'maxworkers',
+		    minValue: 1,
+		    maxValue: 100,
+		    value: 1,
+		    fieldLabel: 'Parallel jobs',
+		    allowBlank: false
+		}
+	    );
+	} else if (me.action === 'startall') {
+	    items.push({
+		xtype: 'hiddenfield',
+		name: 'force',
+		value: 1
+	    });
+	}
+
+	items.push({
+	    xtype: 'vmselector',
+	    itemId: 'vms',
+	    name: 'vms',
+	    flex: 1,
+	    height: 300,
+	    selectAll: true,
+	    allowBlank: false,
+	    nodename: me.nodename
+	});
+
+	me.formPanel = Ext.create('Ext.form.Panel', {
+	    bodyPadding: 10,
+	    border: false,
+	    layout: {
+		type: 'vbox',
+		align: 'stretch'
+	    },
+	    fieldDefaults: {
+		labelWidth: 300,
+		anchor: '100%'
+	    },
+	    items: items
+	});
+
+	var form = me.formPanel.getForm();
+
+	var submitBtn = Ext.create('Ext.Button', {
+	    text: me.btnText,
+	    handler: function() {
+		form.isValid();
+		me.submit(form.getValues());
+	    }
+	});
+
+	Ext.apply(me, {
+	    items: [ me.formPanel ],
+	    buttons: [ submitBtn ]
+	});
+
+	me.callParent();
+
+	form.on('validitychange', function() {
+	    var valid = form.isValid();
+	    submitBtn.setDisabled(!valid);
+	});
+	form.isValid();
+    }
+});
-- 
2.1.4





More information about the pve-devel mailing list