]> git.proxmox.com Git - pve-ha-manager.git/blob - PVE/HA/Env.pm
fix loop_count
[pve-ha-manager.git] / PVE / HA / Env.pm
1 package PVE::HA::Env;
2
3 use strict;
4 use warnings;
5
6 use PVE::SafeSyslog;
7 use PVE::Tools;
8
9 # abstract out the cluster environment for a single node
10
11 sub new {
12 my ($this, $statusdir, $nodename) = @_;
13
14 my $class = ref($this) || $this;
15
16 my $self = bless {
17 statusdir => $statusdir,
18 nodename => $nodename,
19 }, $class;
20
21 return $self;
22 }
23
24 sub nodename {
25 my ($self) = @_;
26
27 return $self->{nodename};
28 }
29
30 sub read_local_status {
31 my ($self) = @_;
32
33 my $node = $self->{nodename};
34 my $filename = "$self->{statusdir}/local_status_$node";
35 return PVE::Tools::file_read_firstline($filename);
36 }
37
38 sub write_local_status {
39 my ($self, $status) = @_;
40
41 my $node = $self->{nodename};
42 my $filename = "$self->{statusdir}/local_status_$node";
43 PVE::Tools::file_set_contents($filename, $status);
44 }
45
46 # manager status is stored on cluster, protected by ha_manager_lock
47 sub read_manager_status {
48 my ($self) = @_;
49
50 die "implement me";
51
52 return {};
53 }
54
55 sub write_manager_status {
56 my ($self, $status_obj) = @_;
57
58 die "implement me";
59 }
60
61 # we use this to enable/disbale ha
62 sub manager_status_exists {
63 my ($self) = @_;
64
65 die "implement me";
66
67 return {};
68 }
69
70 sub parse_service_config {
71 my ($self, $raw) = @_;
72
73 die "implement me";
74
75 return {};
76 }
77
78 sub read_service_config {
79 my ($self) = @_;
80
81 die "implement me";
82
83 return {};
84 }
85
86 # this should return a hash containing info
87 # what nodes are members and online.
88 sub get_node_info {
89 my ($self) = @_;
90
91 die "implement me";
92
93 # return { node1 => { online => 1 }, node2 => ... }
94 }
95
96 sub log {
97 my ($self, $level, @args) = @_;
98
99 syslog($level, @args);
100 }
101
102 # aquire a cluster wide lock
103 sub get_ha_manager_lock {
104 my ($self) = @_;
105
106 die "implement me";
107 }
108
109 # return true when cluster is quorate
110 sub quorate {
111 my ($self) = @_;
112
113 die "implement me";
114 }
115
116 # return current time
117 # overwrite that if you want to simulate
118 sub get_time {
119 my ($self) = @_;
120
121 return time();
122 }
123
124 sub sleep {
125 my ($self, $delay) = @_;
126
127 sleep($delay);
128 }
129
130 sub sleep_until {
131 my ($self, $end_time) = @_;
132
133 for (;;) {
134 my $cur_time = $self->get_time();
135 return if $cur_time >= $end_time;
136 $self->sleep($end_time - $cur_time);
137 }
138 }
139
140 sub loop_start_hook {
141 my ($self) = @_;
142
143 # do nothing
144 }
145
146 sub loop_end_hook {
147 my ($self) = @_;
148
149 # do nothing
150 }
151
152
153 1;