It was necessary to move foreach_volid back to QemuServer.pm In VZDump/QemuServer.pm and QemuMigrate.pm the dependency on QemuConfig.pm was already there, just the explicit "use" was missing.
Signed-off-by: Fabian Ebner <f.eb...@proxmox.com> --- PVE/API2/Qemu.pm | 6 ++-- PVE/QemuConfig.pm | 2 +- PVE/QemuMigrate.pm | 5 +-- PVE/QemuServer.pm | 70 ++++++++++++++++++++++++++++++------- PVE/QemuServer/Cloudinit.pm | 2 +- PVE/QemuServer/Drive.pm | 61 -------------------------------- PVE/VZDump/QemuServer.pm | 3 +- 7 files changed, 68 insertions(+), 81 deletions(-) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index ef8a7c3..4502a81 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -63,7 +63,7 @@ my $NEW_DISK_RE = qr!^(([^/:\s]+):)?(\d+(\.\d+)?)$!; my $check_storage_access = sub { my ($rpcenv, $authuser, $storecfg, $vmid, $settings, $default_storage) = @_; - PVE::QemuServer::foreach_drive($settings, sub { + PVE::QemuConfig->foreach_volume($settings, sub { my ($ds, $drive) = @_; my $isCDROM = PVE::QemuServer::drive_is_cdrom($drive); @@ -96,7 +96,7 @@ my $check_storage_access_clone = sub { my $sharedvm = 1; - PVE::QemuServer::foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; my $isCDROM = PVE::QemuServer::drive_is_cdrom($drive); @@ -216,7 +216,7 @@ my $create_disks = sub { } }; - eval { PVE::QemuServer::foreach_drive($settings, $code); }; + eval { PVE::QemuConfig->foreach_volume($settings, $code); }; # free allocated images on error if (my $err = $@) { diff --git a/PVE/QemuConfig.pm b/PVE/QemuConfig.pm index 6322089..8cf3865 100644 --- a/PVE/QemuConfig.pm +++ b/PVE/QemuConfig.pm @@ -65,7 +65,7 @@ sub has_feature { my ($class, $feature, $conf, $storecfg, $snapname, $running, $backup_only) = @_; my $err; - PVE::QemuServer::foreach_drive($conf, sub { + $class->foreach_volume($conf, sub { my ($ds, $drive) = @_; return if PVE::QemuServer::drive_is_cdrom($drive); diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index f2be2a6..abdac56 100644 --- a/PVE/QemuMigrate.pm +++ b/PVE/QemuMigrate.pm @@ -17,6 +17,7 @@ use PVE::ReplicationState; use PVE::Storage; use PVE::Tools; +use PVE::QemuConfig; use PVE::QemuServer::Drive; use PVE::QemuServer::Helpers qw(min_version); use PVE::QemuServer::Machine; @@ -465,7 +466,7 @@ sub sync_disks { } my $live_replicatable_volumes = {}; - PVE::QemuServer::foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; my $volid = $drive->{file}; @@ -496,7 +497,7 @@ sub sync_disks { # sizes in config have to be accurate for remote node to correctly # allocate disks, rescan to be sure my $volid_hash = PVE::QemuServer::scan_volids($self->{storecfg}, $vmid); - PVE::QemuServer::foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($key, $drive) = @_; my ($updated, $old_size, $new_size) = PVE::QemuServer::Drive::update_disksize($drive, $volid_hash); if (defined($updated)) { diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 3a8f52d..7229ce1 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -44,7 +44,7 @@ use PVE::QemuConfig; use PVE::QemuServer::Helpers qw(min_version config_aware_timeout); use PVE::QemuServer::Cloudinit; use PVE::QemuServer::CPUConfig qw(print_cpu_device get_cpu_options); -use PVE::QemuServer::Drive qw(is_valid_drivename drive_is_cloudinit drive_is_cdrom parse_drive print_drive foreach_drive foreach_volid); +use PVE::QemuServer::Drive qw(is_valid_drivename drive_is_cloudinit drive_is_cdrom parse_drive print_drive); use PVE::QemuServer::Machine; use PVE::QemuServer::Memory; use PVE::QemuServer::Monitor qw(mon_cmd); @@ -2007,7 +2007,7 @@ sub destroy_vm { if ($conf->{template}) { # check if any base image is still used by a linked clone - foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; return if drive_is_cdrom($drive); @@ -2021,7 +2021,7 @@ sub destroy_vm { } # only remove disks owned by this VM - foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; return if drive_is_cdrom($drive, 1); @@ -2310,7 +2310,7 @@ sub check_local_resources { sub check_storage_availability { my ($storecfg, $conf, $node) = @_; - foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; my $volid = $drive->{file}; @@ -2333,7 +2333,7 @@ sub shared_nodes { my $nodehash = { map { $_ => 1 } @$nodelist }; my $nodename = nodename(); - foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; my $volid = $drive->{file}; @@ -2365,7 +2365,7 @@ sub check_local_storage_availability { my $nodelist = PVE::Cluster::get_nodelist(); my $nodehash = { map { $_ => {} } @$nodelist }; - foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; my $volid = $drive->{file}; @@ -3422,7 +3422,7 @@ sub config_to_command { push @$devices, '-iscsi', "initiator-name=$initiator"; } - foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; if (PVE::Storage::parse_volume_id($drive->{file}, 1)) { @@ -4211,7 +4211,7 @@ sub qemu_volume_snapshot_delete { $running = undef; my $conf = PVE::QemuConfig->load_config($vmid); - foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; $running = 1 if $drive->{file} eq $volid; }); @@ -4249,6 +4249,52 @@ sub set_migration_caps { mon_cmd($vmid, "migrate-set-capabilities", capabilities => $cap_ref); } +sub foreach_volid { + my ($conf, $func, @param) = @_; + + my $volhash = {}; + + my $test_volid = sub { + my ($volid, $is_cdrom, $replicate, $shared, $snapname, $size) = @_; + + return if !$volid; + + $volhash->{$volid}->{cdrom} //= 1; + $volhash->{$volid}->{cdrom} = 0 if !$is_cdrom; + + $volhash->{$volid}->{replicate} //= 0; + $volhash->{$volid}->{replicate} = 1 if $replicate; + + $volhash->{$volid}->{shared} //= 0; + $volhash->{$volid}->{shared} = 1 if $shared; + + $volhash->{$volid}->{referenced_in_config} //= 0; + $volhash->{$volid}->{referenced_in_config} = 1 if !defined($snapname); + + $volhash->{$volid}->{referenced_in_snapshot}->{$snapname} = 1 + if defined($snapname); + $volhash->{$volid}->{size} = $size if $size; + }; + + PVE::QemuConfig->foreach_volume($conf, sub { + my ($ds, $drive) = @_; + $test_volid->($drive->{file}, drive_is_cdrom($drive), $drive->{replicate} // 1, $drive->{shared}, undef, $drive->{size}); + }); + + foreach my $snapname (keys %{$conf->{snapshots}}) { + my $snap = $conf->{snapshots}->{$snapname}; + $test_volid->($snap->{vmstate}, 0, 1, $snapname); + PVE::QemuConfig->foreach_volume($snap, sub { + my ($ds, $drive) = @_; + $test_volid->($drive->{file}, drive_is_cdrom($drive), $drive->{replicate} // 1, $drive->{shared}, $snapname); + }); + } + + foreach my $volid (keys %$volhash) { + &$func($volid, $volhash->{$volid}, @param); + } +} + my $fast_plug_option = { 'lock' => 1, 'name' => 1, @@ -4739,7 +4785,7 @@ sub vm_start { my $local_volumes = {}; if ($targetstorage) { - foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; return if drive_is_cdrom($drive); @@ -5492,7 +5538,7 @@ sub restore_file_archive { my $restore_cleanup_oldconf = sub { my ($storecfg, $vmid, $oldconf, $virtdev_hash) = @_; - foreach_drive($oldconf, sub { + PVE::QemuConfig->foreach_volume($oldconf, sub { my ($ds, $drive) = @_; return if drive_is_cdrom($drive, 1); @@ -6362,7 +6408,7 @@ sub foreach_storage_used_by_vm { my $sidhash = {}; - foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; return if drive_is_cdrom($drive); @@ -6413,7 +6459,7 @@ sub template_create { my $storecfg = PVE::Storage::config(); - foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; return if drive_is_cdrom($drive); diff --git a/PVE/QemuServer/Cloudinit.pm b/PVE/QemuServer/Cloudinit.pm index 559f331..b3ae57b 100644 --- a/PVE/QemuServer/Cloudinit.pm +++ b/PVE/QemuServer/Cloudinit.pm @@ -466,7 +466,7 @@ sub generate_cloudinitconfig { my $format = get_cloudinit_format($conf); - PVE::QemuServer::foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; my ($storeid, $volname) = PVE::Storage::parse_volume_id($drive->{file}, 1); diff --git a/PVE/QemuServer/Drive.pm b/PVE/QemuServer/Drive.pm index a08df66..f84333f 100644 --- a/PVE/QemuServer/Drive.pm +++ b/PVE/QemuServer/Drive.pm @@ -14,8 +14,6 @@ drive_is_cloudinit drive_is_cdrom parse_drive print_drive -foreach_drive -foreach_volid ); our $QEMU_FORMAT_RE = qr/raw|cow|qcow|qcow2|qed|vmdk|cloop/; @@ -503,65 +501,6 @@ sub print_drive { return PVE::JSONSchema::print_property_string($drive, $alldrive_fmt, $skip); } -sub foreach_drive { - my ($conf, $func, @param) = @_; - - foreach my $ds (valid_drive_names()) { - next if !defined($conf->{$ds}); - - my $drive = parse_drive($ds, $conf->{$ds}); - next if !$drive; - - &$func($ds, $drive, @param); - } -} - -sub foreach_volid { - my ($conf, $func, @param) = @_; - - my $volhash = {}; - - my $test_volid = sub { - my ($volid, $is_cdrom, $replicate, $shared, $snapname, $size) = @_; - - return if !$volid; - - $volhash->{$volid}->{cdrom} //= 1; - $volhash->{$volid}->{cdrom} = 0 if !$is_cdrom; - - $volhash->{$volid}->{replicate} //= 0; - $volhash->{$volid}->{replicate} = 1 if $replicate; - - $volhash->{$volid}->{shared} //= 0; - $volhash->{$volid}->{shared} = 1 if $shared; - - $volhash->{$volid}->{referenced_in_config} //= 0; - $volhash->{$volid}->{referenced_in_config} = 1 if !defined($snapname); - - $volhash->{$volid}->{referenced_in_snapshot}->{$snapname} = 1 - if defined($snapname); - $volhash->{$volid}->{size} = $size if $size; - }; - - foreach_drive($conf, sub { - my ($ds, $drive) = @_; - $test_volid->($drive->{file}, drive_is_cdrom($drive), $drive->{replicate} // 1, $drive->{shared}, undef, $drive->{size}); - }); - - foreach my $snapname (keys %{$conf->{snapshots}}) { - my $snap = $conf->{snapshots}->{$snapname}; - $test_volid->($snap->{vmstate}, 0, 1, $snapname); - foreach_drive($snap, sub { - my ($ds, $drive) = @_; - $test_volid->($drive->{file}, drive_is_cdrom($drive), $drive->{replicate} // 1, $drive->{shared}, $snapname); - }); - } - - foreach my $volid (keys %$volhash) { - &$func($volid, $volhash->{$volid}, @param); - } -} - sub bootdisk_size { my ($storecfg, $conf) = @_; diff --git a/PVE/VZDump/QemuServer.pm b/PVE/VZDump/QemuServer.pm index b5f4320..7ad787f 100644 --- a/PVE/VZDump/QemuServer.pm +++ b/PVE/VZDump/QemuServer.pm @@ -19,6 +19,7 @@ use PVE::Storage; use PVE::Tools; use PVE::VZDump; +use PVE::QemuConfig; use PVE::QemuServer; use PVE::QemuServer::Machine; use PVE::QemuServer::Monitor qw(mon_cmd); @@ -68,7 +69,7 @@ sub prepare { my $vollist = []; my $drivehash = {}; - PVE::QemuServer::foreach_drive($conf, sub { + PVE::QemuConfig->foreach_volume($conf, sub { my ($ds, $drive) = @_; return if PVE::QemuServer::drive_is_cdrom($drive); -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel