[pve-devel] [RFC cluster 3/6] cluster create: use new corosync-link format for totem interfaces
Thomas Lamprecht
t.lamprecht at proxmox.com
Tue May 28 18:33:10 CEST 2019
Preperation for enhanced compatibillity with new corosync 3/knet
transport. Pretty straight forward switch from ringX_addr to links,
*but*, for configuration backward compatibillity corosync still uses
ringX_addr as "link address", this will surely add confusion"link
address", this will surely add confusion ...
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
data/PVE/API2/ClusterConfig.pm | 16 ++-------------
data/PVE/Corosync.pm | 37 +++++++++++++++++-----------------
2 files changed, 20 insertions(+), 33 deletions(-)
diff --git a/data/PVE/API2/ClusterConfig.pm b/data/PVE/API2/ClusterConfig.pm
index e7142b5..8b1fdbe 100644
--- a/data/PVE/API2/ClusterConfig.pm
+++ b/data/PVE/API2/ClusterConfig.pm
@@ -95,20 +95,8 @@ __PACKAGE__->register_method ({
minimum => 1,
optional => 1,
},
- bindnet0_addr => {
- type => 'string', format => 'ip',
- description => "This specifies the network address the corosync ring 0".
- " executive should bind to and defaults to the local IP address of the node.",
- optional => 1,
- },
- ring0_addr => get_standard_option('corosync-ring0-addr'),
- bindnet1_addr => {
- type => 'string', format => 'ip',
- description => "This specifies the network address the corosync ring 1".
- " executive should bind to and is optional.",
- optional => 1,
- },
- ring1_addr => get_standard_option('corosync-ring1-addr'),
+ link0 => get_standard_option('corosync-link'),
+ link1 => get_standard_option('corosync-link'),
},
},
returns => { type => 'string' },
diff --git a/data/PVE/Corosync.pm b/data/PVE/Corosync.pm
index fea7258..8752c64 100644
--- a/data/PVE/Corosync.pm
+++ b/data/PVE/Corosync.pm
@@ -202,12 +202,14 @@ sub create_conf {
my $votes = $param{votes} || 1;
my $local_ip_address = PVE::Cluster::remote_node_ip($nodename);
- my $ring0_addr = $param{ring0_addr} // $local_ip_address;
- my $bindnet0_addr = $param{bindnet0_addr} // $ring0_addr;
- my $use_ipv6 = ip_is_ipv6($ring0_addr);
- die "ring 0 addresses must be from same IP family!\n"
- if $use_ipv6 != ip_is_ipv6($bindnet0_addr);
+ my $link0 = PVE::Cluster::parse_corosync_link($param{link0});
+ $link0->{address} //= $local_ip_address;
+ $link0->{bindnet} //= $local_ip_address;
+
+ my $use_ipv6 = ip_is_ipv6($link0->{address});
+ die "link 0 addresses must be from same IP family!\n"
+ if $use_ipv6 != ip_is_ipv6($link0->{bindnet});
my $conf = {
totem => {
@@ -218,7 +220,7 @@ sub create_conf {
ip_version => $use_ipv6 ? 'ipv6' : 'ipv4',
interface => {
0 => {
- bindnetaddr => $bindnet0_addr,
+ bindnetaddr => $link0->{bindnet},
linknumber => 0,
},
},
@@ -229,7 +231,7 @@ sub create_conf {
name => $nodename,
nodeid => $nodeid,
quorum_votes => $votes,
- ring0_addr => $ring0_addr,
+ ring0_addr => $link0->{address},
},
},
},
@@ -242,23 +244,20 @@ sub create_conf {
},
};
- die "Param bindnet1_addr set but ring1_addr not specified!\n"
- if (defined($param{bindnet1_addr}) && !defined($param{ring1_addr}));
+ my $link1 = PVE::Cluster::parse_corosync_link($param{link1});
+ $link1->{bindnet} //= $link1->{address};
- my $ring1_addr = $param{ring1_addr};
- my $bindnet1_addr = $param{bindnet1_addr} // $param{ring1_addr};
-
- if ($bindnet1_addr) {
- die "ring 1 addresses must be from same IP family as ring 0!\n"
- if $use_ipv6 != ip_is_ipv6($bindnet1_addr) ||
- $use_ipv6 != ip_is_ipv6($ring1_addr);
+ if ($link1->{bindnet}) {
+ die "link 1 addresses must be from same IP family as link 0!\n"
+ if $use_ipv6 != ip_is_ipv6($link1->{address}) ||
+ $use_ipv6 != ip_is_ipv6($link1->{bindnet});
$conf->{totem}->{interface}->{1} = {
- bindnetaddr => $bindnet1_addr,
+ bindnetaddr => $link1->{bindnet},
linknumber => 1,
};
- $conf->{totem}->{rrp_mode} = 'passive';
- $conf->{nodelist}->{node}->{$nodename}->{ring1_addr} = $ring1_addr;
+ $conf->{totem}->{link_mode} = 'passive';
+ $conf->{nodelist}->{node}->{$nodename}->{ring1_addr} = $link1->{address};
}
return { main => $conf };
--
2.20.1
More information about the pve-devel
mailing list