]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/grid/PoolMembers.js
ext6migrate: change VM selector in pool to grid
[pve-manager.git] / www / manager6 / grid / PoolMembers.js
1 Ext.define('PVE.pool.AddVM', {
2 extend: 'PVE.window.Edit',
3 width: 600,
4 height: 400,
5 isAdd: true,
6 create: true,
7 initComponent : function() {
8 /*jslint confusion: true */
9 var me = this;
10
11 if (!me.pool) {
12 throw "no pool specified";
13 }
14
15 me.url = "/pools/" + me.pool;
16 me.method = 'PUT';
17
18 var vmsField = Ext.create('Ext.form.field.Text', {
19 name: 'vms',
20 hidden: true,
21 allowBlank: false
22 });
23
24 var vmStore = Ext.create('Ext.data.Store', {
25 model: 'PVEResources',
26 sorters: {
27 property: 'vmid',
28 order: 'ASC'
29 },
30 filters: [
31 function(item) {
32 return ((item.data.type === 'lxc' || item.data.type === 'qemu') && item.data.pool === '');
33 }
34 ]
35 });
36
37 var vmGrid = Ext.create('widget.grid',{
38 store: vmStore,
39 border: true,
40 height: 300,
41 scrollable: true,
42 selModel: {
43 selType: 'checkboxmodel',
44 mode: 'SIMPLE',
45 listeners: {
46 selectionchange: function(model, selected, opts) {
47 var selectedVms = [];
48 selected.forEach(function(vm) {
49 selectedVms.push(vm.data.vmid);
50 });
51 vmsField.setValue(selectedVms);
52 }
53 },
54 },
55 columns: [
56 {
57 header: 'ID',
58 dataIndex: 'vmid',
59 width: 60
60 },
61 {
62 header: gettext('Node'),
63 dataIndex: 'node'
64 },
65 {
66 header: gettext('Status'),
67 dataIndex: 'uptime',
68 renderer: function(value) {
69 if (value) {
70 return PVE.Utils.runningText;
71 } else {
72 return PVE.Utils.stoppedText;
73 }
74 }
75 },
76 {
77 header: gettext('Name'),
78 dataIndex: 'name',
79 flex: 1
80 },
81 {
82 header: gettext('Type'),
83 dataIndex: 'type'
84 }
85 ],
86 });
87 Ext.apply(me, {
88 subject: gettext('Virtual Machine'),
89 items: [ vmsField, vmGrid ]
90 });
91
92 me.callParent();
93 vmStore.load();
94 }
95 });
96
97 Ext.define('PVE.pool.AddStorage', {
98 extend: 'PVE.window.Edit',
99
100 initComponent : function() {
101 /*jslint confusion: true */
102 var me = this;
103
104 if (!me.pool) {
105 throw "no pool specified";
106 }
107
108 me.create = true;
109 me.isAdd = true;
110 me.url = "/pools/" + me.pool;
111 me.method = 'PUT';
112
113 Ext.apply(me, {
114 subject: gettext('Storage'),
115 width: 350,
116 items: [
117 {
118 xtype: 'PVE.form.StorageSelector',
119 name: 'storage',
120 nodename: 'localhost',
121 autoSelect: false,
122 value: '',
123 fieldLabel: gettext("Storage")
124 }
125 ]
126 });
127
128 me.callParent();
129 }
130 });
131
132 Ext.define('PVE.grid.PoolMembers', {
133 extend: 'Ext.grid.GridPanel',
134 alias: ['widget.pvePoolMembers'],
135
136 // fixme: dynamic status update ?
137
138 initComponent : function() {
139 var me = this;
140
141 if (!me.pool) {
142 throw "no pool specified";
143 }
144
145 var store = Ext.create('Ext.data.Store', {
146 model: 'PVEResources',
147 sorters: [
148 {
149 property : 'type',
150 direction: 'ASC'
151 }
152 ],
153 proxy: {
154 type: 'pve',
155 root: 'data.members',
156 url: "/api2/json/pools/" + me.pool
157 }
158 });
159
160 var coldef = PVE.data.ResourceStore.defaultColums();
161
162 var reload = function() {
163 store.load();
164 };
165
166 var sm = Ext.create('Ext.selection.RowModel', {});
167
168 var remove_btn = new PVE.button.Button({
169 text: gettext('Remove'),
170 disabled: true,
171 selModel: sm,
172 confirmMsg: function (rec) {
173 return Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
174 "'" + rec.data.id + "'");
175 },
176 handler: function(btn, event, rec) {
177 var params = { 'delete': 1 };
178 if (rec.data.type === 'storage') {
179 params.storage = rec.data.storage;
180 } else if (rec.data.type === 'qemu' || rec.data.type === 'lxc' || rec.data.type === 'openvz') {
181 params.vms = rec.data.vmid;
182 } else {
183 throw "unknown resource type";
184 }
185
186 PVE.Utils.API2Request({
187 url: '/pools/' + me.pool,
188 method: 'PUT',
189 params: params,
190 waitMsgTarget: me,
191 callback: function() {
192 reload();
193 },
194 failure: function (response, opts) {
195 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
196 }
197 });
198 }
199 });
200
201 Ext.apply(me, {
202 store: store,
203 selModel: sm,
204 tbar: [
205 {
206 text: gettext('Add'),
207 menu: new Ext.menu.Menu({
208 items: [
209 {
210 text: gettext('Virtual Machine'),
211 iconCls: 'pve-itype-icon-qemu',
212 handler: function() {
213 var win = Ext.create('PVE.pool.AddVM', { pool: me.pool });
214 win.on('destroy', reload);
215 win.show();
216 }
217 },
218 {
219 text: gettext('Storage'),
220 iconCls: 'pve-itype-icon-storage',
221 handler: function() {
222 var win = Ext.create('PVE.pool.AddStorage', { pool: me.pool });
223 win.on('destroy', reload);
224 win.show();
225 }
226 }
227 ]
228 })
229 },
230 remove_btn
231 ],
232 viewConfig: {
233 stripeRows: true
234 },
235 columns: coldef,
236 listeners: {
237 activate: reload
238 }
239 });
240
241 me.callParent();
242 }
243 });