]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/lxc/Resources.js
1 /*jslint confusion: true */
2 Ext
.define('PVE.lxc.RessourceView', {
3 extend
: 'PVE.grid.ObjectGrid',
4 alias
: ['widget.pveLxcRessourceView'],
6 onlineHelp
: 'pct_configuration',
8 renderKey: function(key
, metaData
, rec
, rowIndex
, colIndex
, store
) {
11 var rowdef
= rows
[key
] || {};
13 metaData
.tdAttr
= "valign=middle";
16 metaData
.tdCls
= rowdef
.tdCls
;
17 if (rowdef
.tdCls
== 'pve-itype-icon-storage') {
18 var value
= me
.getObjectValue(key
, '', true);
21 return rowdef
.header
|| key
;
24 initComponent : function() {
28 var nodename
= me
.pveSelNode
.data
.node
;
30 throw "no node name specified";
33 var vmid
= me
.pveSelNode
.data
.vmid
;
35 throw "no VM ID specified";
38 var caps
= Ext
.state
.Manager
.get('GuiCap');
40 var mpeditor
= caps
.vms
['VM.Config.Disk'] ? 'PVE.lxc.MountPointEdit' : undefined;
44 header
: gettext('Memory'),
45 editor
: caps
.vms
['VM.Config.Memory'] ? 'PVE.lxc.MemoryEdit' : undefined,
48 tdCls
: 'pve-itype-icon-memory',
49 renderer: function(value
) {
50 return PVE
.Utils
.format_size(value
*1024*1024);
54 header
: gettext('Swap'),
55 editor
: caps
.vms
['VM.Config.Memory'] ? 'PVE.lxc.MemoryEdit' : undefined,
58 tdCls
: 'pve-itype-icon-swap',
59 renderer: function(value
) {
60 return PVE
.Utils
.format_size(value
*1024*1024);
64 header
: gettext('Cores'),
66 editor
: caps
.vms
['VM.Config.CPU'] ? 'PVE.lxc.CPUEdit' : undefined,
68 tdCls
: 'pve-itype-icon-processor',
69 renderer: function(value
) {
70 if (value
) { return value
; }
71 return gettext('unlimited');
75 header
: gettext('CPU limit'),
77 editor
: caps
.vms
['VM.Config.CPU'] ? 'PVE.lxc.CPUEdit' : undefined,
79 tdCls
: 'pve-itype-icon-processor',
80 renderer: function(value
) {
81 if (value
> 0) { return value
; }
82 return gettext('unlimited');
86 header
: gettext('CPU units'),
88 editor
: caps
.vms
['VM.Config.CPU'] ? 'PVE.lxc.CPUEdit' : undefined,
90 tdCls
: 'pve-itype-icon-processor'
93 header
: gettext('Root Disk'),
94 defaultValue
: PVE
.Utils
.noneText
,
96 tdCls
: 'pve-itype-icon-storage'
103 for (i
= 0; i
< 10; i
++) {
107 tdCls
: 'pve-itype-icon-storage',
109 header
: gettext('Mount Point') + ' (' + confid
+ ')'
113 for (i
= 0; i
< 8; i
++) {
114 confid
= "unused" + i
;
117 tdCls
: 'pve-itype-icon-storage',
119 header
: gettext('Unused Disk') + ' ' + i
123 var reload = function() {
127 var baseurl
= 'nodes/' + nodename
+ '/lxc/' + vmid
+ '/config';
129 var sm
= Ext
.create('Ext.selection.RowModel', {});
131 var run_editor = function() {
132 var rec
= sm
.getSelection()[0];
137 var rowdef
= rows
[rec
.data
.key
];
138 if (!rowdef
.editor
) {
142 var editor
= rowdef
.editor
;
144 var win
= Ext
.create(editor
, {
145 pveSelNode
: me
.pveSelNode
,
146 confid
: rec
.data
.key
,
147 unprivileged
: me
.getObjectValue('unprivileged'),
148 url
: '/api2/extjs/' + baseurl
152 win
.on('destroy', reload
);
155 var run_resize = function() {
156 var rec
= sm
.getSelection()[0];
161 var win
= Ext
.create('PVE.window.MPResize', {
169 win
.on('destroy', reload
);
172 var run_remove = function(b
, e
, rec
) {
173 PVE
.Utils
.API2Request({
174 url
: '/api2/extjs/' + baseurl
,
178 'delete': rec
.data
.key
180 callback: function() {
183 failure: function (response
, opts
) {
184 Ext
.Msg
.alert('Error', response
.htmlStatus
);
189 var edit_btn
= new PVE
.button
.Button({
190 text
: gettext('Edit'),
193 enableFn: function(rec
) {
197 var rowdef
= rows
[rec
.data
.key
];
198 return !!rowdef
.editor
;
203 var resize_btn
= new PVE
.button
.Button({
204 text
: gettext('Resize disk'),
210 var remove_btn
= new PVE
.button
.Button({
211 text
: gettext('Remove'),
215 confirmMsg: function(rec
) {
216 var msg
= Ext
.String
.format(gettext('Are you sure you want to remove entry {0}'),
217 "'" + me
.renderKey(rec
.data
.key
, {}, rec
) + "'");
218 if (rec
.data
.key
.match(/^unused\d+$/)) {
219 msg
+= " " + gettext('This will permanently erase all data.');
227 var set_button_status = function() {
228 var sm
= me
.getSelectionModel();
229 var rec
= sm
.getSelection()[0];
233 remove_btn
.disable();
234 resize_btn
.disable();
237 var key
= rec
.data
.key
;
238 var value
= rec
.data
.value
;
239 var rowdef
= rows
[key
];
241 var isDisk
= (rowdef
.tdCls
== 'pve-itype-icon-storage');
243 var noedit
= rec
.data
['delete'] || !rowdef
.editor
;
244 if (!noedit
&& PVE
.UserName
!== 'root@pam' && key
.match(/^mp\d+$/)) {
245 var mp
= PVE
.Parser
.parseLxcMountPoint(value
);
246 if (mp
.type
!== 'volume') {
250 edit_btn
.setDisabled(noedit
);
252 remove_btn
.setDisabled(!isDisk
|| rec
.data
.key
=== 'rootfs');
253 resize_btn
.setDisabled(!isDisk
);
258 url
: '/api2/json/' + baseurl
,
263 text
: gettext('Add'),
264 menu
: new Ext
.menu
.Menu({
267 text
: gettext('Mount Point'),
268 iconCls
: 'pve-itype-icon-storage',
269 disabled
: !caps
.vms
['VM.Config.Disk'],
270 handler: function() {
271 var win
= Ext
.create('PVE.lxc.MountPointEdit', {
272 url
: '/api2/extjs/' + baseurl
,
273 unprivileged
: me
.getObjectValue('unprivileged'),
274 pveSelNode
: me
.pveSelNode
276 win
.on('destroy', reload
);
291 itemdblclick
: run_editor
,
292 selectionchange
: set_button_status