]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/ceph/FS.js
1 /*jslint confusion: true */
2 Ext
.define('PVE.CephCreateFS', {
3 extend
: 'Proxmox.window.Edit',
4 alias
: 'widget.pveCephCreateFS',
7 onlineHelp
: 'pveceph_fs_create',
13 setFSName: function(fsName
) {
16 if (fsName
=== '' || fsName
=== undefined) {
20 me
.url
= "/nodes/" + me
.nodename
+ "/ceph/fs/" + fsName
;
26 fieldLabel
: gettext('Name'),
30 change: function(f
, value
) {
31 this.up('pveCephCreateFS').setFSName(value
);
34 submitValue
: false, // already encoded in apicall URL
38 xtype
: 'proxmoxintegerfield',
39 fieldLabel
: 'Placement Groups',
48 xtype
: 'proxmoxcheckbox',
49 fieldLabel
: gettext('Add Storage'),
55 initComponent : function() {
59 throw "no node name specified";
67 Ext
.define('PVE.CephCreateMDS', {
68 extend
: 'Proxmox.window.Edit',
69 alias
: 'widget.pveCephCreateMDS',
72 onlineHelp
: 'pveceph_fs_mds',
78 setNode: function(nodename
) {
81 me
.nodename
= nodename
;
82 me
.url
= "/nodes/" + nodename
+ "/ceph/mds/" + nodename
;
87 xtype
: 'pveNodeSelector',
88 fieldLabel
: gettext('Node'),
93 change: function(f
, value
) {
94 this.up('pveCephCreateMDS').setNode(value
);
100 initComponent : function() {
104 throw "no node name specified";
106 me
.setNode(me
.nodename
);
112 Ext
.define('PVE.NodeCephFSPanel', {
113 extend
: 'Ext.panel.Panel',
114 xtype
: 'pveNodeCephFSPanel',
115 mixins
: ['Proxmox.Mixin.CBind'],
117 title
: gettext('CephFS'),
118 onlineHelp
: 'pveceph_fs',
124 nodename
: '{nodename}'
131 cephfsConfigured
: false,
135 canCreateFS: function(get) {
136 return (!get('cephfsConfigured') && get('mdsCount') > 0);
144 emptyText
: Ext
.String
.format(gettext('No {0} configured.'), 'CephFS'),
146 xclass
: 'Ext.app.ViewController',
148 init: function(view
) {
149 view
.rstore
= Ext
.create('Proxmox.data.UpdateStore', {
154 storeid
: 'pve-ceph-fs',
157 url
: '/api2/json/nodes/' + view
.nodename
+ '/ceph/fs'
161 view
.setStore(Ext
.create('Proxmox.data.DiffStore', {
168 var regex
= new RegExp("not (installed|initialized)", "i");
169 PVE
.Utils
.handleStoreErrorOrMask(view
, view
.rstore
, regex
, function(me
, error
){
170 me
.rstore
.stopUpdate();
171 PVE
.Utils
.showCephInstallOrMask(me
.ownerCt
, error
.statusText
, view
.nodename
,
173 me
.mon(win
, 'cephInstallWindowClosed', function(){
174 me
.rstore
.startUpdate();
179 view
.rstore
.on('load', this.onLoad
, this);
180 view
.on('destroy', view
.rstore
.stopUpdate
);
183 onCreate: function() {
184 var view
= this.getView();
185 view
.rstore
.stopUpdate();
186 var win
= Ext
.create('PVE.CephCreateFS', {
188 nodename
: view
.nodename
,
190 destroy: function() {
191 view
.rstore
.startUpdate();
197 onLoad: function(store
, records
, success
) {
198 var vm
= this.getViewModel();
199 if (!(success
&& records
&& records
.length
> 0)) {
200 vm
.set('cephfsConfigured', false);
203 vm
.set('cephfsConfigured', true);
208 text
: gettext('Create CephFS'),
209 reference
: 'createButton',
212 // only one CephFS per Ceph cluster makes sense for now
213 disabled
: '{!canCreateFS}'
219 header
: gettext('Name'),
226 dataIndex
: 'data_pool'
229 header
: 'Metadata Pool',
231 dataIndex
: 'metadata_pool'
235 nodename
: '{nodename}'
240 title
: gettext('Metadata Servers'),
241 emptyText
: Ext
.String
.format(gettext('No {0} configured.'), 'MDS'),
243 xclass
: 'Ext.app.ViewController',
245 init: function(view
) {
246 view
.rstore
= Ext
.create('Proxmox.data.UpdateStore', {
251 storeid
: 'pve-ceph-mds',
254 url
: '/api2/json/nodes/'+ view
.nodename
+'/ceph/mds'
256 model
: 'pve-ceph-mds'
258 view
.setStore(Ext
.create('Proxmox.data.DiffStore', {
265 var regex
= new RegExp("not (installed|initialized)", "i");
266 PVE
.Utils
.handleStoreErrorOrMask(view
, view
.rstore
, regex
, function(me
, error
){
267 me
.rstore
.stopUpdate();
268 PVE
.Utils
.showCephInstallOrMask(me
.ownerCt
, error
.statusText
, view
.nodename
,
270 me
.mon(win
, 'cephInstallWindowClosed', function(){
271 me
.rstore
.startUpdate();
276 view
.rstore
.on('load', this.onLoad
, this);
277 view
.on('destroy', view
.rstore
.stopUpdate
);
279 onLoad: function(store
, records
, success
) {
280 var vm
= this.getViewModel();
281 if (!success
|| !records
) {
282 vm
.set('mdsCount', 0);
285 vm
.set('mdsCount', records
.length
);
287 onCreateMDS: function() {
288 var view
= this.getView();
289 view
.rstore
.stopUpdate();
290 var win
= Ext
.create('PVE.CephCreateMDS', {
292 nodename
: view
.nodename
,
294 destroy: function() {
295 view
.rstore
.startUpdate();
303 text
: gettext('Create MDS'),
304 reference
: 'createButton',
305 handler
: 'onCreateMDS'
308 text
: gettext('Destroy MDS'),
309 xtype
: 'proxmoxStdRemoveButton',
310 getUrl: function(rec
) {
311 if (!rec
.data
.host
) {
312 Ext
.Msg
.alert(gettext('Error'), "entry has no host");
315 return "/nodes/" + rec
.data
.host
+ "/ceph/mds/" + rec
.data
.name
;
317 callback: function(options
, success
, response
) {
319 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
322 var upid
= response
.result
.data
;
323 var win
= Ext
.create('Proxmox.window.TaskProgress', { upid
: upid
});
330 header
: gettext('Name'),
335 header
: gettext('Host'),
340 header
: gettext('Address'),
345 header
: gettext('State'),
351 nodename
: '{nodename}'
356 Ext
.define('pve-ceph-mds', {
357 extend
: 'Ext.data.Model',
358 fields
: [ 'name', 'host', 'addr', 'state' ],
361 url
: "/api2/json/nodes/localhost/ceph/mds"
365 Ext
.define('pve-ceph-fs', {
366 extend
: 'Ext.data.Model',
367 fields
: [ 'name', 'data_pool', 'metadata_pool' ],
370 url
: "/api2/json/nodes/localhost/ceph/fs"