]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/Cluster.js
1 /*jslint confusion: true*/
2 Ext
.define('pve-cluster-nodes', {
3 extend
: 'Ext.data.Model',
5 'node', { type
: 'integer', name
: 'nodeid' }, 'ring0_addr', 'ring1_addr',
6 { type
: 'integer', name
: 'quorum_votes' }
10 url
: "/api2/json/cluster/config/nodes"
15 Ext
.define('pve-cluster-info', {
16 extend
: 'Ext.data.Model',
19 url
: "/api2/json/cluster/config/join"
23 Ext
.define('PVE.ClusterAdministration', {
24 extend
: 'Ext.panel.Panel',
25 xtype
: 'pveClusterAdministration',
27 title
: gettext('Cluster Administration'),
28 onlineHelp
: 'chapter_pvecm',
31 defaults
: { border
: false },
51 title
: gettext('Cluster Information'),
53 xclass
: 'Ext.app.ViewController',
55 init: function(view
) {
56 view
.store
= Ext
.create('Proxmox.data.UpdateStore', {
59 storeid
: 'pve-cluster-info',
60 model
: 'pve-cluster-info'
62 view
.store
.on('load', this.onLoad
, this);
63 view
.on('destroy', view
.store
.stopUpdate
);
66 onLoad: function(store
, records
, success
) {
67 var vm
= this.getViewModel();
68 if (!success
|| !records
|| !records
[0].data
) {
70 vm
.set('isInCluster', false);
71 vm
.set('nodelist', []);
72 vm
.set('preferred_node', {
79 var data
= records
[0].data
;
80 vm
.set('totem', data
.totem
);
81 vm
.set('isInCluster', !!data
.totem
.cluster_name
);
82 vm
.set('nodelist', data
.nodelist
);
84 var nodeinfo
= Ext
.Array
.findBy(data
.nodelist
, function (el
) {
85 return el
.name
=== data
.preferred_node
;
90 PVE
.Utils
.forEachCorosyncLink(nodeinfo
, (num
, link
) => {
95 vm
.set('preferred_node', {
96 name
: data
.preferred_node
,
97 addr
: nodeinfo
.pve_addr
,
104 onCreate: function() {
105 var view
= this.getView();
106 view
.store
.stopUpdate();
107 var win
= Ext
.create('PVE.ClusterCreateWindow', {
110 destroy: function() {
111 view
.store
.startUpdate();
117 onClusterInfo: function() {
118 var vm
= this.getViewModel();
119 var win
= Ext
.create('PVE.ClusterInfoWindow', {
121 ipAddress
: vm
.get('preferred_node.addr'),
122 fingerprint
: vm
.get('preferred_node.fp'),
123 peerLinks
: vm
.get('preferred_node.peerLinks'),
124 ring_addr
: vm
.get('preferred_node.ring_addr'),
125 totem
: vm
.get('totem')
132 var view
= this.getView();
133 view
.store
.stopUpdate();
134 var win
= Ext
.create('PVE.ClusterJoinNodeWindow', {
137 destroy: function() {
138 view
.store
.startUpdate();
146 text
: gettext('Create Cluster'),
147 reference
: 'createButton',
150 disabled
: '{isInCluster}'
154 text
: gettext('Join Information'),
155 reference
: 'addButton',
156 handler
: 'onClusterInfo',
158 disabled
: '{!isInCluster}'
162 text
: gettext('Join Cluster'),
163 reference
: 'joinButton',
166 disabled
: '{isInCluster}'
174 xtype
: 'displayfield',
175 fieldLabel
: gettext('Cluster Name'),
177 value
: '{totem.cluster_name}',
178 hidden
: '{!isInCluster}'
183 xtype
: 'displayfield',
184 fieldLabel
: gettext('Config Version'),
186 value
: '{totem.config_version}',
187 hidden
: '{!isInCluster}'
192 xtype
: 'displayfield',
193 fieldLabel
: gettext('Number of Nodes'),
196 value
: '{nodecount}',
197 hidden
: '{!isInCluster}'
202 xtype
: 'displayfield',
203 value
: gettext('Standalone node - no cluster defined'),
205 hidden
: '{isInCluster}'
213 title
: gettext('Cluster Nodes'),
215 enableColumnHide
: false,
217 xclass
: 'Ext.app.ViewController',
219 init: function(view
) {
220 view
.rstore
= Ext
.create('Proxmox.data.UpdateStore', {
225 storeid
: 'pve-cluster-nodes',
226 model
: 'pve-cluster-nodes'
228 view
.setStore(Ext
.create('Proxmox.data.DiffStore', {
235 Proxmox
.Utils
.monStoreErrors(view
, view
.rstore
);
236 view
.rstore
.on('load', this.onLoad
, this);
237 view
.on('destroy', view
.rstore
.stopUpdate
);
240 onLoad: function(store
, records
, success
) {
241 var view
= this.getView();
242 var vm
= this.getViewModel();
244 if (!success
|| !records
|| !records
.length
) {
245 vm
.set('nodecount', 0);
248 vm
.set('nodecount', records
.length
);
250 // show/hide columns according to used links
251 var linkIndex
= view
.columns
.length
;
252 var columns
= Ext
.each(view
.columns
, (col
, i
) => {
253 if (col
.linkNumber
!== undefined) {
256 // save offset at which link columns start, so we
257 // can address them directly below
264 PVE
.Utils
.forEachCorosyncLink(records
[0].data
,
269 view
.columns
[linkIndex
+linknum
].setHidden(false);
277 header
: gettext('Nodename'),
282 header
: gettext('ID'),
290 header
: gettext('Votes'),
295 dataIndex
: 'quorum_votes'
298 header
: Ext
.String
.format(gettext('Link {0}'), 0),
299 dataIndex
: 'ring0_addr',
303 header
: Ext
.String
.format(gettext('Link {0}'), 1),
304 dataIndex
: 'ring1_addr',
308 header
: Ext
.String
.format(gettext('Link {0}'), 2),
309 dataIndex
: 'ring2_addr',
313 header
: Ext
.String
.format(gettext('Link {0}'), 3),
314 dataIndex
: 'ring3_addr',
318 header
: Ext
.String
.format(gettext('Link {0}'), 4),
319 dataIndex
: 'ring4_addr',
323 header
: Ext
.String
.format(gettext('Link {0}'), 5),
324 dataIndex
: 'ring5_addr',
328 header
: Ext
.String
.format(gettext('Link {0}'), 6),
329 dataIndex
: 'ring6_addr',
333 header
: Ext
.String
.format(gettext('Link {0}'), 7),
334 dataIndex
: 'ring7_addr',