]>
git.proxmox.com Git - pve-ha-manager.git/blob - src/PVE/HA/Config.pm
a9913da6e264f5392e4b4774a653b6f7bcb44893
1 package PVE
::HA
::Config
;
9 use PVE
::HA
::Resources
;
10 use PVE
::Cluster
qw(cfs_register_file cfs_read_file cfs_write_file cfs_lock_file);
12 PVE
::HA
::Groups-
>register();
14 PVE
::HA
::Groups-
>init();
16 PVE
::HA
::Resources
::PVEVM-
>register();
17 PVE
::HA
::Resources
::PVECT-
>register();
18 #PVE::HA::Resources::IPAddr->register();
20 PVE
::HA
::Resources-
>init();
22 my $manager_status_filename = "ha/manager_status";
23 my $ha_groups_config = "ha/groups.cfg";
24 my $ha_resources_config = "ha/resources.cfg";
25 my $crm_commands_filename = "ha/crm_commands";
27 cfs_register_file
($crm_commands_filename,
28 sub { my ($fn, $raw) = @_; return defined($raw) ?
$raw : ''; },
29 sub { my ($fn, $raw) = @_; return $raw; });
30 cfs_register_file
($ha_groups_config,
31 sub { PVE
::HA
::Groups-
>parse_config(@_); },
32 sub { PVE
::HA
::Groups-
>write_config(@_); });
33 cfs_register_file
($ha_resources_config,
34 sub { PVE
::HA
::Resources-
>parse_config(@_); },
35 sub { PVE
::HA
::Resources-
>write_config(@_); });
36 cfs_register_file
($manager_status_filename,
41 my ($filename, $data) = @_;
43 return defined($data) ? decode_json
($data) : {};
47 my ($filename, $data) = @_;
49 return encode_json
($data);
55 die "undefined node" if !defined($node);
57 my $filename = "/etc/pve/nodes/$node/lrm_status";
59 return PVE
::HA
::Tools
::read_json_from_file
($filename, {});
62 sub write_lrm_status
{
63 my ($node, $status_obj) = @_;
65 die "undefined node" if !defined($node);
67 my $filename = "/etc/pve/nodes/$node/lrm_status";
69 PVE
::HA
::Tools
::write_json_to_file
($filename, $status_obj);
72 sub parse_groups_config
{
73 my ($filename, $raw) = @_;
75 return PVE
::HA
::Groups-
>parse_config($filename, $raw);
78 sub parse_resources_config
{
79 my ($filename, $raw) = @_;
81 return PVE
::HA
::Resources-
>parse_config($filename, $raw);
84 sub resources_config_exists
{
86 return (-f
"/etc/pve/$ha_resources_config") ?
1 : 0;
89 sub read_resources_config
{
91 return cfs_read_file
($ha_resources_config);
94 sub read_group_config
{
96 return cfs_read_file
($ha_groups_config);
99 sub write_group_config
{
102 cfs_write_file
($ha_groups_config, $cfg);
105 sub write_resources_config
{
108 cfs_write_file
($ha_resources_config, $cfg);
111 sub read_manager_status
{
114 return cfs_read_file
($manager_status_filename);
117 sub write_manager_status
{
118 my ($status_obj) = @_;
120 cfs_write_file
($manager_status_filename, $status_obj);
124 my ($code, $errmsg) = @_;
126 # fixme: do not use cfs_lock_storage (replace with cfs_lock_ha)
127 my $res = PVE
::Cluster
::cfs_lock_storage
("_ha_crm_commands", undef, $code);
130 $errmsg ?
die "$errmsg: $err" : die $err;
135 sub queue_crm_commands
{
141 my $data = cfs_read_file
($crm_commands_filename);
143 cfs_write_file
($crm_commands_filename, $data);
146 return lock_ha_config
($code);
149 sub read_crm_commands
{
152 my $data = cfs_read_file
($crm_commands_filename);
153 cfs_write_file
($crm_commands_filename, '');
157 return lock_ha_config
($code);
160 sub vm_is_ha_managed
{
163 my $conf = cfs_read_file
($ha_resources_config);
165 my $types = PVE
::HA
::Resources-
>lookup_types();
166 foreach my $type (@$types) {
167 my $sid = "$type:$vmid";
169 return 1 if defined($conf->{ids
}->{$sid});