--- /dev/null
+package PVE::API2::HA::Groups;
+
+use strict;
+use warnings;
+
+use PVE::SafeSyslog;
+use PVE::Tools qw(extract_param);
+use PVE::Cluster qw(cfs_read_file cfs_write_file);
+use PVE::HA::Config;
+use HTTP::Status qw(:constants);
+use Storable qw(dclone);
+use PVE::JSONSchema qw(get_standard_option);
+use PVE::RPCEnvironment;
+
+use PVE::RESTHandler;
+
+use base qw(PVE::RESTHandler);
+
+# fixme: use cfs_read_file
+
+my $ha_groups_config = "/etc/pve/ha/groups.cfg";
+
+# fixme: fix permissions
+
+my $api_copy_config = sub {
+ my ($cfg, $sid) = @_;
+
+ my $scfg = dclone($cfg->{ids}->{$sid});
+ $scfg->{group} = $sid;
+ $scfg->{digest} = $cfg->{digest};
+
+ return $scfg;
+};
+
+__PACKAGE__->register_method ({
+ name => 'index',
+ path => '',
+ method => 'GET',
+ description => "Get HA groups.",
+ parameters => {
+ additionalProperties => 0,
+ properties => {},
+ },
+ returns => {
+ type => 'array',
+ items => {
+ type => "object",
+ properties => { group => { type => 'string'} },
+ },
+ links => [ { rel => 'child', href => "{group}" } ],
+ },
+ code => sub {
+ my ($param) = @_;
+
+ my $raw = '';
+
+ $raw = PVE::Tools::file_get_contents($ha_groups_config)
+ if -f $ha_groups_config;
+
+ my $cfg = PVE::HA::Config::parse_groups_config($ha_groups_config, $raw);
+
+ my $res = [];
+ foreach my $sid (keys %{$cfg->{ids}}) {
+ my $scfg = &$api_copy_config($cfg, $sid);
+ next if $scfg->{type} ne 'group'; # should not happen
+ push @$res, $scfg;
+ }
+
+ return $res;
+ }});
+
+
+1;
-SOURCES=Resources.pm
+SOURCES=Resources.pm Groups.pm
.PHONY: install
install:
sub parse_groups_config {
my ($filename, $raw) = @_;
- return PVE::HA::Groups->parse_config($filename, $raw);
+ return PVE::HA::Groups->parse_config($filename, $raw);
}
sub parse_resources_config {
use PVE::Cluster;
use PVE::API2::HA::Resources;
+use PVE::API2::HA::Groups;
use base qw(PVE::CLIHandler);
test => [ __PACKAGE__, 'test', []],
config => [ 'PVE::API2::HA::Resources', 'index', [], {}, sub {
my $res = shift;
- foreach my $rec (@$res) {
+ foreach my $rec (sort { $a->{name} cmp $b->{name} } @$res) {
print "$rec->{type}: $rec->{name}\n";
- foreach my $k (keys %$rec) {
+ foreach my $k (sort keys %$rec) {
next if $k eq 'digest' || $k eq 'sid' ||
$k eq 'type' || $k eq 'name';
print "\t$k $rec->{$k}\n";
}
print "\n";
}}],
+ groups => [ 'PVE::API2::HA::Groups', 'index', [], {}, sub {
+ my $res = shift;
+ foreach my $rec (sort { $a->{group} cmp $b->{group} } @$res) {
+ print "group: $rec->{group}\n";
+ foreach my $k (sort keys %$rec) {
+ next if $k eq 'digest' || $k eq 'group' ||
+ $k eq 'type';
+ print "\t$k $rec->{$k}\n";
+ }
+ print "\n";
+ }}],
};
my $cmd = shift;