]> git.proxmox.com Git - pve-ha-manager.git/commitdiff
groups: encode nodes as hash (internally)
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 16 Jun 2015 07:57:09 +0000 (09:57 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 16 Jun 2015 07:57:09 +0000 (09:57 +0200)
src/PVE/API2/HA/Groups.pm
src/PVE/HA/Groups.pm
src/PVE/HA/Manager.pm

index 0d1032d973097e22d5736415d67d48402bd34efa..e800a32e72cf32672c7143cbeebc84e4940cd46a 100644 (file)
@@ -8,6 +8,7 @@ use PVE::SafeSyslog;
 use PVE::Tools qw(extract_param);
 use PVE::Cluster qw(cfs_read_file cfs_write_file);
 use PVE::HA::Config;
+use PVE::HA::Groups;
 use HTTP::Status qw(:constants);
 use Storable qw(dclone);
 use PVE::JSONSchema qw(get_standard_option);
@@ -27,7 +28,10 @@ my $api_copy_config = sub {
     my $group_cfg = dclone($cfg->{ids}->{$group});
     $group_cfg->{group} = $group;
     $group_cfg->{digest} = $cfg->{digest};
-
+    if ($group_cfg->{nodes}) {
+       $group_cfg->{nodes} = PVE::HA::Groups->encode_value(
+           PVE::HA::Groups::type(), 'nodes', $group_cfg->{nodes});
+    }
     return $group_cfg;
 };
 
index 5fe6e1ae0544ff9b7fe79555c3076a41e651826d..ab2a170ebbbe45447bfe37473c14252581ac491c 100644 (file)
@@ -53,6 +53,34 @@ sub private {
     return $defaultData;
 }
 
+sub decode_value {
+    my ($class, $type, $key, $value) = @_;
+
+    if ($key eq 'nodes') {
+       my $res = {};
+
+       foreach my $node (PVE::Tools::split_list($value)) {
+           if (PVE::JSONSchema::pve_verify_node_name($node)) {
+               $res->{$node} = 1;
+           }
+       }
+
+       return $res;
+    }
+
+   return $value;
+}
+
+sub encode_value {
+    my ($class, $type, $key, $value) = @_;
+    
+    if ($key eq 'nodes') {
+        return join(',', keys(%$value));
+    }
+    
+    return $value;
+}
+
 sub parse_section_header {
     my ($class, $line) = @_;
 
index 9ab1544643e105f4c9bf0e0bb3dec429538990b7..44d9cc8693ceb9de64e6a5d8468f7eb67c50e4d4 100644 (file)
@@ -55,14 +55,14 @@ sub flush_master_status {
 sub select_service_node {
     my ($groups, $online_node_usage, $service_conf, $current_node, $try_next) = @_;
 
-    my $group = { 'nodes' => $service_conf->{node} }; # default group
+    my $group = { 'nodes' => { $service_conf->{node} => 1 } }; # default group
 
     $group =  $groups->{ids}->{$service_conf->{group}} if $service_conf->{group} && 
        $groups->{ids}->{$service_conf->{group}};
 
     my $pri_groups = {};
     my $group_members = {};
-    foreach my $entry (PVE::Tools::split_list($group->{nodes})) {
+    foreach my $entry (keys %{$group->{nodes}}) {
        my ($node, $pri) = ($entry, 0);
        if ($entry =~ m/^(\S+):(\d+)$/) {
            ($node, $pri) = ($1, $2);