]> git.proxmox.com Git - pve-ha-manager.git/blame - src/PVE/HA/Resources/PVECT.pm
add after_fork method to HA environment and use it in LRM
[pve-ha-manager.git] / src / PVE / HA / Resources / PVECT.pm
CommitLineData
21ce53c3
TL
1package PVE::HA::Resources::PVECT;
2
3use strict;
4use warnings;
5
6use PVE::LXC;
7use PVE::API2::LXC;
8use PVE::API2::LXC::Status;
9
10use base qw(PVE::HA::Resources);
11
12sub type {
13 return 'ct';
14}
15
16sub verify_name {
17 my ($class, $name) = @_;
18
19 die "invalid VMID\n" if $name !~ m/^[1-9][0-9]+$/;
20}
21
22sub options {
23 return {
24 state => { optional => 1 },
25 group => { optional => 1 },
26 comment => { optional => 1 },
27 max_restart => { optional => 1 },
28 max_relocate => { optional => 1 },
29 };
30}
31
32sub config_file {
33 my ($class, $vmid, $nodename) = @_;
34
35 return PVE::LXC::config_file($vmid, $nodename);
36}
37
38sub exists {
39 my ($class, $vmid, $noerr) = @_;
40
41 my $vmlist = PVE::Cluster::get_vmlist();
42
43 if(!defined($vmlist->{ids}->{$vmid})) {
44 die "resource 'ct:$vmid' does not exists in cluster\n" if !$noerr;
45 return undef;
46 } else {
47 return 1;
48 }
49}
50
51sub start {
52 my ($class, $haenv, $id) = @_;
53
54 my $nodename = $haenv->nodename();
55
56 my $params = {
57 node => $nodename,
58 vmid => $id
59 };
60
61 my $upid = PVE::API2::LXC::Status->vm_start($params);
62 $haenv->upid_wait($upid);
63}
64
65sub shutdown {
66 my ($class, $haenv, $id) = @_;
67
68 my $nodename = $haenv->nodename();
69 my $shutdown_timeout = 60; # fixme: make this configurable
70
71 my $params = {
72 node => $nodename,
73 vmid => $id,
74 timeout => $shutdown_timeout,
75 forceStop => 1,
76 };
77
78 my $upid = PVE::API2::LXC::Status->vm_shutdown($params);
79 $haenv->upid_wait($upid);
80}
81
82sub migrate {
83 my ($class, $haenv, $id, $target, $online) = @_;
84
85 my $nodename = $haenv->nodename();
86
87 my $params = {
88 node => $nodename,
89 vmid => $id,
90 target => $target,
91 online => 0, # we cannot migrate CT (yet) online, only relocate
92 };
93
94 # always relocate container for now
0d5906f3 95 if ($class->check_running($haenv, $id)) {
21ce53c3
TL
96 $class->shutdown($haenv, $id);
97 }
98
99 my $upid = PVE::API2::LXC->migrate_vm($params);
100 $haenv->upid_wait($upid);
101}
102
103sub check_running {
0d5906f3 104 my ($class, $haenv, $vmid) = @_;
21ce53c3
TL
105
106 return PVE::LXC::check_running($vmid);
107}
108
1091;