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);
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;
};
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) = @_;
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);