mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-05-01 08:05:24 +00:00
add pre- start/stop hookscripts to VMs
this adds a new config option for it, and executes it on four points in time: 'pre-start' 'post-start' 'pre-stop' 'post-stop' on pre-start we abort if the script fails and pre-stop will not be called if the vm crashes or if the vm gets powered off from inside the guest Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
5442d14e6d
commit
9e784b1154
@ -1117,6 +1117,9 @@ my $update_vm_api = sub {
|
||||
if ($param->{$opt} eq '1') {
|
||||
$param->{$opt} = PVE::QemuServer::generate_uuid();
|
||||
}
|
||||
} elsif ($opt eq 'hookscript') {
|
||||
eval { PVE::GuestHelpers::check_hookscript($param->{$opt}, $storecfg); };
|
||||
raise_param_exc({ $opt => $@ }) if $@;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,6 +19,7 @@ use PVE::INotify;
|
||||
use PVE::RPCEnvironment;
|
||||
use PVE::Exception qw(raise_param_exc);
|
||||
use PVE::Network;
|
||||
use PVE::GuestHelpers;
|
||||
use PVE::QemuServer;
|
||||
use PVE::QemuServer::ImportDisk;
|
||||
use PVE::QemuServer::OVF;
|
||||
@ -786,6 +787,7 @@ __PACKAGE__->register_method({
|
||||
# vm was shutdown from inside the guest or crashed, doing api cleanup
|
||||
PVE::QemuServer::vm_stop_cleanup($storecfg, $vmid, $conf, 0, 0);
|
||||
}
|
||||
PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'post-stop');
|
||||
});
|
||||
|
||||
warn "Finished cleanup for $vmid\n";
|
||||
|
@ -30,6 +30,7 @@ use PVE::ProcFSTools;
|
||||
use PVE::QemuConfig;
|
||||
use PVE::QMPClient;
|
||||
use PVE::RPCEnvironment;
|
||||
use PVE::GuestHelpers;
|
||||
use PVE::QemuServer::PCI qw(print_pci_addr print_pcie_addr);
|
||||
use PVE::QemuServer::Memory;
|
||||
use PVE::QemuServer::USB qw(parse_usb_device);
|
||||
@ -614,6 +615,12 @@ EODESCR
|
||||
default => "1 (autogenerated)",
|
||||
optional => 1,
|
||||
},
|
||||
hookscript => {
|
||||
type => 'string',
|
||||
format => 'pve-volume-id',
|
||||
optional => 1,
|
||||
description => "Script that will be executed during various steps in the vms lifetime.",
|
||||
},
|
||||
};
|
||||
|
||||
my $confdesc_cloudinit = {
|
||||
@ -4596,6 +4603,7 @@ my $fast_plug_option = {
|
||||
'description' => 1,
|
||||
'protection' => 1,
|
||||
'vmstatestorage' => 1,
|
||||
'hookscript' => 1,
|
||||
};
|
||||
|
||||
# hotplug changes in [PENDING]
|
||||
@ -5114,6 +5122,8 @@ sub vm_start {
|
||||
}
|
||||
}
|
||||
|
||||
PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'pre-start', 1);
|
||||
|
||||
my ($cmd, $vollist, $spice_port) = config_to_command($storecfg, $vmid, $conf, $defaults, $forcemachine);
|
||||
|
||||
my $migrate_port = 0;
|
||||
@ -5311,6 +5321,7 @@ sub vm_start {
|
||||
property => "guest-stats-polling-interval",
|
||||
value => 2) if (!defined($conf->{balloon}) || $conf->{balloon});
|
||||
|
||||
PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'post-start');
|
||||
});
|
||||
}
|
||||
|
||||
@ -5483,6 +5494,7 @@ sub vm_stop {
|
||||
my $opts = PVE::JSONSchema::pve_parse_startup_order($conf->{startup});
|
||||
$timeout = $opts->{down} if $opts->{down};
|
||||
}
|
||||
PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'pre-stop');
|
||||
}
|
||||
|
||||
$timeout = 60 if !defined($timeout);
|
||||
|
Loading…
Reference in New Issue
Block a user