]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/node/ZFS.js
1 Ext
.define('PVE.node.CreateZFS', {
2 extend
: 'Proxmox.window.Edit',
5 onlineHelp
: 'chapter_zfs',
17 isdraid: function(get) {
18 return get('raidLevel').startsWith("draid");
20 draidconfig: function(get) {
23 config
.data
= get('draiddata');
24 config
.spares
= get('draidspares');
25 return PVE
.Parser
.printPropertyString(config
);
33 initComponent: function() {
37 throw "no node name specified";
41 url
: `/nodes/${me.nodename}/disks/zfs`,
48 xtype
: 'proxmoxtextfield',
50 fieldLabel
: gettext('Name'),
54 xtype
: 'proxmoxcheckbox',
56 fieldLabel
: gettext('Add Storage'),
62 xtype
: 'proxmoxKVComboBox',
63 fieldLabel
: gettext('RAID Level'),
67 ['single', gettext('Single Disk')],
82 xtype
: 'proxmoxtextfield',
87 value
: '{draidconfig}',
91 xtype
: 'proxmoxintegerfield',
92 fieldLabel
: gettext('DRAID data devices'),
99 disabled
: '{!isdraid}',
100 hidden
: '{!isdraid}',
101 value
: '{draiddata}',
103 reference
: 'draiddata',
107 xtype
: 'proxmoxintegerfield',
108 fieldLabel
: gettext('DRAID spares'),
115 disabled
: '{!isdraid}',
116 hidden
: '{!isdraid}',
117 value
: '{draidspares}',
119 reference
: 'draidspares',
123 xtype
: 'proxmoxKVComboBox',
124 fieldLabel
: gettext('Compression'),
138 xtype
: 'proxmoxintegerfield',
139 fieldLabel
: gettext('ashift'),
148 xtype
: 'pmxMultiDiskSelector',
150 nodename
: me
.nodename
,
152 includePartitions
: true,
154 emptyText
: gettext('No Disks unused'),
160 xtype
: 'displayfield',
163 value
: 'Note: ZFS is not compatible with disks backed by a hardware ' +
164 'RAID controller. For details see <a target="_blank" href="' +
165 Proxmox
.Utils
.get_help_link('chapter_zfs') + '">the reference documentation</a>.',
175 Ext
.define('PVE.node.ZFSList', {
176 extend
: 'Ext.grid.Panel',
186 xclass
: 'Ext.app.ViewController',
188 destroyPool: function() {
190 let vm
= me
.getViewModel();
191 let view
= me
.getView();
193 const pool
= vm
.get('pool');
195 if (!view
.nodename
) {
196 throw "no node name specified";
200 throw "no pool specified";
203 Ext
.create('PVE.window.SafeDestroyStorage', {
204 url
: `/nodes/${view.nodename}/disks/zfs/${pool}`,
206 taskName
: 'zfsremove',
207 taskDone
: () => { view
.reload(); },
213 stateId
: 'grid-node-zfs',
216 text
: gettext('Name'),
221 header
: gettext('Size'),
222 renderer
: Proxmox
.Utils
.format_size
,
226 header
: gettext('Free'),
227 renderer
: Proxmox
.Utils
.format_size
,
231 header
: gettext('Allocated'),
232 renderer
: Proxmox
.Utils
.format_size
,
236 header
: gettext('Fragmentation'),
237 renderer: function(value
) {
238 return value
.toString() + '%';
243 header
: gettext('Health'),
244 renderer
: PVE
.Utils
.render_zfs_health
,
248 header
: gettext('Deduplication'),
250 renderer: function(value
) {
251 return value
.toFixed(2).toString() + 'x';
262 text
: gettext('Reload'),
263 iconCls
: 'fa fa-refresh',
264 handler: function() {
265 this.up('panel').reload();
269 text
: gettext('Create') + ': ZFS',
270 handler: function() {
271 let view
= this.up('panel');
272 Ext
.create('PVE.node.CreateZFS', {
273 nodename
: view
.nodename
,
275 destroy
: () => view
.reload(),
282 text
: gettext('Detail'),
285 handler: function() {
286 let view
= this.up('panel');
287 let selection
= view
.getSelection();
288 if (selection
.length
) {
289 view
.show_detail(selection
[0].get('name'));
308 Ext
.String
.format(gettext('No {0} selected'), 'pool'),
313 text
: gettext('More'),
314 iconCls
: 'fa fa-bars',
321 text
: gettext('Destroy'),
323 iconCls
: 'fa fa-fw fa-trash-o',
324 handler
: 'destroyPool',
334 show_detail: function(zpool
) {
337 Ext
.create('Proxmox.window.ZFSDetail', {
339 nodename
: me
.nodename
,
343 set_button_status: function() {
354 activate: function() {
357 selectionchange: function(model
, selected
) {
359 let vm
= me
.getViewModel();
361 me
.down('#detailbtn').setDisabled(selected
.length
=== 0);
362 vm
.set('pool', selected
[0]?.data
.name
|| '');
364 itemdblclick: function(grid
, record
) {
365 this.show_detail(record
.get('name'));
369 initComponent: function() {
372 me
.nodename
= me
.pveSelNode
.data
.node
;
374 throw "no node name specified";
379 fields
: ['name', 'size', 'free', 'alloc', 'dedup', 'frag', 'health'],
382 url
: `/api2/json/nodes/${me.nodename}/disks/zfs`,
390 Proxmox
.Utils
.monStoreErrors(me
, me
.getStore(), true);