[pve-devel] [PATCH container 5/9] add 'pending' API method to LXC
Oguz Bektas
o.bektas at proxmox.com
Thu Sep 5 16:11:17 CEST 2019
analog to Qemu, it returns an array of elements, which shows the
current value, pending value, and delete requests.
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
More information about the pve-devel
mailing list