[pve-devel] [PATCH container 5/9] add 'pending' API method to LXC

Fabian Grünbichler f.gruenbichler at proxmox.com
Wed Sep 11 09:39:36 CEST 2019


On September 5, 2019 4:11 pm, Oguz Bektas wrote:
> analog to Qemu, it returns an array of elements, which shows the
> current value, pending value, and delete requests.

and again, this is completely identical to the Qemu API path (modulo 
comments, one superfluous next statement) except for the cipassword 
handling.

we could just move this into AbstractConfig, and let Qemu cleanup the 
cipassword after calling the shared code.

> 
> Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
> ---
>  src/PVE/API2/LXC.pm | 88 +++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 88 insertions(+)
> 
> diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm
> index 9ddaf58..b885e90 100644
> --- a/src/PVE/API2/LXC.pm
> +++ b/src/PVE/API2/LXC.pm
> @@ -513,6 +513,7 @@ __PACKAGE__->register_method({
>  
>  	my $res = [
>  	    { subdir => 'config' },
> +	    { subdir => 'pending' },
>  	    { subdir => 'status' },
>  	    { subdir => 'vncproxy' },
>  	    { subdir => 'termproxy' },
> @@ -1863,4 +1864,91 @@ __PACKAGE__->register_method({
>  	return $task;
>    }});
>  
> +__PACKAGE__->register_method({
> +    name => 'vm_pending',
> +    path => '{vmid}/pending',
> +    method => 'GET',
> +    proxyto => 'node',
> +    description => 'Get container configuration, including pending changes.',
> +    permissions => {
> +	check => ['perm', '/vms/{vmid}', [ 'VM.Audit' ]],
> +    },
> +    parameters => {
> +	additionalProperties => 0,
> +	properties => {
> +	    node => get_standard_option('pve-node'),
> +	    vmid => get_standard_option('pve-vmid', { completion => \&PVE::LXC::complete_ctid }),
> +	},
> +    },
> +    returns => {
> +	type => "array",
> +	items => {
> +	    type => "object",
> +	    properties => {
> +		key => {
> +		    description => 'Configuration option name.',
> +		    type => 'string',
> +		},
> +		value => {
> +		    description => 'Current value.',
> +		    type => 'string',
> +		    optional => 1,
> +		},
> +		pending => {
> +		    description => 'Pending value.',
> +		    type => 'string',
> +		    optional => 1,
> +		},
> +		delete => {
> +		    description => "Indicates a pending delete request if present and not 0. " .
> +		    "The value 2 indicates a force-delete request.",
> +		    type => 'integer',
> +		    minimum => 0,
> +		    maximum => 2,
> +		    optional => 1,
> +		},
> +	    },
> +	},
> +    },
> +    code => sub {
> +	my ($param) = @_;
> +
> +	my $conf = PVE::LXC::Config->load_config($param->{vmid});
> +
> +	my $pending_delete_hash = PVE::LXC::Config->split_flagged_list($conf->{pending}->{delete});
> +
> +	my $res = [];
> +
> +	foreach my $opt (keys %$conf) {
> +	    next if ref($conf->{$opt});
> +	    next if $opt eq 'pending';
> +	    my $item = { key => $opt } ;
> +	    $item->{value} = $conf->{$opt} if defined($conf->{$opt});
> +	    $item->{pending} = $conf->{pending}->{$opt} if defined($conf->{pending}->{$opt});
> +	    $item->{delete} = ($pending_delete_hash->{$opt} ? 2 : 1) if exists $pending_delete_hash->{$opt};
> +
> +	    push @$res, $item;
> +	}
> +
> +	foreach my $opt (keys %{$conf->{pending}}) {
> +	    next if $opt eq 'delete';
> +	    next if ref($conf->{pending}->{$opt});
> +	    next if defined($conf->{$opt});
> +	    my $item = { key => $opt };
> +	    $item->{pending} = $conf->{pending}->{$opt};
> +
> +	    push @$res, $item;
> +	}
> +
> +	while (my ($opt, $force) = each %$pending_delete_hash) {
> +	    next if $conf->{pending}->{$opt};
> +	    next if $conf->{$opt};
> +	    my $item = { key => $opt, delete => ($force ? 2 : 1)};
> +	    push @$res, $item;
> +	}
> +
> +	return $res;
> +
> +    }});
> +
>  1;
> -- 
> 2.20.1
> 
> _______________________________________________
> 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