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