]> git.proxmox.com Git - pve-manager-legacy.git/blame - www/manager6/ceph/FS.js
ui: enable gettext localisation for more user exposed strings
[pve-manager-legacy.git] / www / manager6 / ceph / FS.js
CommitLineData
845956cc
TL
1Ext.define('PVE.CephCreateFS', {
2 extend: 'Proxmox.window.Edit',
3 alias: 'widget.pveCephCreateFS',
4
5 showTaskViewer: true,
253c3e4f 6 onlineHelp: 'pveceph_fs_create',
845956cc
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);
9beb4751 31 },
845956cc
TL
32 },
33 submitValue: false, // already encoded in apicall URL
9beb4751 34 emptyText: 'cephfs',
845956cc
TL
35 },
36 {
37 xtype: 'proxmoxintegerfield',
cccaf366 38 fieldLabel: 'Placement Groups',
845956cc 39 name: 'pg_num',
a3e7ff34
TL
40 value: 128,
41 emptyText: 128,
845956cc
TL
42 minValue: 8,
43 maxValue: 32768,
9beb4751 44 allowBlank: false,
845956cc
TL
45 },
46 {
47 xtype: 'proxmoxcheckbox',
845d54fd 48 fieldLabel: gettext('Add as Storage'),
845956cc 49 value: true,
845d54fd
TL
50 name: 'add-storage',
51 autoEl: {
52 tag: 'div',
53 'data-qtip': gettext('Add the new CephFS to the cluster storage configuration.'),
54 },
9beb4751 55 },
845956cc
TL
56 ],
57
8b520a2b 58 initComponent: function() {
845956cc
TL
59 var me = this;
60
61 if (!me.nodename) {
62 throw "no node name specified";
63 }
64 me.setFSName();
65
66 me.callParent();
9beb4751 67 },
845956cc
TL
68});
69
845956cc
TL
70Ext.define('PVE.NodeCephFSPanel', {
71 extend: 'Ext.panel.Panel',
72 xtype: 'pveNodeCephFSPanel',
73 mixins: ['Proxmox.Mixin.CBind'],
74
b565ae16 75 title: gettext('CephFS'),
253c3e4f 76 onlineHelp: 'pveceph_fs',
845956cc
TL
77
78 border: false,
79 defaults: {
80 border: false,
81 cbind: {
9beb4751
TL
82 nodename: '{nodename}',
83 },
845956cc
TL
84 },
85
b565ae16
TL
86 viewModel: {
87 parent: null,
88 data: {
9beb4751 89 mdsCount: 0,
b565ae16
TL
90 },
91 formulas: {
92 canCreateFS: function(get) {
00724291 93 return get('mdsCount') > 0;
9beb4751
TL
94 },
95 },
b565ae16
TL
96 },
97
845956cc
TL
98 items: [
99 {
100 xtype: 'grid',
b565ae16 101 emptyText: Ext.String.format(gettext('No {0} configured.'), 'CephFS'),
845956cc
TL
102 controller: {
103 xclass: 'Ext.app.ViewController',
104
105 init: function(view) {
106 view.rstore = Ext.create('Proxmox.data.UpdateStore', {
107 autoLoad: true,
108 xtype: 'update',
109 interval: 5 * 1000,
110 autoStart: true,
111 storeid: 'pve-ceph-fs',
762bea6d
TM
112 proxy: {
113 type: 'proxmox',
aa790325 114 url: `/api2/json/nodes/${view.nodename}/ceph/fs`,
762bea6d 115 },
9beb4751 116 model: 'pve-ceph-fs',
845956cc
TL
117 });
118 view.setStore(Ext.create('Proxmox.data.DiffStore', {
119 rstore: view.rstore,
120 sorters: {
121 property: 'name',
35967c26 122 direction: 'ASC',
9beb4751 123 },
845956cc 124 }));
b7b1152a
TL
125 // manages the "install ceph?" overlay
126 PVE.Utils.monitor_ceph_installed(view, view.rstore, view.nodename, true);
aa790325 127 view.on('destroy', () => view.rstore.stopUpdate());
845956cc
TL
128 },
129
130 onCreate: function() {
aa790325 131 let view = this.getView();
845956cc 132 view.rstore.stopUpdate();
aa790325 133 Ext.create('PVE.CephCreateFS', {
845956cc
TL
134 autoShow: true,
135 nodename: view.nodename,
136 listeners: {
aa790325 137 destroy: () => view.rstore.startUpdate(),
9beb4751 138 },
845956cc
TL
139 });
140 },
845956cc
TL
141 },
142 tbar: [
143 {
144 text: gettext('Create CephFS'),
145 reference: 'createButton',
146 handler: 'onCreate',
147 bind: {
9beb4751
TL
148 disabled: '{!canCreateFS}',
149 },
150 },
845956cc
TL
151 ],
152 columns: [
153 {
154 header: gettext('Name'),
155 flex: 1,
9beb4751 156 dataIndex: 'name',
845956cc
TL
157 },
158 {
f8fe74da 159 header: gettext('Data Pool'),
845956cc 160 flex: 1,
9beb4751 161 dataIndex: 'data_pool',
845956cc
TL
162 },
163 {
f8fe74da 164 header: gettext('Metadata Pool'),
845956cc 165 flex: 1,
9beb4751
TL
166 dataIndex: 'metadata_pool',
167 },
845956cc
TL
168 ],
169 cbind: {
9beb4751
TL
170 nodename: '{nodename}',
171 },
845956cc
TL
172 },
173 {
9d15dec7 174 xtype: 'pveNodeCephMDSList',
845956cc 175 title: gettext('Metadata Servers'),
1ab7e60b
DC
176 stateId: 'grid-ceph-mds',
177 type: 'mds',
178 storeLoadCallback: function(store, records, success) {
179 var vm = this.getViewModel();
180 if (!success || !records) {
181 vm.set('mdsCount', 0);
182 return;
845956cc 183 }
00724291
DC
184 let count = 0;
185 for (const mds of records) {
186 if (mds.data.state === 'up:standby') {
187 count++;
188 }
189 }
190 vm.set('mdsCount', count);
845956cc 191 },
845956cc 192 cbind: {
9beb4751
TL
193 nodename: '{nodename}',
194 },
195 },
196 ],
845956cc 197}, function() {
845956cc
TL
198 Ext.define('pve-ceph-fs', {
199 extend: 'Ext.data.Model',
8b520a2b 200 fields: ['name', 'data_pool', 'metadata_pool'],
845956cc
TL
201 proxy: {
202 type: 'proxmox',
9beb4751 203 url: "/api2/json/nodes/localhost/ceph/fs",
845956cc 204 },
9beb4751 205 idProperty: 'name',
845956cc
TL
206 });
207});