]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/ceph/Pool.js
1 Ext
.define('PVE.CephCreatePool', {
2 extend
: 'Proxmox.window.Edit',
3 alias
: 'widget.pveCephCreatePool',
6 onlineHelp
: 'pve_ceph_pools',
14 fieldLabel
: gettext('Name'),
19 xtype
: 'proxmoxintegerfield',
20 fieldLabel
: gettext('Size'),
28 xtype
: 'proxmoxintegerfield',
29 fieldLabel
: gettext('Min. Size'),
37 xtype
: 'pveCephRuleSelector',
38 fieldLabel
: 'Crush Rule', // do not localize
43 xtype
: 'proxmoxintegerfield',
50 emptyText
: gettext('Autoscale'),
53 xtype
: 'proxmoxcheckbox',
54 fieldLabel
: gettext('Add as Storage'),
59 'data-qtip': gettext('Add the new pool to the cluster storage configuration.'),
63 initComponent : function() {
64 /*jslint confusion: true */
68 throw "no node name specified";
72 url
: "/nodes/" + me
.nodename
+ "/ceph/pools",
82 Ext
.define('PVE.node.CephPoolList', {
83 extend
: 'Ext.grid.GridPanel',
84 alias
: 'widget.pveNodeCephPoolList',
86 onlineHelp
: 'chapter_pveceph',
89 stateId
: 'grid-ceph-pools',
90 bufferedRenderer
: false,
92 features
: [ { ftype
: 'summary'} ],
96 header
: gettext('Name'),
99 dataIndex
: 'pool_name'
102 header
: gettext('Size') + '/min',
105 renderer: function(v
, meta
, rec
) {
106 return v
+ '/' + rec
.data
.min_size
;
111 text
: 'Placement Groups',
114 text
: '# of PGs', // pg_num',
120 text
: gettext('Autoscale'),
123 dataIndex
: 'pg_autoscale_mode'
134 dataIndex
: 'crush_rule'
137 text
: gettext('Name'),
139 dataIndex
: 'crush_rule_name',
144 text
: gettext('Used'),
151 renderer: function(val
) {
152 return Ext
.util
.Format
.percent(val
, '0.00');
154 dataIndex
: 'percent_used',
156 summaryRenderer: function(val
) {
157 return Ext
.util
.Format
.percent(val
, '0.00');
161 text
: gettext('Total'),
164 renderer
: PVE
.Utils
.render_size
,
166 dataIndex
: 'bytes_used',
168 summaryRenderer
: PVE
.Utils
.render_size
173 initComponent: function() {
176 var nodename
= me
.pveSelNode
.data
.node
;
178 throw "no node name specified";
181 var sm
= Ext
.create('Ext.selection.RowModel', {});
183 var rstore
= Ext
.create('Proxmox.data.UpdateStore', {
185 storeid
: 'ceph-pool-list' + nodename
,
186 model
: 'ceph-pool-list',
189 url
: "/api2/json/nodes/" + nodename
+ "/ceph/pools"
193 var store
= Ext
.create('Proxmox.data.DiffStore', { rstore
: rstore
});
195 var regex
= new RegExp("not (installed|initialized)", "i");
196 PVE
.Utils
.handleStoreErrorOrMask(me
, rstore
, regex
, function(me
, error
){
197 me
.store
.rstore
.stopUpdate();
198 PVE
.Utils
.showCephInstallOrMask(me
, error
.statusText
, nodename
,
200 me
.mon(win
, 'cephInstallWindowClosed', function(){
201 me
.store
.rstore
.startUpdate();
207 var create_btn
= new Ext
.Button({
208 text
: gettext('Create'),
209 handler: function() {
210 var win
= Ext
.create('PVE.CephCreatePool', {
214 win
.on('destroy', function() {
220 var destroy_btn
= Ext
.create('Proxmox.button.Button', {
221 text
: gettext('Destroy'),
224 handler: function() {
225 var rec
= sm
.getSelection()[0];
227 if (!rec
.data
.pool_name
) {
230 var base_url
= '/nodes/' + nodename
+ '/ceph/pools/' +
233 var win
= Ext
.create('PVE.window.SafeDestroy', {
239 item
: { type
: 'CephPool', id
: rec
.data
.pool_name
}
241 win
.on('destroy', function() {
250 tbar
: [ create_btn
, destroy_btn
],
252 activate
: () => rstore
.startUpdate(),
253 destroy
: () => rstore
.stopUpdate(),
261 Ext
.define('ceph-pool-list', {
262 extend
: 'Ext.data.Model',
263 fields
: [ 'pool_name',
264 { name
: 'pool', type
: 'integer'},
265 { name
: 'size', type
: 'integer'},
266 { name
: 'min_size', type
: 'integer'},
267 { name
: 'pg_num', type
: 'integer'},
268 { name
: 'bytes_used', type
: 'integer'},
269 { name
: 'percent_used', type
: 'number'},
270 { name
: 'crush_rule', type
: 'integer'},
271 { name
: 'crush_rule_name', type
: 'string'}
273 idProperty
: 'pool_name'
277 Ext
.define('PVE.form.CephRuleSelector', {
278 extend
: 'Ext.form.field.ComboBox',
279 alias
: 'widget.pveCephRuleSelector',
283 displayField
: 'name',
287 initComponent: function() {
291 throw "no nodename given";
294 var store
= Ext
.create('Ext.data.Store', {
299 url
: '/api2/json/nodes/' + me
.nodename
+ '/ceph/rules'
310 callback: function(rec
, op
, success
){
311 if (success
&& rec
.length
> 0) {