From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 85E6B985AA for ; Thu, 11 May 2023 10:03:55 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 5EC761DAAB for ; Thu, 11 May 2023 10:03:25 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Thu, 11 May 2023 10:03:24 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 0B40E416E5 for ; Thu, 11 May 2023 10:03:24 +0200 (CEST) From: Leo Nunner To: pve-devel@lists.proxmox.com Date: Thu, 11 May 2023 10:03:17 +0200 Message-Id: <20230511080317.49367-1-l.nunner@proxmox.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.133 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH qemu-server] cloudinit: fix 'pending' api endpoint X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 May 2023 08:03:55 -0000 This patch partially reverts commit 1b5706cd168fedc5e494e24300069ee4ff25761f, by reintroducing the old format for return values (key, value, pending, delete), but drops the "force-delete" return value. Right now, this endpoint does not conform to its own format, because the return values are as follows: { key => { old => 'foo', new => 'bar', }, […] } While the format specified is [ { key => 'baz', old => 'foo', new => 'bar', }, […] ] This leads to the endpoint being broken when used through 'qm' and 'pvesh'. Using the API works fine, because the format doesn't get verified there. Reverting this change brings the advantage that we can also use PVE::GuestHelpers::format_pending when calling the endpoint through qm again. Signed-off-by: Leo Nunner --- I'm not sure whether or not this constitutes a breaking change. We are returning to the old format for this endpoint, and up until now it was broken anyway (well, for the CLI that is). PVE/API2/Qemu.pm | 48 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 587bb22..dd52fdc 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -1344,16 +1344,23 @@ __PACKAGE__->register_method({ description => "Configuration option name.", type => 'string', }, - old => { + value => { description => "Value as it was used to generate the current cloudinit image.", type => 'string', optional => 1, }, - new => { + pending => { description => "The new pending value.", type => 'string', optional => 1, }, + delete => { + description => "Indicates a pending delete request if present and not 0. ", + type => 'integer', + minimum => 0, + maximum => 1, + optional => 1, + }, }, }, }, @@ -1365,26 +1372,39 @@ __PACKAGE__->register_method({ my $ci = $conf->{cloudinit}; - my $res = {}; + $conf->{cipassword} = '**********' if exists $conf->{cipassword}; + $ci->{cipassword} = '**********' if exists $ci->{cipassword}; + + my $res = []; + + # All the values that got added my $added = delete($ci->{added}) // ''; for my $key (PVE::Tools::split_list($added)) { - $res->{$key} = { new => $conf->{$key} }; + push @$res, { key => $key, pending => $conf->{$key} }; } - for my $key (keys %$ci) { - if (!exists($conf->{$key})) { - $res->{$key} = { old => $ci->{$key} }; + # All already existing values (+ their new value, if it exists) + for my $opt (keys %$cloudinitoptions) { + next if !$conf->{$opt}; + next if $added =~ m/$opt/; + my $item = { + key => $opt, + }; + + if (my $pending = $ci->{$opt}) { + $item->{value} = $pending; + $item->{pending} = $conf->{$opt}; } else { - $res->{$key} = { - old => $ci->{$key}, - new => $conf->{$key}, - }; + $item->{value} = $conf->{$opt}, } + + push @$res, $item; } - if (defined(my $pw = $res->{cipassword})) { - $pw->{old} = '**********' if exists $pw->{old}; - $pw->{new} = '**********' if exists $pw->{new}; + # Now, we'll find the deleted ones + for my $opt (keys %$ci) { + next if $conf->{$opt}; + push @$res, { key => $opt, delete => 1 }; } return $res; -- 2.30.2