]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/node/LVMThin.js
1 Ext
.define('PVE.node.CreateLVMThin', {
2 extend
: 'Proxmox.window.Edit',
3 xtype
: 'pveCreateLVMThin',
5 onlineHelp
: 'chapter_lvm',
6 subject
: 'LVM Thinpool',
11 initComponent: function() {
15 throw "no node name specified";
19 url
: `/nodes/${me.nodename}/disks/lvmthin`,
23 xtype
: 'pmxDiskSelector',
25 nodename
: me
.nodename
,
27 includePartitions
: true,
28 fieldLabel
: gettext('Disk'),
32 xtype
: 'proxmoxtextfield',
34 fieldLabel
: gettext('Name'),
38 xtype
: 'proxmoxcheckbox',
40 fieldLabel
: gettext('Add Storage'),
50 Ext
.define('PVE.node.LVMThinList', {
51 extend
: 'Ext.grid.Panel',
52 xtype
: 'pveLVMThinList',
62 xclass
: 'Ext.app.ViewController',
64 destroyThinPool: function() {
66 let vm
= me
.getViewModel();
67 let view
= me
.getView();
69 const thinPool
= vm
.get('thinPool');
70 const volumeGroup
= vm
.get('volumeGroup');
73 throw "no node name specified";
77 throw "no thin pool specified";
81 throw "no volume group specified";
84 Ext
.create('PVE.window.SafeDestroyStorage', {
85 url
: `/nodes/${view.nodename}/disks/lvmthin/${thinPool}`,
86 params
: { 'volume-group': volumeGroup
},
87 item
: { id
: `${volumeGroup}/${thinPool}` },
88 taskName
: 'lvmthinremove',
89 taskDone
: () => { view
.reload(); },
94 emptyText
: gettext('No thinpools found'),
97 stateId
: 'grid-node-lvmthin',
104 text
: gettext('Name'),
109 header
: 'Volume Group',
114 header
: gettext('Usage'),
117 tdCls
: 'x-progressbar-default-cell',
118 xtype
: 'widgetcolumn',
120 xtype
: 'pveProgressBar',
124 header
: gettext('Size'),
128 renderer
: Proxmox
.Utils
.format_size
,
129 dataIndex
: 'lv_size',
132 header
: gettext('Used'),
136 renderer
: Proxmox
.Utils
.format_size
,
140 header
: gettext('Metadata Usage'),
142 dataIndex
: 'metadata_usage',
143 tdCls
: 'x-progressbar-default-cell',
144 xtype
: 'widgetcolumn',
146 xtype
: 'pveProgressBar',
150 header
: gettext('Metadata Size'),
154 renderer
: Proxmox
.Utils
.format_size
,
155 dataIndex
: 'metadata_size',
158 header
: gettext('Metadata Used'),
162 renderer
: Proxmox
.Utils
.format_size
,
163 dataIndex
: 'metadata_used',
169 text
: gettext('Reload'),
170 iconCls
: 'fa fa-refresh',
171 handler: function() {
172 this.up('panel').reload();
176 text
: gettext('Create') + ': Thinpool',
177 handler: function() {
178 var view
= this.up('panel');
179 Ext
.create('PVE.node.CreateLVMThin', {
180 nodename
: view
.nodename
,
181 taskDone
: () => view
.reload(),
191 volumeGroup
: undefined,
195 thinPool
: "{thinPool}",
196 volumeGroup
: "{volumeGroup}",
200 '<tpl if="thinPool">',
201 '<tpl if="volumeGroup">',
202 'Thinpool {volumeGroup}/{thinPool}:',
203 '<tpl else>', // volumeGroup
204 'Missing volume group (node running old version?)',
206 '<tpl else>', // thinPool
207 Ext
.String
.format(gettext('No {0} selected'), 'thinpool'),
212 text
: gettext('More'),
213 iconCls
: 'fa fa-bars',
216 disabled
: '{!volumeGroup || !thinPool}',
220 text
: gettext('Destroy'),
222 iconCls
: 'fa fa-fw fa-trash-o',
223 handler
: 'destroyThinPool',
226 disabled
: '{!volumeGroup || !thinPool}',
240 activate: function() {
243 selectionchange: function(model
, selected
) {
245 let vm
= me
.getViewModel();
247 vm
.set('volumeGroup', selected
[0]?.data
.vg
|| '');
248 vm
.set('thinPool', selected
[0]?.data
.lv
|| '');
252 initComponent: function() {
255 me
.nodename
= me
.pveSelNode
.data
.node
;
257 throw "no node name specified";
271 calculate
: data
=> data
.used
/ data
.lv_size
,
275 name
: 'metadata_usage',
276 calculate
: data
=> data
.metadata_used
/ data
.metadata_size
,
281 url
: `/api2/json/nodes/${me.nodename}/disks/lvmthin`,
289 Proxmox
.Utils
.monStoreErrors(me
, me
.getStore(), true);