]>
git.proxmox.com Git - pve-ha-manager.git/blob - src/PVE/HA/Resources/PVECT.pm
1 package PVE
::HA
::Resources
::PVECT
;
11 if (!$ENV{PVE_GENERATING_DOCS
}) {
14 require PVE
::LXC
::Config
;
15 import PVE
::LXC
::Config
;
16 require PVE
::API2
::LXC
;
17 import PVE
::API2
::LXC
;
18 require PVE
::API2
::LXC
::Status
;
19 import PVE
::API2
::LXC
::Status
;
23 use base
qw(PVE::HA::Resources);
30 my ($class, $name) = @_;
32 die "invalid VMID\n" if $name !~ m/^[1-9][0-9]+$/;
37 state => { optional
=> 1 },
38 group
=> { optional
=> 1 },
39 comment
=> { optional
=> 1 },
40 max_restart
=> { optional
=> 1 },
41 max_relocate
=> { optional
=> 1 },
46 my ($class, $vmid, $nodename) = @_;
48 return PVE
::LXC
::Config-
>config_file($vmid, $nodename);
52 my ($class, $vmid, $noerr) = @_;
54 my $vmlist = PVE
::Cluster
::get_vmlist
();
56 if(!defined($vmlist->{ids
}->{$vmid})) {
57 die "resource 'ct:$vmid' does not exist in cluster\n" if !$noerr;
65 my ($class, $haenv, $id) = @_;
67 my $nodename = $haenv->nodename();
74 my $upid = PVE
::API2
::LXC
::Status-
>vm_start($params);
75 PVE
::HA
::Tools
::upid_wait
($upid, $haenv);
79 my ($class, $haenv, $id, $timeout) = @_;
81 my $nodename = $haenv->nodename();
82 my $shutdown_timeout = $timeout // 60;
90 if ($shutdown_timeout) {
91 $params->{timeout
} = $shutdown_timeout;
92 $upid = PVE
::API2
::LXC
::Status-
>vm_shutdown($params);
94 $upid = PVE
::API2
::LXC
::Status-
>vm_stop($params);
97 PVE
::HA
::Tools
::upid_wait
($upid, $haenv);
101 my ($class, $haenv, $id, $target, $online) = @_;
103 my $nodename = $haenv->nodename();
109 online
=> 0, # we cannot migrate CT (yet) online, only relocate
112 # always relocate container for now
113 if ($class->check_running($haenv, $id)) {
114 $class->shutdown($haenv, $id);
117 my $oldconfig = $class->config_file($id, $nodename);
119 my $upid = PVE
::API2
::LXC-
>migrate_vm($params);
120 PVE
::HA
::Tools
::upid_wait
($upid, $haenv);
122 # check if vm really moved
123 return !(-f
$oldconfig);
127 my ($class, $haenv, $vmid) = @_;
129 return PVE
::LXC
::check_running
($vmid);
133 my ($self, $haenv, $id, $locks, $service_node) = @_;
135 $service_node = $service_node || $haenv->nodename();
137 my $conf = PVE
::LXC
::Config-
>load_config($id, $service_node);
139 return undef if !defined($conf->{lock});
141 foreach my $lock (@$locks) {
142 if ($conf->{lock} eq $lock) {
143 delete $conf->{lock};
145 my $cfspath = PVE
::LXC
::Config-
>cfs_config_path($id, $service_node);
146 PVE
::Cluster
::cfs_write_file
($cfspath, $conf);
155 sub get_static_stats
{
156 my ($class, $haenv, $id, $service_node) = @_;
158 my $conf = PVE
::LXC
::Config-
>load_config($id, $service_node);
161 maxcpu
=> PVE
::LXC
::Config-
>get_derived_property($conf, 'max-cpu'),
162 maxmem
=> PVE
::LXC
::Config-
>get_derived_property($conf, 'max-memory'),