[pve-devel] [PATCH container 1/1] add hookscript to containers
Dominik Csapak
d.csapak at proxmox.com
Wed Jan 23 15:38:21 CET 2019
On 1/23/19 3:29 PM, Fabian Grünbichler wrote:
> same as qemu-server, I'd limit adding a hookscript to a CT config to
> root at pam (for now).
yes you are correct
i thought we had the same default as for vms (new ones default to
root at pam only, maybe we should do this for cts also?)
>
> On Mon, Jan 21, 2019 at 09:44:36AM +0100, Dominik Csapak wrote:
>> this adds the config (hookscript) and executes it
>> on four points in time for the container
>>
>> the same notes as with vms are in place regarding
>> when the script is called
>>
>> Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
>> ---
>> src/PVE/LXC.pm | 6 ++++++
>> src/PVE/LXC/Config.pm | 18 +++++++++++++++++-
>> src/lxc-pve-poststop-hook | 3 +++
>> 3 files changed, 26 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm
>> index ab15ec0..445f9c0 100644
>> --- a/src/PVE/LXC.pm
>> +++ b/src/PVE/LXC.pm
>> @@ -26,6 +26,7 @@ use PVE::AccessControl;
>> use PVE::ProcFSTools;
>> use PVE::Syscall;
>> use PVE::LXC::Config;
>> +use PVE::GuestHelpers;
>>
>> use Time::HiRes qw (gettimeofday);
>>
>> @@ -1912,11 +1913,13 @@ sub vm_start {
>>
>> my $cmd = ['systemctl', 'start', "pve-container\@$vmid"];
>>
>> + PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'pre-start', 1);
>> eval { PVE::Tools::run_command($cmd); };
>> if (my $err = $@) {
>> unlink $skiplock_flag_fn;
>> die $err;
>> }
>> + PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'post-start');
>>
>> return;
>> }
>> @@ -1939,6 +1942,9 @@ sub vm_stop {
>> die "failed to open container ${vmid}'s command socket: $!\n";
>> }
>>
>> + my $conf = PVE::LXC::Config->load_config($vmid);
>> + PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'pre-stop');
>> +
>> # Stop the container:
>>
>> my $cmd = ['lxc-stop', '-n', $vmid];
>> diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm
>> index 061ec8e..c1e2011 100644
>> --- a/src/PVE/LXC/Config.pm
>> +++ b/src/PVE/LXC/Config.pm
>> @@ -457,6 +457,12 @@ my $confdesc = {
>> format => $features_desc,
>> description => "Allow containers access to advanced features.",
>> },
>> + hookscript => {
>> + optional => 1,
>> + type => 'string',
>> + format => 'pve-volume-id',
>> + description => 'Script that will be exectued during various steps in the containers lifetime.',
>> + },
>> };
>>
>> my $valid_lxc_conf_keys = {
>> @@ -896,7 +902,7 @@ sub update_pct_config {
>> delete $conf->{$opt};
>> PVE::LXC::write_cgroup_value("memory", $vmid,
>> "memory.memsw.limit_in_bytes", -1);
>> - } elsif ($opt eq 'description' || $opt eq 'onboot' || $opt eq 'startup') {
>> + } elsif ($opt eq 'description' || $opt eq 'onboot' || $opt eq 'startup' || $opt eq 'hookscript') {
>> delete $conf->{$opt};
>> } elsif ($opt eq 'nameserver' || $opt eq 'searchdomain' ||
>> $opt eq 'tty' || $opt eq 'console' || $opt eq 'cmode') {
>> @@ -1091,6 +1097,16 @@ sub update_pct_config {
>> } elsif ($opt eq 'features') {
>> next if $hotplug_error->($opt);
>> $conf->{$opt} = $value;
>> + } elsif ($opt eq 'hookscript') {
>> + my $storage_cfg = PVE::Storage::config();
>> + my ($path, undef, $type) = PVE::Storage::path($storage_cfg, $value);
>> +
>> + die "'$value' is not in the scripts directory\n"
>> + if $type ne 'scripts';
>> +
>> + warn "script '$path' is not found, setting anyway\n"
>> + if ! -f $path;
>
> and also here - does this really make sense?
>
same rationale as for vms
>> + $conf->{$opt} = $value;
>> } else {
>> die "implement me: $opt";
>> }
>> diff --git a/src/lxc-pve-poststop-hook b/src/lxc-pve-poststop-hook
>> index 654aa26..dc7938e 100755
>> --- a/src/lxc-pve-poststop-hook
>> +++ b/src/lxc-pve-poststop-hook
>> @@ -20,6 +20,7 @@ use PVE::CLIHandler;
>> use PVE::Storage;
>> use PVE::Storage::Plugin;
>> use PVE::LXC;
>> +use PVE::GuestHelpers;
>> use Data::Dumper;
>>
>> use base qw(PVE::CLIHandler);
>> @@ -90,6 +91,8 @@ __PACKAGE__->register_method ({
>> exit(1);
>> }
>>
>> + PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'post-stop');
>> +
>> return undef;
>> }});
>>
>> --
>> 2.11.0
>>
>>
>> _______________________________________________
>> pve-devel mailing list
>> pve-devel at pve.proxmox.com
>> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
More information about the pve-devel
mailing list