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