[pve-devel] [RFC v2 pve-cluster 3/4] use 'name' over 'ring0_addr' and prepare for rrp
Thomas Lamprecht
t.lamprecht at proxmox.com
Wed Oct 7 13:34:59 CEST 2015
Adapt some functions to prefer 'name' subkey over 'ring0_addr'.
Add a function to get a hash representatiion of the totem corosync
config item.
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
data/PVE/CLI/pvecm.pm | 51 +++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 45 insertions(+), 6 deletions(-)
diff --git a/data/PVE/CLI/pvecm.pm b/data/PVE/CLI/pvecm.pm
index c9ebffc..ae39af5 100755
--- a/data/PVE/CLI/pvecm.pm
+++ b/data/PVE/CLI/pvecm.pm
@@ -554,7 +554,7 @@ sub corosync_update_nodelist {
my $children = [];
foreach my $v (values %$nodelist) {
- next if !$v->{ring0_addr};
+ next if !($v->{ring0_addr} || $v->{name});
my $kv = [];
foreach my $k (keys %$v) {
push @$kv, { key => $k, value => $v->{$k} };
@@ -580,22 +580,27 @@ sub corosync_update_nodelist {
sub corosync_nodelist {
my ($conf) = @_;
-
- my $res = {};
my $nodelist = {};
-
+
foreach my $main (@{$conf->{children}}) {
next if !defined($main->{section});
if ($main->{section} eq 'nodelist') {
foreach my $ne (@{$main->{children}}) {
next if !defined($ne->{section}) || ($ne->{section} ne 'node');
my $node = { quorum_votes => 1 };
+ my $name;
foreach my $child (@{$ne->{children}}) {
next if !defined($child->{key});
$node->{$child->{key}} = $child->{value};
- if ($child->{key} eq 'ring0_addr') {
- $nodelist->{$child->{value}} = $node;
+ # use 'name' over 'ring0_addr' if set
+ if ($child->{key} eq 'name') {
+ delete $nodelist->{$name} if $name;
+ $name = $child->{value};
+ $nodelist->{$name} = $node;
+ } elsif(!$name && $child->{key} eq 'ring0_addr') {
+ $name = $child->{value};
+ $nodelist->{$name} = $node;
}
}
}
@@ -605,6 +610,40 @@ sub corosync_nodelist {
return $nodelist;
}
+# get a hash representation of the corosync config totem section
+sub corosync_totem_config {
+ my ($conf) = @_;
+
+ my $res = {};
+
+ foreach my $main (@{$conf->{children}}) {
+ next if !defined($main->{section}) ||
+ $main->{section} ne 'totem';
+
+ foreach my $e (@{$main->{children}}) {
+
+ if ($e->{section} && $e->{section} eq 'interface') {
+ my $entry = {};
+
+ $res->{interface} = {};
+
+ foreach my $child (@{$e->{children}}) {
+ next if !defined($child->{key});
+ $entry->{$child->{key}} = $child->{value};
+ if($child->{key} eq 'ringnumber') {
+ $res->{interface}->{$child->{value}} = $entry;
+ }
+ }
+
+ } elsif ($e->{key}) {
+ $res->{$e->{key}} = $e->{value};
+ }
+ }
+ }
+
+ return $res;
+}
+
__PACKAGE__->register_method ({
name => 'updatecerts',
path => 'updatecerts',
--
2.1.4
More information about the pve-devel
mailing list