[pve-devel] [PATCH v2 guest-common 4/5] abstractconfig: add partial_fast_plug

Oguz Bektas o.bektas at proxmox.com
Wed Feb 19 17:07:58 CET 2020


allows partial fast plugging of functions as defined in the
$partial_fast_plug_option in qemuserver (and possibly lxc later on)

Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
---

v1->v2:
* rename get_partial_fast_plug_map -> get_partial_fast_plug_option
* rename variables in partial_fast_plug for readability/understandability
* return $changes instead of $changes_left
* more verbose comment

 PVE/AbstractConfig.pm | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/PVE/AbstractConfig.pm b/PVE/AbstractConfig.pm
index 782714f..c517c61 100644
--- a/PVE/AbstractConfig.pm
+++ b/PVE/AbstractConfig.pm
@@ -168,6 +168,49 @@ sub cleanup_pending {
     return $changes;
 }
 
+sub get_partial_fast_plug_option {
+    my ($class) = @_;
+
+    die "abstract method - implement me ";
+}
+
+sub partial_fast_plug {
+    my ($class, $conf, $opt) = @_;
+
+    my $partial_fast_plug_option = $class->get_partial_fast_plug_option();
+    my $format = $partial_fast_plug_option->{$opt}->{fmt};
+    my $fast_pluggable = $partial_fast_plug_option->{$opt}->{properties};
+
+    my $configured = {};
+    if (exists($conf->{$opt})) {
+	$configured = PVE::JSONSchema::parse_property_string($format, $conf->{$opt});
+    }
+    my $pending = PVE::JSONSchema::parse_property_string($format, $conf->{pending}->{$opt});
+
+    my $changes = 0;
+
+    # merge configured and pending opts to iterate
+    my @all_keys = keys %{{ %$pending, %$configured }};
+
+    foreach my $subopt (@all_keys) {
+	my $type = $format->{$subopt}->{type};
+	if (PVE::GuestHelpers::typesafe_ne($configured->{$subopt}, $pending->{$subopt}, $type)) {
+	    if ($fast_pluggable->{$subopt}) {
+		$configured->{$subopt} = $pending->{$subopt};
+		$changes = 1
+	    }
+	}
+    }
+
+    # if there're no keys in $configured (after merge) there shouldn't be anything to change
+    if (keys %$configured) {
+	$conf->{$opt} = PVE::JSONSchema::print_property_string($configured, $format);
+    }
+
+    return $changes;
+}
+
+
 sub load_snapshot_config {
     my ($class, $vmid, $snapname) = @_;
 
-- 
2.20.1



More information about the pve-devel mailing list