]>
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'),
30 defaults
: { border
: false },
50 title
: gettext('Cluster Information'),
52 xclass
: 'Ext.app.ViewController',
54 init: function(view
) {
55 view
.store
= Ext
.create('Proxmox.data.UpdateStore', {
58 storeid
: 'pve-cluster-info',
59 model
: 'pve-cluster-info'
61 view
.store
.on('load', this.onLoad
, this);
62 view
.on('destroy', view
.store
.stopUpdate
);
65 onLoad: function(store
, records
, success
) {
66 var vm
= this.getViewModel();
67 if (!success
|| !records
|| !records
[0].data
) {
69 vm
.set('isInCluster', false);
70 vm
.set('nodelist', []);
71 vm
.set('preferred_node', {
78 var data
= records
[0].data
;
79 vm
.set('totem', data
.totem
);
80 vm
.set('isInCluster', !!data
.totem
.cluster_name
);
81 vm
.set('nodelist', data
.nodelist
);
83 var nodeinfo
= Ext
.Array
.findBy(data
.nodelist
, function (el
) {
84 return el
.name
=== data
.preferred_node
;
87 vm
.set('preferred_node', {
88 name
: data
.preferred_node
,
89 addr
: nodeinfo
.pve_addr
,
94 onCreate: function() {
95 var view
= this.getView();
96 view
.store
.stopUpdate();
97 var win
= Ext
.create('PVE.ClusterCreateWindow', {
100 destroy: function() {
101 view
.store
.startUpdate();
107 onClusterInfo: function() {
108 var vm
= this.getViewModel();
109 var win
= Ext
.create('PVE.ClusterInfoWindow', {
111 ipAddress
: vm
.get('preferred_node.addr'),
112 fingerprint
: vm
.get('preferred_node.fp'),
113 totem
: vm
.get('totem')
121 text
: gettext('Create Cluster'),
122 reference
: 'createButton',
125 disabled
: '{isInCluster}'
129 text
: gettext('Join Information'),
130 reference
: 'addButton',
131 handler
: 'onClusterInfo',
133 disabled
: '{!isInCluster}'
141 xtype
: 'displayfield',
142 fieldLabel
: gettext('Cluster Name'),
144 value
: '{totem.cluster_name}',
145 hidden
: '{!isInCluster}'
150 xtype
: 'displayfield',
151 fieldLabel
: gettext('Config Version'),
153 value
: '{totem.config_version}',
154 hidden
: '{!isInCluster}'
159 xtype
: 'displayfield',
160 fieldLabel
: gettext('Number of Nodes'),
163 value
: '{nodecount}',
164 hidden
: '{!isInCluster}'
169 xtype
: 'displayfield',
170 value
: gettext('Standalone node - no cluster defined'),
172 hidden
: '{isInCluster}'
180 title
: gettext('Cluster Nodes'),
182 xclass
: 'Ext.app.ViewController',
184 init: function(view
) {
185 view
.rstore
= Ext
.create('Proxmox.data.UpdateStore', {
190 storeid
: 'pve-cluster-nodes',
191 model
: 'pve-cluster-nodes'
193 view
.setStore(Ext
.create('Proxmox.data.DiffStore', {
200 Proxmox
.Utils
.monStoreErrors(view
, view
.rstore
);
201 view
.store
.on('load', this.onLoad
, this);
202 view
.on('destroy', view
.rstore
.stopUpdate
);
205 onLoad: function(store
, records
, success
) {
206 var vm
= this.getViewModel();
207 if (!success
|| !records
) {
208 vm
.set('nodecount', 0);
211 vm
.set('nodecount', records
.length
);
216 header
: gettext('Nodename'),
221 header
: gettext('ID'),
226 header
: gettext('Votes'),
228 dataIndex
: 'quorum_votes'
231 header
: gettext('Ring 0'),
233 dataIndex
: 'ring0_addr'
236 header
: gettext('Ring 1'),
238 dataIndex
: 'ring1_addr'