X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=src%2Flxc-pve-poststop-hook;h=6f370885fda648603f4aadb52d33ce573ddfb157;hb=d250604fbed41dcaad96193559f029dc2aaff974;hp=f23237a13a9e83da4af5fb004cc0cf1b00dbf9b1;hpb=2914ad9b1d577baede7f9ea13f2a8e63f9f12dec;p=pve-container.git diff --git a/src/lxc-pve-poststop-hook b/src/lxc-pve-poststop-hook index f23237a..6f37088 100755 --- a/src/lxc-pve-poststop-hook +++ b/src/lxc-pve-poststop-hook @@ -1,7 +1,12 @@ #!/usr/bin/perl +package lxc_pve_poststop_hook; + use strict; use warnings; + +exit 0 if $ENV{LXC_NAME} && $ENV{LXC_NAME} !~ /^\d+$/; + use POSIX; use File::Path; @@ -15,28 +20,10 @@ use PVE::CLIHandler; use PVE::Storage; use PVE::Storage::Plugin; use PVE::LXC; -use PVE::LXCSetup; use Data::Dumper; use base qw(PVE::CLIHandler); -$ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin'; - -initlog ('lxc-pve-poststop-hook'); - -die "please run as root\n" if $> != 0; - -PVE::INotify::inotify_init(); - -my $rpcenv = PVE::RPCEnvironment->init('cli'); -$rpcenv->set_language($ENV{LANG}); -$rpcenv->set_user('root@pam'); - -# we cannot use cfs_read here (permission problem) -#$rpcenv->init_request(); - -my $nodename = PVE::INotify::nodename(); - __PACKAGE__->register_method ({ name => 'lxc-pve-poststop-hook', path => 'lxc-pve-poststop-hook', @@ -46,7 +33,7 @@ __PACKAGE__->register_method ({ additionalProperties => 0, properties => { name => { - description => "The container name. This hook is only active for containers using numeric IDs, where configuration is stored on /etc/pve/lxc//config (else it is just a NOP).", + description => "The container name. This hook is only active for containers using numeric IDs, where configuration is stored on /etc/pve/lxc/.conf (else it is just a NOP).", type => 'string', pattern => '\S+', maxLength => 64, @@ -58,18 +45,21 @@ __PACKAGE__->register_method ({ code => sub { my ($param) = @_; - return undef if $param->{name} !~ m/^\d+$/; my $vmid = $param->{name}; - return undef if ! -f PVE::LXC::config_file($vmid); + return undef if ! -f PVE::LXC::Config->config_file($vmid); - my $conf = PVE::LXC::load_config($vmid); + my $conf = PVE::LXC::Config->load_config($vmid); my $storage_cfg = PVE::Storage::config(); PVE::LXC::vm_stop_cleanup($storage_cfg, $vmid, $conf); + + my $rootfs = $ENV{LXC_ROOTFS_PATH}; + die "Missing container root directory!\n" if !$rootfs; + PVE::Tools::run_command(['umount', '--recursive', $rootfs]); return undef; }}); @@ -79,10 +69,7 @@ push @ARGV, 'help' if !scalar(@ARGV); my $param = {}; -if ((scalar(@ARGV) == 1) && ($ARGV[0] eq 'printmanpod') || - ($ARGV[0] eq 'verifyapi')) { - # OK -} elsif ((scalar(@ARGV) == 3) && ($ARGV[1] eq 'lxc') && ($ARGV[2] eq 'post-stop')) { +if ((scalar(@ARGV) == 3) && ($ARGV[1] eq 'lxc') && ($ARGV[2] eq 'post-stop')) { $param->{name} = $ENV{'LXC_NAME'}; die "got wrong name" if $param->{name} ne $ARGV[0]; @@ -91,28 +78,6 @@ if ((scalar(@ARGV) == 1) && ($ARGV[0] eq 'printmanpod') || @ARGV = ('help'); } -my $cmddef = [ __PACKAGE__, 'lxc-pve-poststop-hook', [], $param]; - -PVE::CLIHandler::handle_simple_cmd($cmddef, \@ARGV, undef, $0); - -exit 0; - -__END__ - -=head1 NAME - -lxc-pve - LXC post stop hook for Proxmox VE - -=head1 SYNOPSIS - -=include synopsis - -=head1 DESCRIPTION - -This post stop hook detach loop devices and deactivate volumes for pve container. - -=head1 SEE ALSO - -lct(1) +our $cmddef = [ __PACKAGE__, 'lxc-pve-poststop-hook', [], $param]; -=include pve_copyright +__PACKAGE__->run_cli_handler();