]>
git.proxmox.com Git - pve-container.git/blob - src/lxc-pve-poststop-hook
3 package lxc_pve_poststop_hook
;
8 exit 0 if $ENV { LXC_NAME
} && $ENV { LXC_NAME
} !~ /^\d+$/ ;
17 use PVE
:: RPCEnvironment
;
18 use PVE
:: JSONSchema
qw(get_standard_option) ;
21 use PVE
:: Storage
:: Plugin
;
23 use PVE
:: GuestHelpers
;
26 use base
qw(PVE::CLIHandler) ;
28 __PACKAGE__-
> register_method ({
29 name
=> 'lxc-pve-poststop-hook' ,
30 path
=> 'lxc-pve-poststop-hook' ,
32 description
=> "vm_stop_cleanup." ,
34 additionalProperties
=> 0 ,
37 description
=> "The container name. This hook is only active for containers using numeric IDs, where configuration is stored on /etc/pve/lxc/<name>.conf (else it is just a NOP)." ,
44 returns
=> { type
=> 'null' },
49 return undef if $param ->{ name
} !~ m/^\d+$/ ;
51 my $vmid = $param ->{ name
};
53 return undef if ! - f PVE
:: LXC
:: Config-
> config_file ( $vmid );
55 my $conf = PVE
:: LXC
:: Config-
> load_config ( $vmid );
57 my $storage_cfg = PVE
:: Storage
:: config
();
59 PVE
:: LXC
:: vm_stop_cleanup
( $storage_cfg, $vmid, $conf );
61 my $rootfs = $ENV { LXC_ROOTFS_PATH
};
62 die "Missing container root directory! \n " if ! $rootfs ;
63 PVE
:: Tools
:: run_command
([ 'umount' , '--recursive' , $rootfs ]);
65 # Because netlink is not a reliable protocol it can happen that lxc's
66 # link-deletion messages get lost (or end up being too early?)
67 for my $k ( keys %$conf ) {
68 next if $k !~ /^net(\d+)/ ;
70 my $net = PVE
:: LXC
:: Config-
> parse_lxc_network ( $conf ->{ $k });
71 next if $net ->{ type
} ne 'veth' ;
72 # veth_delete tests with '-d /sys/class/net/$name' before running the command
73 PVE
:: Network
:: veth_delete
( "veth${vmid}i $ind " );
76 my $target = $ENV { LXC_TARGET
};
77 if ( $target && $target eq 'reboot' ) {
78 # In order to make sure hot-plugged config changes aren't reverted
79 # to what the monitor initially loaded we need to stop the container
81 # Update the config and queue a restart of the pve-container@$vmid
82 # task, note that we must not block because we're part of the
83 # service cgroup systemd waits for to die before issuing the new
85 PVE
:: LXC
:: update_lxc_config
( $vmid, $conf );
86 # Tell the post-stop hook we want to be restarted.
87 open ( my $fh, '>' , "/var/lib/lxc/ $vmid/reboot " )
88 or die "failed to create reboot trigger file: $!\n " ;
90 # cause lxc to stop instead of rebooting
94 PVE
:: GuestHelpers
:: exec_hookscript
( $conf, $vmid, 'post-stop' );
100 push @ARGV, 'help' if ! scalar ( @ARGV );
104 if (( scalar ( @ARGV ) == 3 ) && ( $ARGV [ 1 ] eq 'lxc' ) && ( $ARGV [ 2 ] eq 'post-stop' )) {
105 $param ->{ name
} = $ENV { 'LXC_NAME' };
106 die "got wrong name" if $param ->{ name
} ne $ARGV [ 0 ];
113 our $cmddef = [ __PACKAGE__
, 'lxc-pve-poststop-hook' , [], $param ];
115 __PACKAGE__-
> run_cli_handler ();