--- /dev/null
+Ext.define('PVE.pool.AddVM', {
+ extend: 'PVE.window.Edit',
+
+ initComponent : function() {
+ /*jslint confusion: true */
+ var me = this;
+
+ if (!me.pool) {
+ throw "no pool specified";
+ }
+
+ me.create = true;
+ me.isAdd = true;
+ me.url = "/pools/" + me.pool;
+ me.method = 'PUT';
+
+ Ext.apply(me, {
+ subject: gettext('Virtual Machine'),
+ width: 350,
+ items: [
+ {
+ xtype: 'pveVMIDSelector',
+ name: 'vms',
+ validateExists: true,
+ value: '',
+ fieldLabel: "VM ID"
+ }
+ ]
+ });
+
+ me.callParent();
+ }
+});
+
+Ext.define('PVE.pool.AddStorage', {
+ extend: 'PVE.window.Edit',
+
+ initComponent : function() {
+ /*jslint confusion: true */
+ var me = this;
+
+ if (!me.pool) {
+ throw "no pool specified";
+ }
+
+ me.create = true;
+ me.isAdd = true;
+ me.url = "/pools/" + me.pool;
+ me.method = 'PUT';
+
+ Ext.apply(me, {
+ subject: gettext('Storage'),
+ width: 350,
+ items: [
+ {
+ xtype: 'PVE.form.StorageSelector',
+ name: 'storage',
+ nodename: 'localhost',
+ autoSelect: false,
+ value: '',
+ fieldLabel: gettext("Storage")
+ }
+ ]
+ });
+
+ me.callParent();
+ }
+});
+
+Ext.define('PVE.grid.PoolMembers', {
+ extend: 'Ext.grid.GridPanel',
+ alias: ['widget.pvePoolMembers'],
+
+ // fixme: dynamic status update ?
+
+ initComponent : function() {
+ var me = this;
+
+ if (!me.pool) {
+ throw "no pool specified";
+ }
+
+ var store = Ext.create('Ext.data.Store', {
+ model: 'PVEResources',
+ sorters: [
+ {
+ property : 'type',
+ direction: 'ASC'
+ }
+ ],
+ proxy: {
+ type: 'pve',
+ root: 'data.members',
+ url: "/api2/json/pools/" + me.pool
+ }
+ });
+
+ var coldef = PVE.data.ResourceStore.defaultColums();
+
+ var reload = function() {
+ store.load();
+ };
+
+ var sm = Ext.create('Ext.selection.RowModel', {});
+
+ var remove_btn = new PVE.button.Button({
+ text: gettext('Remove'),
+ disabled: true,
+ selModel: sm,
+ confirmMsg: function (rec) {
+ return Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
+ "'" + rec.data.id + "'");
+ },
+ handler: function(btn, event, rec) {
+ var params = { 'delete': 1 };
+ if (rec.data.type === 'storage') {
+ params.storage = rec.data.storage;
+ } else if (rec.data.type === 'qemu' || rec.data.type === 'openvz') {
+ params.vms = rec.data.vmid;
+ } else {
+ throw "unknown resource type";
+ }
+
+ PVE.Utils.API2Request({
+ url: '/pools/' + me.pool,
+ method: 'PUT',
+ params: params,
+ waitMsgTarget: me,
+ callback: function() {
+ reload();
+ },
+ failure: function (response, opts) {
+ Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+ }
+ });
+ }
+ });
+
+ Ext.apply(me, {
+ store: store,
+ selModel: sm,
+ tbar: [
+ {
+ text: gettext('Add'),
+ menu: new Ext.menu.Menu({
+ items: [
+ {
+ text: gettext('Virtual Machine'),
+ iconCls: 'pve-itype-icon-qemu',
+ handler: function() {
+ var win = Ext.create('PVE.pool.AddVM', { pool: me.pool });
+ win.on('destroy', reload);
+ win.show();
+ }
+ },
+ {
+ text: gettext('Storage'),
+ iconCls: 'pve-itype-icon-storage',
+ handler: function() {
+ var win = Ext.create('PVE.pool.AddStorage', { pool: me.pool });
+ win.on('destroy', reload);
+ win.show();
+ }
+ }
+ ]
+ })
+ },
+ remove_btn
+ ],
+ viewConfig: {
+ stripeRows: true
+ },
+ columns: coldef,
+ listeners: {
+ show: reload
+ }
+ });
+
+ me.callParent();
+ }
+});
\ No newline at end of file