]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/ceph/FS.js
update shipped appliance info index
[pve-manager.git] / www / manager6 / ceph / FS.js
1 Ext.define('PVE.CephCreateFS', {
2 extend: 'Proxmox.window.Edit',
3 alias: 'widget.pveCephCreateFS',
4
5 showTaskViewer: true,
6 onlineHelp: 'pveceph_fs_create',
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);
31 },
32 },
33 submitValue: false, // already encoded in apicall URL
34 emptyText: 'cephfs',
35 },
36 {
37 xtype: 'proxmoxintegerfield',
38 fieldLabel: 'Placement Groups',
39 name: 'pg_num',
40 value: 128,
41 emptyText: 128,
42 minValue: 8,
43 maxValue: 32768,
44 allowBlank: false,
45 },
46 {
47 xtype: 'proxmoxcheckbox',
48 fieldLabel: gettext('Add as Storage'),
49 value: true,
50 name: 'add-storage',
51 autoEl: {
52 tag: 'div',
53 'data-qtip': gettext('Add the new CephFS to the cluster storage configuration.'),
54 },
55 },
56 ],
57
58 initComponent: function() {
59 var me = this;
60
61 if (!me.nodename) {
62 throw "no node name specified";
63 }
64 me.setFSName();
65
66 me.callParent();
67 },
68 });
69
70 Ext.define('PVE.NodeCephFSPanel', {
71 extend: 'Ext.panel.Panel',
72 xtype: 'pveNodeCephFSPanel',
73 mixins: ['Proxmox.Mixin.CBind'],
74
75 title: gettext('CephFS'),
76 onlineHelp: 'pveceph_fs',
77
78 border: false,
79 defaults: {
80 border: false,
81 cbind: {
82 nodename: '{nodename}',
83 },
84 },
85
86 viewModel: {
87 parent: null,
88 data: {
89 mdsCount: 0,
90 },
91 formulas: {
92 canCreateFS: function(get) {
93 return get('mdsCount') > 0;
94 },
95 },
96 },
97
98 items: [
99 {
100 xtype: 'grid',
101 emptyText: Ext.String.format(gettext('No {0} configured.'), 'CephFS'),
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',
112 proxy: {
113 type: 'proxmox',
114 url: `/api2/json/nodes/${view.nodename}/ceph/fs`,
115 },
116 model: 'pve-ceph-fs',
117 });
118 view.setStore(Ext.create('Proxmox.data.DiffStore', {
119 rstore: view.rstore,
120 sorters: {
121 property: 'name',
122 direction: 'ASC',
123 },
124 }));
125 // manages the "install ceph?" overlay
126 PVE.Utils.monitor_ceph_installed(view, view.rstore, view.nodename, true);
127 view.on('destroy', () => view.rstore.stopUpdate());
128 },
129
130 onCreate: function() {
131 let view = this.getView();
132 view.rstore.stopUpdate();
133 Ext.create('PVE.CephCreateFS', {
134 autoShow: true,
135 nodename: view.nodename,
136 listeners: {
137 destroy: () => view.rstore.startUpdate(),
138 },
139 });
140 },
141 },
142 tbar: [
143 {
144 text: gettext('Create CephFS'),
145 reference: 'createButton',
146 handler: 'onCreate',
147 bind: {
148 disabled: '{!canCreateFS}',
149 },
150 },
151 ],
152 columns: [
153 {
154 header: gettext('Name'),
155 flex: 1,
156 dataIndex: 'name',
157 },
158 {
159 header: 'Data Pool',
160 flex: 1,
161 dataIndex: 'data_pool',
162 },
163 {
164 header: 'Metadata Pool',
165 flex: 1,
166 dataIndex: 'metadata_pool',
167 },
168 ],
169 cbind: {
170 nodename: '{nodename}',
171 },
172 },
173 {
174 xtype: 'pveNodeCephMDSList',
175 title: gettext('Metadata Servers'),
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;
183 }
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);
191 },
192 cbind: {
193 nodename: '{nodename}',
194 },
195 },
196 ],
197 }, function() {
198 Ext.define('pve-ceph-fs', {
199 extend: 'Ext.data.Model',
200 fields: ['name', 'data_pool', 'metadata_pool'],
201 proxy: {
202 type: 'proxmox',
203 url: "/api2/json/nodes/localhost/ceph/fs",
204 },
205 idProperty: 'name',
206 });
207 });