[pve-devel] [PATCH v3 pve-cluster 3/4] use 'name' over 'ring0_addr' and prepare for rrp

Thomas Lamprecht t.lamprecht at proxmox.com
Fri Oct 9 18:49:38 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