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.rei...@proxmox.com>
---
 www/manager6/dc/Cluster.js          | 13 +++++++++----
 www/manager6/dc/ClusterEdit.js      |  9 +++++++--
 www/manager6/dc/CorosyncLinkEdit.js | 18 ++++++++++++++++--
 3 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/www/manager6/dc/Cluster.js b/www/manager6/dc/Cluster.js
index 963da098..3dc1b30c 100644
--- a/www/manager6/dc/Cluster.js
+++ b/www/manager6/dc/Cluster.js
@@ -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')
                        }
diff --git a/www/manager6/dc/ClusterEdit.js b/www/manager6/dc/ClusterEdit.js
index c18b546b..7bcb3880 100644
--- a/www/manager6/dc/ClusterEdit.js
+++ b/www/manager6/dc/ClusterEdit.js
@@ -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
                    };
                });
diff --git a/www/manager6/dc/CorosyncLinkEdit.js 
b/www/manager6/dc/CorosyncLinkEdit.js
index e14ee85f..6dc3a143 100644
--- a/www/manager6/dc/CorosyncLinkEdit.js
+++ b/www/manager6/dc/CorosyncLinkEdit.js
@@ -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']);
        });
     },
 
-- 
2.25.2


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to