]>
git.proxmox.com Git - pve-ha-manager.git/blob - src/PVE/HA/Sim/Resources.pm
1 package PVE
::HA
::Sim
::Resources
;
6 use base
qw(PVE::HA::Resources);
8 # provides some base methods for virtual resources (used in simulation/testing).
9 # reduces code reuse and it's targeted for the main PVE service types, namely
10 # virtual machines (VM) and container (CT)
13 my ($class, $id) = @_;
15 die "invalid VMID '$id'\n" if $id !~ m/^[1-9][0-9]+$/;
20 state => { optional
=> 1 },
21 group
=> { optional
=> 1 },
22 comment
=> { optional
=> 1 },
23 max_restart
=> { optional
=> 1 },
24 max_relocate
=> { optional
=> 1 },
29 my ($class, $id, $nodename) = @_;
31 my $service_type = $class->type();
34 return "$nodename/$service_type:$id";
38 my ($class, $haenv, $id) = @_;
40 my $service_type = $class->type();
41 my $nodename = $haenv->nodename();
42 my $hardware = $haenv->hardware();
43 my $ss = $hardware->read_service_status($nodename);
47 $ss->{"$service_type:$id"} = 1;
49 $hardware->write_service_status($nodename, $ss);
54 my ($class, $haenv, $id) = @_;
56 my $service_type = $class->type();
57 my $nodename = $haenv->nodename();
58 my $hardware = $haenv->hardware();
59 my $ss = $hardware->read_service_status($nodename);
63 $ss->{"$service_type:$id"} = 0;
65 $hardware->write_service_status($nodename, $ss);
69 my ($class, $haenv, $id) = @_;
71 my $service_type = $class->type();
72 my $nodename = $haenv->nodename();
73 my $hardware = $haenv->hardware();
75 my $ss = $hardware->read_service_status($nodename);
77 return ($ss->{"$service_type:$id"}) ?
1 : 0;
82 my ($class, $haenv, $id, $target, $online) = @_;
84 my $sid = $class->type() . ":$id";
85 my $nodename = $haenv->nodename();
86 my $hardware = $haenv->hardware();
87 my $ss = $hardware->read_service_status($nodename);
89 my $cmd = $online ?
"migrate" : "relocate";
90 $haenv->log("info", "service $sid - start $cmd to node '$target'");
92 # explicitly shutdown if $online isn't true (relocate)
93 if (!$online && $class->check_running($haenv, $id)) {
94 $haenv->log("info", "stopping service $sid (relocate)");
95 $class->shutdown($haenv, $id);
96 $haenv->log("info", "service status $sid stopped");
98 $haenv->sleep(2); # (live) migration time
101 $hardware->change_service_location($sid, $nodename, $target);
102 $haenv->log("info", "service $sid - end $cmd to node '$target'");
103 # ensure that the old node doesn't has the service anymore
105 $hardware->write_service_status($nodename, $ss);
107 # check if resource really moved
108 return defined($ss->{$sid}) ?
0 : 1;