]>
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',
12 initComponent: function() {
16 throw "no node name specified";
20 url
: `/nodes/${me.nodename}/disks/zfs`,
27 xtype
: 'proxmoxtextfield',
29 fieldLabel
: gettext('Name'),
33 xtype
: 'proxmoxcheckbox',
35 fieldLabel
: gettext('Add Storage'),
41 xtype
: 'proxmoxKVComboBox',
42 fieldLabel
: gettext('RAID Level'),
46 ['single', gettext('Single Disk')],
55 xtype
: 'proxmoxKVComboBox',
56 fieldLabel
: gettext('Compression'),
70 xtype
: 'proxmoxintegerfield',
71 fieldLabel
: gettext('ashift'),
80 xtype
: 'pmxMultiDiskSelector',
82 nodename
: me
.nodename
,
84 includePartitions
: true,
86 emptyText
: gettext('No Disks unused'),
92 xtype
: 'displayfield',
95 value
: 'Note: ZFS is not compatible with disks backed by a hardware ' +
96 'RAID controller. For details see <a target="_blank" href="' +
97 Proxmox
.Utils
.get_help_link('chapter_zfs') + '">the reference documentation</a>.',
106 Ext
.define('PVE.node.ZFSList', {
107 extend
: 'Ext.grid.Panel',
117 xclass
: 'Ext.app.ViewController',
119 destroyPool: function() {
121 let vm
= me
.getViewModel();
122 let view
= me
.getView();
124 const pool
= vm
.get('pool');
126 if (!view
.nodename
) {
127 throw "no node name specified";
131 throw "no pool specified";
134 Ext
.create('PVE.window.SafeDestroyStorage', {
135 url
: `/nodes/${view.nodename}/disks/zfs/${pool}`,
137 taskName
: 'zfsremove',
138 taskDone
: () => { view
.reload(); },
144 stateId
: 'grid-node-zfs',
147 text
: gettext('Name'),
152 header
: gettext('Size'),
153 renderer
: Proxmox
.Utils
.format_size
,
157 header
: gettext('Free'),
158 renderer
: Proxmox
.Utils
.format_size
,
162 header
: gettext('Allocated'),
163 renderer
: Proxmox
.Utils
.format_size
,
167 header
: gettext('Fragmentation'),
168 renderer: function(value
) {
169 return value
.toString() + '%';
174 header
: gettext('Health'),
175 renderer
: PVE
.Utils
.render_zfs_health
,
179 header
: gettext('Deduplication'),
181 renderer: function(value
) {
182 return value
.toFixed(2).toString() + 'x';
193 text
: gettext('Reload'),
194 iconCls
: 'fa fa-refresh',
195 handler: function() {
196 this.up('panel').reload();
200 text
: gettext('Create') + ': ZFS',
201 handler: function() {
202 let view
= this.up('panel');
203 Ext
.create('PVE.node.CreateZFS', {
204 nodename
: view
.nodename
,
206 destroy
: () => view
.reload(),
213 text
: gettext('Detail'),
216 handler: function() {
217 let view
= this.up('panel');
218 let selection
= view
.getSelection();
219 if (selection
.length
) {
220 view
.show_detail(selection
[0].get('name'));
239 Ext
.String
.format(gettext('No {0} selected'), 'pool'),
244 text
: gettext('More'),
245 iconCls
: 'fa fa-bars',
252 text
: gettext('Destroy'),
254 iconCls
: 'fa fa-fw fa-trash-o',
255 handler
: 'destroyPool',
265 show_detail: function(zpool
) {
268 Ext
.create('Proxmox.window.ZFSDetail', {
270 nodename
: me
.nodename
,
274 set_button_status: function() {
285 activate: function() {
288 selectionchange: function(model
, selected
) {
290 let vm
= me
.getViewModel();
292 me
.down('#detailbtn').setDisabled(selected
.length
=== 0);
293 vm
.set('pool', selected
[0]?.data
.name
|| '');
295 itemdblclick: function(grid
, record
) {
296 this.show_detail(record
.get('name'));
300 initComponent: function() {
303 me
.nodename
= me
.pveSelNode
.data
.node
;
305 throw "no node name specified";
310 fields
: ['name', 'size', 'free', 'alloc', 'dedup', 'frag', 'health'],
313 url
: `/api2/json/nodes/${me.nodename}/disks/zfs`,
321 Proxmox
.Utils
.monStoreErrors(me
, me
.getStore(), true);