]> git.proxmox.com Git - pve-ha-manager.git/blame - PVE/HA/Env/PVE2.pm
improve LRM log messages
[pve-ha-manager.git] / PVE / HA / Env / PVE2.pm
CommitLineData
714a4016
DM
1package PVE::HA::Env::PVE2;
2
3use strict;
4use warnings;
5
6use PVE::SafeSyslog;
7use PVE::Tools;
4d24e7db 8use PVE::Cluster;
714a4016
DM
9
10use PVE::HA::Tools;
11use PVE::HA::Env;
12
13my $manager_status_filename = "/etc/pve/manager_status";
14
15sub new {
16 my ($this, $nodename) = @_;
17
18 die "missing nodename" if !$nodename;
19
20 my $class = ref($this) || $this;
21
22 my $self = bless {}, $class;
23
24 $self->{nodename} = $nodename;
25
26 return $self;
27}
28
29sub nodename {
30 my ($self) = @_;
31
32 return $self->{nodename};
33}
34
35sub read_manager_status {
36 my ($self) = @_;
37
38 my $filename = $manager_status_filename;
39
40 return PVE::HA::Tools::read_json_from_file($filename, {});
41}
42
43sub write_manager_status {
44 my ($self, $status_obj) = @_;
45
46 my $filename = $manager_status_filename;
47
48 PVE::HA::Tools::write_json_to_file($filename, $status_obj);
49}
50
c4a221bc
DM
51sub read_lrm_status {
52 my ($self, $node) = @_;
53
54 $node = $self->{nodename} if !defined($node);
55
56 my $filename = "/etc/pve/nodes/$node/lrm_status";
57
58 return PVE::HA::Tools::read_json_from_file($filename, {});
59}
60
61sub write_lrm_status {
62 my ($self, $status_obj) = @_;
63
64 $node = $self->{nodename};
65
66 my $filename = "/etc/pve/nodes/$node/lrm_status";
67
68 PVE::HA::Tools::write_json_to_file($filename, $status_obj);
69}
70
714a4016
DM
71sub manager_status_exists {
72 my ($self) = @_;
73
74 return -f $manager_status_filename ? 1 : 0;
75}
76
77sub read_service_config {
78 my ($self) = @_;
79
80 die "implement me";
81}
82
8456bde2
DM
83sub change_service_location {
84 my ($self, $sid, $node) = @_;
85
86 die "implement me";
87}
88
714a4016
DM
89# this should return a hash containing info
90# what nodes are members and online.
91sub get_node_info {
92 my ($self) = @_;
93
94 die "implement me";
95}
96
97sub log {
98 my ($self, $level, $msg) = @_;
99
100 chomp $msg;
101
102 syslog($level, $msg);
103}
104
105sub get_ha_manager_lock {
106 my ($self) = @_;
107
4d24e7db
DM
108 my $lockid = "ha_manager";
109
110 my $lockdir = "/etc/pve/priv/lock";
111 my $filename = "$lockdir/$lockid";
112
113 my $res = 0;
114
115 eval {
116
117 mkdir $lockdir;
118
119 return if ! -d $lockdir; # pve cluster filesystem not online
120
121 # fixme: ?
122 };
123
124 return $res;
714a4016
DM
125}
126
127sub get_ha_agent_lock {
128 my ($self) = @_;
129
130 die "implement me";
131}
132
133sub test_ha_agent_lock {
134 my ($self, $node) = @_;
135
136 die "implement me";
137}
138
139sub quorate {
140 my ($self) = @_;
141
4d24e7db
DM
142 my $quorate = 0;
143 eval {
144 $quorate = PVE::Cluster::check_cfs_quorum();
145 };
146
147 return $quorate;
714a4016
DM
148}
149
150sub get_time {
151 my ($self) = @_;
152
153 return time();
154}
155
156sub sleep {
157 my ($self, $delay) = @_;
158
159 CORE::sleep($delay);
160}
161
162sub sleep_until {
163 my ($self, $end_time) = @_;
164
165 for (;;) {
166 my $cur_time = time();
167
168 last if $cur_time >= $end_time;
169
170 $self->sleep(1);
171 }
172}
173
174sub loop_start_hook {
175 my ($self) = @_;
176
4d24e7db
DM
177 PVE::Cluster::cfs_update();
178
714a4016
DM
179 $self->{loop_start} = $self->get_time();
180}
181
182sub loop_end_hook {
183 my ($self) = @_;
184
185 my $delay = $self->get_time() - $self->{loop_start};
186
187 warn "loop take too long ($delay seconds)\n" if $delay > 30;
188}
189
190sub watchdog_open {
191 my ($self) = @_;
192
193 # Note: when using /dev/watchdog, make sure perl does not close
194 # the handle automatically at exit!!
195
196 die "implement me";
197}
198
199sub watchdog_update {
200 my ($self, $wfh) = @_;
201
202 die "implement me";
203}
204
205sub watchdog_close {
206 my ($self, $wfh) = @_;
207
208 die "implement me";
209}
210
c4a221bc
DM
211sub exec_resource_agent {
212 my ($self, $sid, $cmd, @params) = @_;
213
214 die "implement me";
215}
216
714a4016 2171;