]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/ceph/FS.js
ui: eslint: fix various spacing related issues
[pve-manager.git] / www / manager6 / ceph / FS.js
CommitLineData
563ed5ee
TL
1Ext.define('PVE.CephCreateFS', {
2 extend: 'Proxmox.window.Edit',
3 alias: 'widget.pveCephCreateFS',
4
5 showTaskViewer: true,
e8c0ec03 6 onlineHelp: 'pveceph_fs_create',
563ed5ee
TL
7
8 subject: 'Ceph FS',
9 isCreate: true,
10 method: 'POST',
11
12 setFSName: function(fsName) {
13 var me = this;
14
15 if (fsName === '' || fsName === undefined) {
16 fsName = 'cephfs';
17 }
18
19 me.url = "/nodes/" + me.nodename + "/ceph/fs/" + fsName;
20 },
21
22 items: [
23 {
24 xtype: 'textfield',
25 fieldLabel: gettext('Name'),
26 name: 'name',
27 value: 'cephfs',
28 listeners: {
29 change: function(f, value) {
30 this.up('pveCephCreateFS').setFSName(value);
f6710aac 31 },
563ed5ee
TL
32 },
33 submitValue: false, // already encoded in apicall URL
f6710aac 34 emptyText: 'cephfs',
563ed5ee
TL
35 },
36 {
37 xtype: 'proxmoxintegerfield',
c5a0a1e4 38 fieldLabel: 'Placement Groups',
563ed5ee 39 name: 'pg_num',
6ad70a2b
TL
40 value: 128,
41 emptyText: 128,
563ed5ee
TL
42 minValue: 8,
43 maxValue: 32768,
f6710aac 44 allowBlank: false,
563ed5ee
TL
45 },
46 {
47 xtype: 'proxmoxcheckbox',
2bf285d6 48 fieldLabel: gettext('Add as Storage'),
563ed5ee 49 value: true,
2bf285d6
TL
50 name: 'add-storage',
51 autoEl: {
52 tag: 'div',
53 'data-qtip': gettext('Add the new CephFS to the cluster storage configuration.'),
54 },
f6710aac 55 },
563ed5ee
TL
56 ],
57
8058410f 58 initComponent: function() {
563ed5ee
TL
59 var me = this;
60
61 if (!me.nodename) {
62 throw "no node name specified";
63 }
64 me.setFSName();
65
66 me.callParent();
f6710aac 67 },
563ed5ee
TL
68});
69
563ed5ee
TL
70Ext.define('PVE.NodeCephFSPanel', {
71 extend: 'Ext.panel.Panel',
72 xtype: 'pveNodeCephFSPanel',
73 mixins: ['Proxmox.Mixin.CBind'],
74
a9d47b2b 75 title: gettext('CephFS'),
e8c0ec03 76 onlineHelp: 'pveceph_fs',
563ed5ee
TL
77
78 border: false,
79 defaults: {
80 border: false,
81 cbind: {
f6710aac
TL
82 nodename: '{nodename}',
83 },
563ed5ee
TL
84 },
85
a9d47b2b
TL
86 viewModel: {
87 parent: null,
88 data: {
89 cephfsConfigured: false,
f6710aac 90 mdsCount: 0,
a9d47b2b
TL
91 },
92 formulas: {
93 canCreateFS: function(get) {
94 return (!get('cephfsConfigured') && get('mdsCount') > 0);
f6710aac
TL
95 },
96 },
a9d47b2b
TL
97 },
98
563ed5ee
TL
99 items: [
100 {
101 xtype: 'grid',
a9d47b2b 102 emptyText: Ext.String.format(gettext('No {0} configured.'), 'CephFS'),
563ed5ee
TL
103 controller: {
104 xclass: 'Ext.app.ViewController',
105
106 init: function(view) {
107 view.rstore = Ext.create('Proxmox.data.UpdateStore', {
108 autoLoad: true,
109 xtype: 'update',
110 interval: 5 * 1000,
111 autoStart: true,
112 storeid: 'pve-ceph-fs',
410f2cb0
TM
113 proxy: {
114 type: 'proxmox',
f6710aac 115 url: '/api2/json/nodes/' + view.nodename + '/ceph/fs',
410f2cb0 116 },
f6710aac 117 model: 'pve-ceph-fs',
563ed5ee
TL
118 });
119 view.setStore(Ext.create('Proxmox.data.DiffStore', {
120 rstore: view.rstore,
121 sorters: {
122 property: 'name',
f6710aac
TL
123 order: 'DESC',
124 },
563ed5ee 125 }));
4616a55b 126 var regex = new RegExp("not (installed|initialized)", "i");
8058410f 127 PVE.Utils.handleStoreErrorOrMask(view, view.rstore, regex, function(me, error) {
4616a55b
TM
128 me.rstore.stopUpdate();
129 PVE.Utils.showCephInstallOrMask(me.ownerCt, error.statusText, view.nodename,
8058410f
TL
130 function(win) {
131 me.mon(win, 'cephInstallWindowClosed', function() {
4616a55b
TM
132 me.rstore.startUpdate();
133 });
f6710aac 134 },
4616a55b
TM
135 );
136 });
563ed5ee
TL
137 view.rstore.on('load', this.onLoad, this);
138 view.on('destroy', view.rstore.stopUpdate);
139 },
140
141 onCreate: function() {
142 var view = this.getView();
143 view.rstore.stopUpdate();
144 var win = Ext.create('PVE.CephCreateFS', {
145 autoShow: true,
146 nodename: view.nodename,
147 listeners: {
148 destroy: function() {
149 view.rstore.startUpdate();
f6710aac
TL
150 },
151 },
563ed5ee
TL
152 });
153 },
154
155 onLoad: function(store, records, success) {
156 var vm = this.getViewModel();
157 if (!(success && records && records.length > 0)) {
158 vm.set('cephfsConfigured', false);
159 return;
160 }
161 vm.set('cephfsConfigured', true);
f6710aac 162 },
563ed5ee
TL
163 },
164 tbar: [
165 {
166 text: gettext('Create CephFS'),
167 reference: 'createButton',
168 handler: 'onCreate',
169 bind: {
170 // only one CephFS per Ceph cluster makes sense for now
f6710aac
TL
171 disabled: '{!canCreateFS}',
172 },
173 },
563ed5ee
TL
174 ],
175 columns: [
176 {
177 header: gettext('Name'),
178 flex: 1,
f6710aac 179 dataIndex: 'name',
563ed5ee
TL
180 },
181 {
182 header: 'Data Pool',
183 flex: 1,
f6710aac 184 dataIndex: 'data_pool',
563ed5ee
TL
185 },
186 {
187 header: 'Metadata Pool',
188 flex: 1,
f6710aac
TL
189 dataIndex: 'metadata_pool',
190 },
563ed5ee
TL
191 ],
192 cbind: {
f6710aac
TL
193 nodename: '{nodename}',
194 },
563ed5ee
TL
195 },
196 {
7a1aa33b 197 xtype: 'pveNodeCephServiceList',
563ed5ee 198 title: gettext('Metadata Servers'),
7a1aa33b
DC
199 stateId: 'grid-ceph-mds',
200 type: 'mds',
201 storeLoadCallback: function(store, records, success) {
202 var vm = this.getViewModel();
203 if (!success || !records) {
204 vm.set('mdsCount', 0);
205 return;
563ed5ee 206 }
7a1aa33b 207 vm.set('mdsCount', records.length);
563ed5ee 208 },
563ed5ee 209 cbind: {
f6710aac
TL
210 nodename: '{nodename}',
211 },
212 },
213 ],
563ed5ee 214}, function() {
563ed5ee
TL
215 Ext.define('pve-ceph-fs', {
216 extend: 'Ext.data.Model',
8058410f 217 fields: ['name', 'data_pool', 'metadata_pool'],
563ed5ee
TL
218 proxy: {
219 type: 'proxmox',
f6710aac 220 url: "/api2/json/nodes/localhost/ceph/fs",
563ed5ee 221 },
f6710aac 222 idProperty: 'name',
563ed5ee
TL
223 });
224});