mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-05-28 18:02:07 +00:00
cloudinit: fix 'pending' api endpoint
This patch partially reverts commit 1b5706cd16
,
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 <l.nunner@proxmox.com>
This commit is contained in:
parent
efa3355d3b
commit
3a704639b7
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user