]>
Commit | Line | Data |
---|---|---|
845956cc TL |
1 | Ext.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 |
70 | Ext.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 | }); |