gui/cluster: add structured peerLinks to join info

Instead of the old 'ring_addr' property (which is kept for
compatibility), we also encode the link numbers into the new peerLinks
structure. This allows us to display which IP is assigned to which link
on the cluster in the join dialog, helping a user identify which link
should receive which interface on the new node.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
This commit is contained in:
Stefan Reiter 2020-03-23 13:41:14 +01:00 committed by Thomas Lamprecht
parent 5957f47f72
commit b1e7a7d3b7
3 changed files with 32 additions and 8 deletions

View File

@ -85,14 +85,18 @@ Ext.define('PVE.ClusterAdministration', {
return el.name === data.preferred_node;
});
var links = [];
PVE.Utils.forEachCorosyncLink(nodeinfo,
(num, link) => links.push(link));
let links = {};
let ring_addr = [];
PVE.Utils.forEachCorosyncLink(nodeinfo, (num, link) => {
links[num] = link;
ring_addr.push(link);
});
vm.set('preferred_node', {
name: data.preferred_node,
addr: nodeinfo.pve_addr,
ring_addr: links,
peerLinks: links,
ring_addr: ring_addr,
fp: nodeinfo.pve_fp
});
},
@ -116,6 +120,7 @@ Ext.define('PVE.ClusterAdministration', {
joinInfo: {
ipAddress: vm.get('preferred_node.addr'),
fingerprint: vm.get('preferred_node.fp'),
peerLinks: vm.get('preferred_node.peerLinks'),
ring_addr: vm.get('preferred_node.ring_addr'),
totem: vm.get('totem')
}

View File

@ -223,10 +223,15 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
} else {
let interfaces = joinInfo.totem.interface;
let links = Object.values(interfaces).map(iface => {
let linkNumber = iface.linknumber;
let peerLink;
if (joinInfo.peerLinks) {
peerLink = joinInfo.peerLinks[linkNumber];
}
return {
number: iface.linknumber,
number: linkNumber,
value: '',
text: '',
text: peerLink ? Ext.String.format(gettext("peer's link address: {0}"), peerLink) : '',
allowBlank: false
};
});

View File

@ -14,7 +14,7 @@ Ext.define('PVE.form.CorosyncLinkEditorController', {
this.addLink();
},
addLink: function(number, value, allowBlank) {
addLink: function(number, value, allowBlank, text) {
let me = this;
let view = me.getView();
let vm = view.getViewModel();
@ -37,6 +37,7 @@ Ext.define('PVE.form.CorosyncLinkEditorController', {
allowBlankNetwork: allowBlank,
initNumber: number,
initNetwork: value,
text: text,
// needs to be set here, because we need to update the viewmodel
removeBtnHandler: function() {
@ -130,6 +131,7 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
// values
initNumber: 0,
initNetwork: '',
text: '',
layout: 'hbox',
bodyPadding: 5,
@ -190,6 +192,17 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
parent.removeBtnHandler();
}
}
},
{
xtype: 'label',
margin: '-1px 0 0 5px',
// for muted effect
cls: 'x-form-item-label-default',
cbind: {
text: '{text}'
}
}
],
@ -327,7 +340,8 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
vm.set('linkCount', 0);
Ext.Array.each(links, link => {
controller.addLink(link['number'], link['value'], link['allowBlank']);
controller.addLink(link['number'], link['value'],
link['allowBlank'], link['text']);
});
},