From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH qemu-server 6/6] drop get_pending_changes and simplify cloudinit_pending api call
Date: Wed, 16 Nov 2022 18:14:08 +0100 [thread overview]
Message-ID: <20221116171408.216775-7-w.bumiller@proxmox.com> (raw)
In-Reply-To: <20221116171408.216775-1-w.bumiller@proxmox.com>
- The forced-remove flag wasn't really used AFAICT and makes
no sense IMO.
- Whether or not we care about non-MAC changes does not
belong here, but should instead taken into account in the
actual hotplug path recording the cloud-init state (iow.
into $cloudinit_record_changed().)
(This is not done here atm.)
- It seems much simpler to just have:
* 'old' = the old value if it's not a new value
* 'new' = the new value unless it's being deleted
* If only one of them is set it's an addition or removal.
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
---
PVE/API2/Qemu.pm | 44 +++++++++++----------
PVE/QemuServer/Cloudinit.pm | 78 -------------------------------------
2 files changed, 24 insertions(+), 98 deletions(-)
diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 30348e6..edb495b 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -1338,24 +1338,16 @@ __PACKAGE__->register_method({
description => "Configuration option name.",
type => 'string',
},
- value => {
- description => "Current value.",
+ old => {
+ description => "Value as it was used to generate the current cloudinit image.",
type => 'string',
optional => 1,
},
- pending => {
- description => "Pending value.",
+ new => {
+ description => "The new 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,
- },
},
},
},
@@ -1365,17 +1357,29 @@ __PACKAGE__->register_method({
my $vmid = $param->{vmid};
my $conf = PVE::QemuConfig->load_config($vmid);
- if (defined($conf->{cipassword}) &&
- defined($conf->{cloudinit}->{cipassword}) &&
- $conf->{cipassword} ne $conf->{cloudinit}->{cipassword}) {
- $conf->{cipassword} = '********** ';
- } elsif (defined($conf->{cipassword})) {
- $conf->{cipassword} = '**********';
+ my $ci = $conf->{cloudinit};
+
+ my $res = {};
+ my $added = delete($ci->{added}) // '';
+ for my $key (PVE::Tools::split_list($added)) {
+ $res->{$key} = { new => $conf->{$key} };
}
- $conf->{cloudinit}->{cipassword} = '**********' if defined($conf->{cloudinit}->{cipassword});
+ for my $key (keys %$ci) {
+ if (!exists($conf->{$key})) {
+ $res->{$key} = { old => $ci->{$key} };
+ } else {
+ $res->{$key} = {
+ old => $ci->{$key},
+ new => $conf->{$key},
+ };
+ }
+ }
- my $res = PVE::QemuServer::Cloudinit::get_pending_config($conf, $vmid);
+ if (defined(my $pw = $res->{cipassword})) {
+ $pw->{old} = '**********' if exists $pw->{old};
+ $pw->{new} = '**********' if exists $pw->{new};
+ }
return $res;
}});
diff --git a/PVE/QemuServer/Cloudinit.pm b/PVE/QemuServer/Cloudinit.pm
index 24725e7..a0c3d60 100644
--- a/PVE/QemuServer/Cloudinit.pm
+++ b/PVE/QemuServer/Cloudinit.pm
@@ -627,82 +627,4 @@ sub dump_cloudinit_config {
}
}
-sub get_pending_config {
- my ($conf, $vmid) = @_;
-
- my $newconf = dclone($conf);
-
- my $cloudinit_current = $newconf->{cloudinit};
- my @cloudinit_opts = keys %{PVE::QemuServer::cloudinit_config_properties()};
- push @cloudinit_opts, 'name';
-
- #add cloud-init drive
- my $drives = {};
- PVE::QemuConfig->foreach_volume($newconf, sub {
- my ($ds, $drive) = @_;
- $drives->{$ds} = 1 if PVE::QemuServer::drive_is_cloudinit($drive);
- });
-
- PVE::QemuConfig->foreach_volume($cloudinit_current, sub {
- my ($ds, $drive) = @_;
- $drives->{$ds} = 1 if PVE::QemuServer::drive_is_cloudinit($drive);
- });
- for my $ds (keys %{$drives}) {
- push @cloudinit_opts, $ds;
- }
-
- $newconf->{name} = "VM$vmid" if !$newconf->{name};
- $cloudinit_current->{name} = "VM$vmid" if !$cloudinit_current->{name};
-
- #only mac-address is used in cloud-init config.
- #We don't want to display other pending net changes.
- my $print_cloudinit_net = sub {
- my ($conf, $opt) = @_;
-
- if (defined($conf->{$opt})) {
- my $net = PVE::QemuServer::parse_net($conf->{$opt});
- $conf->{$opt} = "macaddr=".$net->{macaddr} if $net->{macaddr};
- }
- };
-
- my $cloudinit_options = {};
- for my $opt (@cloudinit_opts) {
- if ($opt =~ m/^ipconfig(\d+)/) {
- my $netid = "net$1";
-
- next if !defined($newconf->{$netid}) && !defined($cloudinit_current->{$netid}) &&
- !defined($newconf->{$opt}) && !defined($cloudinit_current->{$opt});
-
- &$print_cloudinit_net($newconf, $netid);
- &$print_cloudinit_net($cloudinit_current, $netid);
- $cloudinit_options->{$netid} = 1;
- }
- $cloudinit_options->{$opt} = 1;
- }
-
- my $res = [];
-
- for my $opt (keys %{$cloudinit_options}) {
-
- my $item = {
- key => $opt,
- };
- if ($cloudinit_current->{$opt}) {
- $item->{value} = $cloudinit_current->{$opt};
- if (defined($newconf->{$opt})) {
- $item->{pending} = $newconf->{$opt}
- if $newconf->{$opt} ne $cloudinit_current->{$opt};
- } else {
- $item->{delete} = 1;
- }
- } else {
- $item->{pending} = $newconf->{$opt} if $newconf->{$opt}
- }
-
- push @$res, $item;
- }
-
- return $res;
-}
-
1;
--
2.30.2
next prev parent reply other threads:[~2022-11-16 17:14 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-16 17:14 [pve-devel] [PATCH qemu-server 0/6] Manage [special:cloudinit] in hotplug code Wolfgang Bumiller
2022-11-16 17:14 ` [pve-devel] [PATCH qemu-server 1/6] Revert "cloudinit: avoid unsafe write of VM config" Wolfgang Bumiller
2022-11-16 17:14 ` [pve-devel] [PATCH qemu-server 2/6] Partially-revert "cloudinit: add cloudinit section for current generated config" Wolfgang Bumiller
2022-11-16 17:14 ` [pve-devel] [PATCH qemu-server 3/6] delay cloudinit generation in hotplug Wolfgang Bumiller
2022-11-16 17:14 ` [pve-devel] [PATCH qemu-server 4/6] record cloud-init changes in the cloudinit section Wolfgang Bumiller
2022-11-16 17:14 ` [pve-devel] [PATCH qemu-server 5/6] don't call 'cleanup_config' " Wolfgang Bumiller
2022-11-16 17:14 ` Wolfgang Bumiller [this message]
2022-11-16 17:41 ` [pve-devel] applied-series: [PATCH qemu-server 0/6] Manage [special:cloudinit] in hotplug code Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221116171408.216775-7-w.bumiller@proxmox.com \
--to=w.bumiller@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.