]>
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 view
.setStore(Ext
.create('Proxmox.data.DiffStore', {
164 var regex
= new RegExp("not (installed|initialized)", "i");
165 PVE
.Utils
.handleStoreErrorOrMask(view
, view
.rstore
, regex
, function(me
, error
){
166 me
.rstore
.stopUpdate();
167 PVE
.Utils
.showCephInstallOrMask(me
.ownerCt
, error
.statusText
, view
.nodename
,
169 me
.mon(win
, 'cephInstallWindowClosed', function(){
170 me
.rstore
.startUpdate();
175 view
.rstore
.on('load', this.onLoad
, this);
176 view
.on('destroy', view
.rstore
.stopUpdate
);
179 onCreate: function() {
180 var view
= this.getView();
181 view
.rstore
.stopUpdate();
182 var win
= Ext
.create('PVE.CephCreateFS', {
184 nodename
: view
.nodename
,
186 destroy: function() {
187 view
.rstore
.startUpdate();
193 onLoad: function(store
, records
, success
) {
194 var vm
= this.getViewModel();
195 if (!(success
&& records
&& records
.length
> 0)) {
196 vm
.set('cephfsConfigured', false);
199 vm
.set('cephfsConfigured', true);
204 text
: gettext('Create CephFS'),
205 reference
: 'createButton',
208 // only one CephFS per Ceph cluster makes sense for now
209 disabled
: '{!canCreateFS}'
215 header
: gettext('Name'),
222 dataIndex
: 'data_pool'
225 header
: 'Metadata Pool',
227 dataIndex
: 'metadata_pool'
231 nodename
: '{nodename}'
236 title
: gettext('Metadata Servers'),
237 emptyText
: Ext
.String
.format(gettext('No {0} configured.'), 'MDS'),
239 xclass
: 'Ext.app.ViewController',
241 init: function(view
) {
242 view
.rstore
= Ext
.create('Proxmox.data.UpdateStore', {
247 storeid
: 'pve-ceph-mds',
248 model
: 'pve-ceph-mds'
250 view
.setStore(Ext
.create('Proxmox.data.DiffStore', {
257 var regex
= new RegExp("not (installed|initialized)", "i");
258 PVE
.Utils
.handleStoreErrorOrMask(view
, view
.rstore
, regex
, function(me
, error
){
259 me
.rstore
.stopUpdate();
260 PVE
.Utils
.showCephInstallOrMask(me
.ownerCt
, error
.statusText
, view
.nodename
,
262 me
.mon(win
, 'cephInstallWindowClosed', function(){
263 me
.rstore
.startUpdate();
268 view
.rstore
.on('load', this.onLoad
, this);
269 view
.on('destroy', view
.rstore
.stopUpdate
);
271 onLoad: function(store
, records
, success
) {
272 var vm
= this.getViewModel();
273 if (!success
|| !records
) {
274 vm
.set('mdsCount', 0);
277 vm
.set('mdsCount', records
.length
);
279 onCreateMDS: function() {
280 var view
= this.getView();
281 view
.rstore
.stopUpdate();
282 var win
= Ext
.create('PVE.CephCreateMDS', {
284 nodename
: view
.nodename
,
286 destroy: function() {
287 view
.rstore
.startUpdate();
295 text
: gettext('Create MDS'),
296 reference
: 'createButton',
297 handler
: 'onCreateMDS'
300 text
: gettext('Destroy MDS'),
301 xtype
: 'proxmoxStdRemoveButton',
302 getUrl: function(rec
) {
303 if (!rec
.data
.host
) {
304 Ext
.Msg
.alert(gettext('Error'), "entry has no host");
307 return "/nodes/" + rec
.data
.host
+ "/ceph/mds/" + rec
.data
.name
;
309 callback: function(options
, success
, response
) {
311 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
314 var upid
= response
.result
.data
;
315 var win
= Ext
.create('Proxmox.window.TaskProgress', { upid
: upid
});
322 header
: gettext('Name'),
327 header
: gettext('Host'),
332 header
: gettext('Address'),
337 header
: gettext('State'),
343 nodename
: '{nodename}'
348 Ext
.define('pve-ceph-mds', {
349 extend
: 'Ext.data.Model',
350 fields
: [ 'name', 'host', 'addr', 'state' ],
353 url
: "/api2/json/nodes/localhost/ceph/mds"
357 Ext
.define('pve-ceph-fs', {
358 extend
: 'Ext.data.Model',
359 fields
: [ 'name', 'data_pool', 'metadata_pool' ],
362 url
: "/api2/json/nodes/localhost/ceph/fs"