list all vms with either max/host cputype or vmx/svm explicitely set
(this can only happen in the args)

give a general message if none is found at the moment (and do not warn)

Signed-off-by: Dominik Csapak <d.csa...@proxmox.com>
---
changes from v1:
* instead of a new line for each vm, combine the reasons
* only use log_skip if no vm running with vmx/svm is detected
 PVE/CLI/pve5to6.pm | 46 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 45 insertions(+), 1 deletion(-)

diff --git a/PVE/CLI/pve5to6.pm b/PVE/CLI/pve5to6.pm
index 440c58e6..2d4fd82e 100644
--- a/PVE/CLI/pve5to6.pm
+++ b/PVE/CLI/pve5to6.pm
@@ -16,6 +16,7 @@ use PVE::JSONSchema;
 use PVE::RPCEnvironment;
 use PVE::Storage;
 use PVE::Tools;
+use PVE::QemuServer;
 
 use Term::ANSIColor;
 
@@ -153,6 +154,33 @@ sub check_pve_packages {
     }
 }
 
+sub get_vms_with_vmx {
+    my $res = {
+       cpu => [],
+       flag => [],
+    };
+    my $vmlist = PVE::QemuServer::vzlist();
+    foreach my $vmid ( sort { $a <=> $b } keys %$vmlist ) {
+       my $pid = $vmlist->{$vmid}->{pid};
+       next if !$pid; # skip not running vms
+       my $cmdline = eval { 
PVE::Tools::file_get_contents("/proc/$pid/cmdline") };
+       if ($cmdline) {
+           my @args = split(/\0/, $cmdline);
+           for (my $i = 0; $i < scalar(@args); $i++) {
+               next if !$args[$i] || $args[$i] !~ m/^-?-cpu$/;
+               my $cpuarg = $args[$i+1];
+               if ($cpuarg =~ m/^(host|max)/) {
+                   push @{$res->{cpu}}, $vmid;
+               } elsif ($cpuarg =~ m/\+(vmx|svm)/) {
+                   push @{$res->{flag}}, $vmid;
+               }
+           }
+       }
+    }
+    my $count = scalar(@{$res->{cpu}}) + scalar(@{$res->{flag}});
+    return ($count, $res);
+}
+
 sub check_kvm_nested {
     my $module_sysdir = "/sys/module";
     if (-e "$module_sysdir/kvm_amd") {
@@ -167,7 +195,23 @@ sub check_kvm_nested {
     if (-f "$module_sysdir/nested") {
        my $val = eval { 
PVE::Tools::file_read_firstline("$module_sysdir/nested") };
        if ($val && $val =~ m/Y|1/) {
-           log_warn("KVM nested parameter set. VMs with vmx/svm flag will not 
be able to live migrate to PVE 6.");
+           my ($count, $list) = get_vms_with_vmx();
+           if (!$count) {
+               log_skip("KVM nested parameter set.\nVMs with cputype host/max 
" .
+                        "or vmx/svm flag will not be able to live migrate to 
PVE 6.");
+           } else {
+               my $warnmsg = "KVM nested parameter set.\n" .
+                             "It will not be possible to live migrate 
following VMs to PVE6:\n";
+               if (@{$list->{cpu}}) {
+                   $warnmsg .= "VMs with cputype host/max: " . join(',', 
@{$list->{cpu}}) . "\n";
+               }
+
+               if (@{$list->{flag}}) {
+                   $warnmsg .= "VMs with cpu flag vmx/svm: " . join(',', 
@{$list->{flag}}) . "\n";
+               }
+
+               log_warn($warnmsg);
+           }
        } else {
            log_pass("KVM nested parameter not set.")
        }
-- 
2.20.1


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to