]>
git.proxmox.com Git - pve-ha-manager.git/blob - src/PVE/HA/Resources.pm
1 package PVE
::HA
::Resources
;
7 use PVE
::JSONSchema
qw(get_standard_option);
8 use PVE
::SectionConfig
;
11 use base
qw(PVE::SectionConfig);
15 type
=> { description
=> "Resource type.", optional
=> 1 },
16 sid
=> get_standard_option
('pve-ha-resource-or-vm-id',
17 { completion
=> \
&PVE
::HA
::Tools
::complete_sid
}),
19 description
=> "Resource state.",
21 enum
=> ['enabled', 'disabled'],
25 group
=> get_standard_option
('pve-ha-group-id',
27 completion
=> \
&PVE
::HA
::Tools
::complete_group
}),
29 description
=> "Maximal number of tries to restart the service on".
30 " a node after its start failed.",
37 description
=> "Maximal number of service relocate tries when a".
38 " service failes to start.",
45 description
=> "Description.",
54 my ($class, $name) = @_;
56 die "implement this in subclass";
63 sub format_section_header
{
64 my ($class, $type, $sectionId) = @_;
66 my (undef, $name) = split(':', $sectionId, 2);
68 return "$type: $name\n";
71 sub parse_section_header
{
72 my ($class, $line) = @_;
74 if ($line =~ m/^(\S+):\s*(\S+)\s*$/) {
75 my ($type, $name) = (lc($1), $2);
76 my $errmsg = undef; # set if you want to skip whole section
78 if (my $plugin = $defaultData->{plugins
}->{$type}) {
79 $plugin->verify_name($name);
81 die "no such resource type '$type'\n";
85 my $config = {}; # to return additional attributes
86 return ($type, "$type:$name", $errmsg, $config);
92 my ($class, $haenv, $params) = @_;
94 die "implement in subclass";
98 my ($class, $haenv, $param) = @_;
100 die "implement in subclass";
104 my ($class, $haenv, $params) = @_;
106 die "implement in subclass";
110 my ($class, $id, $nodename) = @_;
112 die "implement in subclass"
116 my ($class, $id, $noerr) = @_;
118 die "implement in subclass"
122 my ($class, $id) = @_;
124 die "implement in subclass";
128 # virtual machine resource class
129 package PVE
::HA
::Resources
::PVEVM
;
137 use base
qw(PVE::HA::Resources);
144 my ($class, $name) = @_;
146 die "invalid VMID\n" if $name !~ m/^[1-9][0-9]+$/;
151 state => { optional
=> 1 },
152 group
=> { optional
=> 1 },
153 comment
=> { optional
=> 1 },
154 max_restart
=> { optional
=> 1 },
155 max_relocate
=> { optional
=> 1 },
160 my ($class, $vmid, $nodename) = @_;
162 return PVE
::QemuServer
::config_file
($vmid, $nodename);
166 my ($class, $vmid, $noerr) = @_;
168 my $vmlist = PVE
::Cluster
::get_vmlist
();
170 if(!defined($vmlist->{ids
}->{$vmid})) {
171 die "resource 'vm:$vmid' does not exists in cluster\n" if !$noerr;
179 my ($class, $haenv, $params) = @_;
181 my $upid = PVE
::API2
::Qemu-
>vm_start($params);
182 $haenv->upid_wait($upid);
186 my ($class, $haenv, $param) = @_;
188 my $upid = PVE
::API2
::Qemu-
>vm_shutdown($param);
189 $haenv->upid_wait($upid);
194 my ($class, $haenv, $params) = @_;
196 my $upid = PVE
::API2
::Qemu-
>migrate_vm($params);
197 $haenv->upid_wait($upid);
201 my ($class, $vmid) = @_;
203 return PVE
::QemuServer
::check_running
($vmid, 1);
207 # container resource class
208 package PVE
::HA
::Resources
::PVECT
;
215 use PVE
::API2
::LXC
::Status
;
217 use base
qw(PVE::HA::Resources);
224 my ($class, $name) = @_;
226 die "invalid VMID\n" if $name !~ m/^[1-9][0-9]+$/;
231 state => { optional
=> 1 },
232 group
=> { optional
=> 1 },
233 comment
=> { optional
=> 1 },
234 max_restart
=> { optional
=> 1 },
235 max_relocate
=> { optional
=> 1 },
240 my ($class, $vmid, $nodename) = @_;
242 return PVE
::LXC
::config_file
($vmid, $nodename);
246 my ($class, $vmid, $noerr) = @_;
248 my $vmlist = PVE
::Cluster
::get_vmlist
();
250 if(!defined($vmlist->{ids
}->{$vmid})) {
251 die "resource 'ct:$vmid' does not exists in cluster\n" if !$noerr;
259 my ($class, $haenv, $params) = @_;
261 my $upid = PVE
::API2
::LXC
::Status-
>vm_start($params);
262 $haenv->upid_wait($upid);
266 my ($class, $haenv, $params) = @_;
268 my $upid = PVE
::API2
::LXC
::Status-
>vm_shutdown($params);
269 $haenv->upid_wait($upid);
273 my ($class, $haenv, $params) = @_;
275 my $upid = PVE
::API2
::LXC-
>migrate_vm($params);
276 $haenv->upid_wait($upid);
280 my ($class, $vmid) = @_;
282 return PVE
::LXC
::check_running
($vmid);
286 # package PVE::HA::Resources::IPAddr;
290 # use PVE::Tools qw($IPV4RE $IPV6RE);
292 # use base qw(PVE::HA::Resources);
299 # my ($class, $name) = @_;
301 # die "invalid IP address\n" if $name !~ m!^$IPV6RE|$IPV4RE$!;
306 # state => { optional => 1 },
307 # group => { optional => 1 },
308 # comment => { optional => 1 },