]>
Commit | Line | Data |
---|---|---|
d660ba8a DC |
1 | Ext.define('PVE.node.CreateLVM', { |
2 | extend: 'Proxmox.window.Edit', | |
3 | xtype: 'pveCreateLVM', | |
4 | ||
57c29e0b | 5 | onlineHelp: 'chapter_lvm', |
d660ba8a DC |
6 | subject: 'LVM Volume Group', |
7 | ||
8 | showProgress: true, | |
57c29e0b | 9 | isCreate: true, |
d660ba8a | 10 | |
8058410f | 11 | initComponent: function() { |
57c29e0b | 12 | let me = this; |
d660ba8a DC |
13 | |
14 | if (!me.nodename) { | |
15 | throw "no node name specified"; | |
16 | } | |
17 | ||
18 | me.isCreate = true; | |
19 | ||
20 | Ext.applyIf(me, { | |
57c29e0b | 21 | url: `/nodes/${me.nodename}/disks/lvm`, |
d660ba8a DC |
22 | method: 'POST', |
23 | items: [ | |
24 | { | |
d0cfe2ea | 25 | xtype: 'pmxDiskSelector', |
d660ba8a DC |
26 | name: 'device', |
27 | nodename: me.nodename, | |
28 | diskType: 'unused', | |
29 | fieldLabel: gettext('Disk'), | |
f6710aac | 30 | allowBlank: false, |
d660ba8a DC |
31 | }, |
32 | { | |
33 | xtype: 'proxmoxtextfield', | |
34 | name: 'name', | |
35 | fieldLabel: gettext('Name'), | |
f6710aac | 36 | allowBlank: false, |
d660ba8a DC |
37 | }, |
38 | { | |
39 | xtype: 'proxmoxcheckbox', | |
40 | name: 'add_storage', | |
41 | fieldLabel: gettext('Add Storage'), | |
f6710aac TL |
42 | value: '1', |
43 | }, | |
57c29e0b TL |
44 | ], |
45 | }); | |
d660ba8a | 46 | |
57c29e0b | 47 | me.callParent(); |
f6710aac | 48 | }, |
d660ba8a DC |
49 | }); |
50 | ||
51 | Ext.define('PVE.node.LVMList', { | |
52 | extend: 'Ext.tree.Panel', | |
53 | xtype: 'pveLVMList', | |
57c29e0b | 54 | |
d660ba8a | 55 | emptyText: gettext('No Volume Groups found'), |
57c29e0b | 56 | |
d660ba8a DC |
57 | stateful: true, |
58 | stateId: 'grid-node-lvm', | |
57c29e0b TL |
59 | |
60 | rootVisible: false, | |
61 | useArrows: true, | |
62 | ||
d660ba8a DC |
63 | columns: [ |
64 | { | |
65 | xtype: 'treecolumn', | |
66 | text: gettext('Name'), | |
67 | dataIndex: 'name', | |
f6710aac | 68 | flex: 1, |
d660ba8a DC |
69 | }, |
70 | { | |
71 | text: gettext('Number of LVs'), | |
72 | dataIndex: 'lvcount', | |
73 | width: 150, | |
f6710aac | 74 | align: 'right', |
d660ba8a DC |
75 | }, |
76 | { | |
77 | header: gettext('Usage'), | |
78 | width: 110, | |
79 | dataIndex: 'usage', | |
80 | tdCls: 'x-progressbar-default-cell', | |
81 | xtype: 'widgetcolumn', | |
82 | widget: { | |
f6710aac TL |
83 | xtype: 'pveProgressBar', |
84 | }, | |
d660ba8a DC |
85 | }, |
86 | { | |
87 | header: gettext('Size'), | |
88 | width: 100, | |
89 | align: 'right', | |
90 | sortable: true, | |
91 | renderer: Proxmox.Utils.format_size, | |
f6710aac | 92 | dataIndex: 'size', |
d660ba8a DC |
93 | }, |
94 | { | |
95 | header: gettext('Free'), | |
96 | width: 100, | |
97 | align: 'right', | |
98 | sortable: true, | |
99 | renderer: Proxmox.Utils.format_size, | |
f6710aac TL |
100 | dataIndex: 'free', |
101 | }, | |
d660ba8a DC |
102 | ], |
103 | ||
d660ba8a DC |
104 | tbar: [ |
105 | { | |
106 | text: gettext('Reload'), | |
107 | iconCls: 'fa fa-refresh', | |
108 | handler: function() { | |
57c29e0b | 109 | this.up('panel').reload(); |
f6710aac | 110 | }, |
d660ba8a DC |
111 | }, |
112 | { | |
113 | text: gettext('Create') + ': Volume Group', | |
114 | handler: function() { | |
57c29e0b TL |
115 | let view = this.up('panel'); |
116 | Ext.create('PVE.node.CreateLVM', { | |
117 | nodename: view.nodename, | |
118 | taskDone: () => view.reload(), | |
119 | autoShow: true, | |
120 | }); | |
f6710aac TL |
121 | }, |
122 | }, | |
d660ba8a DC |
123 | ], |
124 | ||
125 | reload: function() { | |
57c29e0b TL |
126 | let me = this; |
127 | let sm = me.getSelectionModel(); | |
d660ba8a | 128 | Proxmox.Utils.API2Request({ |
57c29e0b | 129 | url: `/nodes/${me.nodename}/disks/lvm`, |
d660ba8a DC |
130 | waitMsgTarget: me, |
131 | method: 'GET', | |
57c29e0b | 132 | failure: (response, opts) => Proxmox.Utils.setErrorMask(me, response.htmlStatus), |
d660ba8a DC |
133 | success: function(response, opts) { |
134 | sm.deselectAll(); | |
135 | me.setRootNode(response.result.data); | |
136 | me.expandAll(); | |
f6710aac | 137 | }, |
d660ba8a DC |
138 | }); |
139 | }, | |
140 | ||
141 | listeners: { | |
142 | activate: function() { | |
57c29e0b | 143 | this.reload(); |
f6710aac | 144 | }, |
d660ba8a DC |
145 | }, |
146 | ||
57c29e0b TL |
147 | selModel: 'treemodel', |
148 | fields: [ | |
149 | 'name', | |
150 | 'size', | |
151 | 'free', | |
152 | { | |
153 | type: 'string', | |
154 | name: 'iconCls', | |
155 | calculate: data => `fa x-fa-tree fa-${data.leaf ? 'hdd-o' : 'object-group'}`, | |
156 | }, | |
157 | { | |
158 | type: 'number', | |
159 | name: 'usage', | |
160 | calculate: data => (data.size - data.free) / data.size, | |
161 | }, | |
162 | ], | |
163 | sorters: 'name', | |
164 | ||
d660ba8a | 165 | initComponent: function() { |
57c29e0b | 166 | let me = this; |
d660ba8a DC |
167 | |
168 | me.nodename = me.pveSelNode.data.node; | |
169 | if (!me.nodename) { | |
170 | throw "no node name specified"; | |
171 | } | |
d660ba8a DC |
172 | me.callParent(); |
173 | ||
174 | me.reload(); | |
f6710aac | 175 | }, |
d660ba8a DC |
176 | }); |
177 |