From: Dietmar Maurer Date: Tue, 16 Jun 2015 07:57:09 +0000 (+0200) Subject: groups: encode nodes as hash (internally) X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=e0a563143c39ce6122e6c999e426a1387fef1fef;p=pve-ha-manager.git groups: encode nodes as hash (internally) --- diff --git a/src/PVE/API2/HA/Groups.pm b/src/PVE/API2/HA/Groups.pm index 0d1032d..e800a32 100644 --- a/src/PVE/API2/HA/Groups.pm +++ b/src/PVE/API2/HA/Groups.pm @@ -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; }; diff --git a/src/PVE/HA/Groups.pm b/src/PVE/HA/Groups.pm index 5fe6e1a..ab2a170 100644 --- a/src/PVE/HA/Groups.pm +++ b/src/PVE/HA/Groups.pm @@ -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) = @_; diff --git a/src/PVE/HA/Manager.pm b/src/PVE/HA/Manager.pm index 9ab1544..44d9cc8 100644 --- a/src/PVE/HA/Manager.pm +++ b/src/PVE/HA/Manager.pm @@ -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);