]> git.proxmox.com Git - pve-ha-manager.git/blob - PVE/HA/Env.pm
add service_state to track VM locations with SimEnv
[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
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 return PVE::Tools::file_read_firstline("$self->{statusdir}/local_status");
34 }
35
36 sub write_local_status {
37 my ($self, $status) = @_;
38
39 PVE::Tools::file_set_contents("$self->{statusdir}/local_status", $status);
40 }
41
42 # manager status is stored on cluster, protected by ha_manager_lock
43 sub read_manager_status {
44 my ($self) = @_;
45
46 die "implement me";
47
48 return {};
49 }
50
51 sub write_manager_status {
52 my ($self, $status_obj) = @_;
53
54 die "implement me";
55 }
56
57 # we use this to enable/disbale ha
58 sub manager_status_exists {
59 my ($self) = @_;
60
61 die "implement me";
62
63 return {};
64 }
65
66 sub parse_service_config {
67 my ($self, $raw) = @_;
68
69 die "implement me";
70
71 return {};
72 }
73
74 sub read_service_config {
75 my ($self) = @_;
76
77 die "implement me";
78
79 return {};
80 }
81
82 # this should return a hash containing info
83 # what nodes are members and online.
84 sub get_node_info {
85 my ($self) = @_;
86
87 die "implement me";
88
89 # return { node1 => { online => 1, join_time => X }, node2 => ... }
90 }
91
92 sub log {
93 my ($self, $level, $msg) = @_;
94
95 syslog($level, $msg);
96 }
97
98 # aquire a cluster wide lock
99 sub get_ha_manager_lock {
100 my ($self) = @_;
101
102 die "implement me";
103 }
104
105 # return true when cluster is quorate
106 sub quorate {
107 my ($self) = @_;
108
109 die "implement me";
110 }
111
112 # return current time
113 # overwrite that if you want to simulate
114 sub get_time {
115 my ($self) = @_;
116
117 return time();
118 }
119
120 sub sleep {
121 my ($self, $delay) = @_;
122
123 sleep($delay);
124 }
125
126 sub loop_start_hook {
127 my ($self) = @_;
128
129 # do nothing
130 }
131
132 sub loop_end_hook {
133 my ($self) = @_;
134
135 # do nothing
136 }
137
138
139 1;