]>
git.proxmox.com Git - pve-ha-manager.git/blob - src/PVE/CLI/ha_manager.pm
1 package PVE
::CLI
::ha_manager
;
9 use PVE
::JSONSchema
qw(get_standard_option);
12 use PVE
::RPCEnvironment
;
14 use PVE
::HA
::Env
::PVE2
;
17 use PVE
::API2
::HA
::Resources
;
18 use PVE
::API2
::HA
::Groups
;
19 use PVE
::API2
::HA
::Status
;
21 use base
qw(PVE::CLIHandler);
23 my $nodename = PVE
::INotify
::nodename
();
25 my $timestamp_to_status = sub {
26 my ($ctime, $timestamp) = @_;
28 my $tdiff = $ctime - $timestamp;
30 return "old timestamp - dead?";
31 } elsif ($tdiff < -2) {
32 return "detected time drift!";
38 sub setup_environment
{
39 PVE
::RPCEnvironment-
>setup_default_cli_env();
42 __PACKAGE__-
>register_method ({
46 description
=> "Display HA manger status.",
48 additionalProperties
=> 0,
51 description
=> "Verbose output. Include complete CRM and LRM status (JSON).",
58 returns
=> { type
=> 'null' },
62 my $res = PVE
::API2
::HA
::Status-
>status({});
63 foreach my $e (@$res) {
64 print "$e->{type} $e->{status}\n";
67 if ($param->{verbose
}) {
68 print "full cluster state:\n";
69 my $data = PVE
::API2
::HA
::Status-
>manager_status({});
70 print to_json
($data, { pretty
=> 1, canonical
=> 1} );
77 status
=> [ __PACKAGE__
, 'status'],
78 config
=> [ 'PVE::API2::HA::Resources', 'index', [], {}, sub {
80 foreach my $rec (sort { $a->{sid
} cmp $b->{sid
} } @$res) {
81 my ($type, $name) = split(':', $rec->{sid
}, 2);
82 print "$type:$name\n";
83 foreach my $k (sort keys %$rec) {
84 next if $k eq 'digest' || $k eq 'sid' ||
85 $k eq 'type' || $k eq 'errors';
86 print "\t$k $rec->{$k}\n";
88 if (my $errors = $rec->{errors
}) {
89 foreach my $p (keys %$errors) {
90 warn "error: property '$p' - $errors->{$p}\n";
95 groupconfig
=> [ 'PVE::API2::HA::Groups', 'index', [], {}, sub {
97 foreach my $rec (sort { $a->{group
} cmp $b->{group
} } @$res) {
98 print "group: $rec->{group}\n";
99 foreach my $k (sort keys %$rec) {
100 next if $k eq 'digest' || $k eq 'group' ||
102 print "\t$k $rec->{$k}\n";
106 groupadd
=> [ "PVE::API2::HA::Groups", 'create', ['group'] ],
107 groupremove
=> [ "PVE::API2::HA::Groups", 'delete', ['group'] ],
108 groupset
=> [ "PVE::API2::HA::Groups", 'update', ['group'] ],
110 add
=> [ "PVE::API2::HA::Resources", 'create', ['sid'] ],
111 remove
=> [ "PVE::API2::HA::Resources", 'delete', ['sid'] ],
112 set
=> [ "PVE::API2::HA::Resources", 'update', ['sid'] ],
114 migrate
=> [ "PVE::API2::HA::Resources", 'migrate', ['sid', 'node'] ],
115 relocate
=> [ "PVE::API2::HA::Resources", 'relocate', ['sid', 'node'] ],