Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kubevirt for openSUSE:Factory 
checked in at 2023-07-10 16:40:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kubevirt (Old)
 and      /work/SRC/openSUSE:Factory/.kubevirt.new.23466 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kubevirt"

Mon Jul 10 16:40:35 2023 rev:58 rq:1097921 version:0.59.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/kubevirt/kubevirt.changes        2023-06-21 
22:40:32.922620162 +0200
+++ /work/SRC/openSUSE:Factory/.kubevirt.new.23466/kubevirt.changes     
2023-07-10 16:40:35.606790585 +0200
@@ -1,0 +2,6 @@
+Mon Jul 10 11:19:52 UTC 2023 - Vasily Ulyanov <vasily.ulya...@suse.com>
+
+- Fix qemu-system-<arch> process lookup
+  0002-Fix-qemu-system-lookup.patch
+
+-------------------------------------------------------------------

New:
----
  0002-Fix-qemu-system-lookup.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kubevirt.spec ++++++
--- /var/tmp/diff_new_pack.hjV9iH/_old  2023-07-10 16:40:37.246800359 +0200
+++ /var/tmp/diff_new_pack.hjV9iH/_new  2023-07-10 16:40:37.298800669 +0200
@@ -29,6 +29,7 @@
 Source3:        %{url}/releases/download/v%{version}/disks-images-provider.yaml
 Source100:      %{name}-rpmlintrc
 Patch0:         0001-Vulnerability-fix-limit-operator-secrets-permission.patch
+Patch1:         0002-Fix-qemu-system-lookup.patch
 BuildRequires:  glibc-devel-static
 BuildRequires:  golang-packaging
 BuildRequires:  pkgconfig

++++++ 0002-Fix-qemu-system-lookup.patch ++++++
>From c4d429f3edffaaf8086f6cd22821b42ce2cf60c0 Mon Sep 17 00:00:00 2001
From: Vasiliy Ulyanov <vulya...@suse.de>
Date: Tue, 4 Jul 2023 13:27:25 +0200
Subject: [PATCH 1/2] Lookup qemu process by executable prefix

Exact matching with 'qemu-system' does not work since the executable
name also includes a suffix with current architecture, e.g.
qemu-system-x86_64. This leads to errors of type:

    no QEMU process found under process 16427 child processes

Signed-off-by: Vasiliy Ulyanov <vulya...@suse.de>
---
 pkg/virt-handler/isolation/detector.go      |  6 +++---
 pkg/virt-handler/isolation/detector_test.go |  2 +-
 pkg/virt-handler/isolation/process.go       | 17 ++++++++++++-----
 pkg/virt-handler/isolation/process_test.go  | 20 ++++++++++----------
 4 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/pkg/virt-handler/isolation/detector.go 
b/pkg/virt-handler/isolation/detector.go
index 62f920025..a90281824 100644
--- a/pkg/virt-handler/isolation/detector.go
+++ b/pkg/virt-handler/isolation/detector.go
@@ -185,13 +185,13 @@ func AdjustQemuProcessMemoryLimits(podIsoDetector 
PodIsolationDetector, vmi *v1.
        return nil
 }
 
-var qemuProcessExecutables = []string{"qemu-system", "qemu-kvm"}
+var qemuProcessExecutablePrefixes = []string{"qemu-system", "qemu-kvm"}
 
 // findIsolatedQemuProcess Returns the first occurrence of the QEMU process 
whose parent is PID"
 func findIsolatedQemuProcess(processes []ps.Process, pid int) (ps.Process, 
error) {
        processes = childProcesses(processes, pid)
-       for _, exec := range qemuProcessExecutables {
-               if qemuProcess := lookupProcessByExecutable(processes, exec); 
qemuProcess != nil {
+       for _, execPrefix := range qemuProcessExecutablePrefixes {
+               if qemuProcess := lookupProcessByExecutablePrefix(processes, 
execPrefix); qemuProcess != nil {
                        return qemuProcess, nil
                }
        }
diff --git a/pkg/virt-handler/isolation/detector_test.go 
b/pkg/virt-handler/isolation/detector_test.go
index 29486d00d..6ada37918 100644
--- a/pkg/virt-handler/isolation/detector_test.go
+++ b/pkg/virt-handler/isolation/detector_test.go
@@ -132,7 +132,7 @@ var _ = Describe("findIsolatedQemuProcess", func() {
                fakeProcess3}
 
        qemuKvmProc := ProcessStub{pid: 101, ppid: virtLauncherPid, binary: 
"qemu-kvm"}
-       qemuSystemProc := ProcessStub{pid: 101, ppid: virtLauncherPid, binary: 
"qemu-system"}
+       qemuSystemProc := ProcessStub{pid: 101, ppid: virtLauncherPid, binary: 
"qemu-system-x86_64"}
 
        DescribeTable("should return QEMU process",
                func(processes []ps.Process, pid int, expectedProcess 
ps.Process) {
diff --git a/pkg/virt-handler/isolation/process.go 
b/pkg/virt-handler/isolation/process.go
index bf3072153..6a99a4d52 100644
--- a/pkg/virt-handler/isolation/process.go
+++ b/pkg/virt-handler/isolation/process.go
@@ -19,7 +19,11 @@
 
 package isolation
 
-import "github.com/mitchellh/go-ps"
+import (
+       "strings"
+
+       "github.com/mitchellh/go-ps"
+)
 
 // childProcesses given a list of processes, it returns the ones that are 
children
 // of the given PID.
@@ -34,11 +38,14 @@ func childProcesses(processes []ps.Process, pid int) 
[]ps.Process {
        return childProcesses
 }
 
-// lookupProcessByExecutable given list of processes, it return the first 
occurrence
-// of a process that runs the given executable.
-func lookupProcessByExecutable(processes []ps.Process, exectutable string) 
ps.Process {
+// lookupProcessByExecutablePrefix given list of processes, it return the 
first occurrence
+// of a process with the given executable prefix.
+func lookupProcessByExecutablePrefix(processes []ps.Process, execPrefix 
string) ps.Process {
+       if execPrefix == "" {
+               return nil
+       }
        for _, process := range processes {
-               if process.Executable() == exectutable {
+               if strings.HasPrefix(process.Executable(), execPrefix) {
                        return process
                }
        }
diff --git a/pkg/virt-handler/isolation/process_test.go 
b/pkg/virt-handler/isolation/process_test.go
index de7d1449d..1a882e129 100644
--- a/pkg/virt-handler/isolation/process_test.go
+++ b/pkg/virt-handler/isolation/process_test.go
@@ -57,17 +57,17 @@ var _ = Describe("process", func() {
                )
        })
 
-       Context("lookup process by executable", func() {
+       Context("lookup process by executable prefix", func() {
                procStub5 := ProcessStub{ppid: 100, pid: 220, binary: 
processTestExecPath}
 
                DescribeTable("should find no process",
-                       func(processes []ps.Process, executable string) {
-                               Expect(lookupProcessByExecutable(processes, 
executable)).To(BeNil())
+                       func(processes []ps.Process, executablePrefix string) {
+                               
Expect(lookupProcessByExecutablePrefix(processes, executablePrefix)).To(BeNil())
                        },
-                       Entry("given no input processes and empty string as 
executable",
+                       Entry("given no input processes and empty string as 
executable prefix",
                                emptyProcessList, "",
                        ),
-                       Entry("given no input processes and executable",
+                       Entry("given no input processes and executable prefix",
                                emptyProcessList, "processA",
                        ),
                        Entry("given processes list and empty string",
@@ -75,15 +75,15 @@ var _ = Describe("process", func() {
                        ),
                )
 
-               DescribeTable("should return the first occurrence of a process 
that runs the given executable",
-                       func(processes []ps.Process, executable string, 
expectedProcess ps.Process) {
-                               Expect(lookupProcessByExecutable(processes, 
executable)).
+               DescribeTable("should return the first occurrence of a process 
with the given executable prefix",
+                       func(processes []ps.Process, executablePrefix string, 
expectedProcess ps.Process) {
+                               
Expect(lookupProcessByExecutablePrefix(processes, executablePrefix)).
                                        To(Equal(expectedProcess))
                        },
-                       Entry("given processes list that includes exactly one 
process that runs the executable",
+                       Entry("given processes list that includes exactly one 
process with the executable prefix",
                                testProcesses, processTestExecPath, procStub1,
                        ),
-                       Entry("given processes list that includes more than one 
process that runs the executable",
+                       Entry("given processes list that includes more than one 
process with the executable prefix",
                                append(testProcesses, procStub5), 
processTestExecPath, procStub1,
                        ),
                )
-- 
2.41.0


>From 30a544b57182fff64646eede6eba360cd0ceb0c3 Mon Sep 17 00:00:00 2001
From: Vasiliy Ulyanov <vulya...@suse.de>
Date: Tue, 4 Jul 2023 14:04:57 +0200
Subject: [PATCH 2/2] tests: Detect the qemu emulator binary in runtime

Avoid hardcoding qemu-kvm since the underlying images may use e.g.
qemu-system-*.

Signed-off-by: Vasiliy Ulyanov <vulya...@suse.de>
---
 tests/realtime/BUILD.bazel      |  1 +
 tests/realtime/realtime.go      | 28 +++++++++++++++++-----------
 tests/security_features_test.go | 14 +++++++-------
 tests/utils.go                  | 16 ++++++++++++----
 tests/vmi_configuration_test.go | 12 ++++++++----
 5 files changed, 45 insertions(+), 26 deletions(-)

diff --git a/tests/realtime/BUILD.bazel b/tests/realtime/BUILD.bazel
index 3718467e1..9d66eb7df 100644
--- a/tests/realtime/BUILD.bazel
+++ b/tests/realtime/BUILD.bazel
@@ -18,6 +18,7 @@ go_library(
         "//tests/framework/kubevirt:go_default_library",
         "//tests/libvmi:go_default_library",
         "//tests/libwait:go_default_library",
+        "//tests/testsuite:go_default_library",
         "//tests/util:go_default_library",
         "//vendor/github.com/onsi/ginkgo/v2:go_default_library",
         "//vendor/github.com/onsi/gomega:go_default_library",
diff --git a/tests/realtime/realtime.go b/tests/realtime/realtime.go
index a9e93161c..0e1249f0d 100644
--- a/tests/realtime/realtime.go
+++ b/tests/realtime/realtime.go
@@ -2,6 +2,7 @@ package realtime
 
 import (
        "context"
+       "path/filepath"
        "strconv"
        "strings"
 
@@ -25,6 +26,7 @@ import (
        "kubevirt.io/kubevirt/tests/framework/kubevirt"
        "kubevirt.io/kubevirt/tests/libvmi"
        "kubevirt.io/kubevirt/tests/libwait"
+       "kubevirt.io/kubevirt/tests/testsuite"
        "kubevirt.io/kubevirt/tests/util"
 )
 
@@ -56,12 +58,12 @@ func newFedoraRealtime(realtimeMask string) 
*v1.VirtualMachineInstance {
        )
 }
 
-func byStartingTheVMI(vmi *v1.VirtualMachineInstance, virtClient 
kubecli.KubevirtClient) {
+func byStartingTheVMI(vmi *v1.VirtualMachineInstance, virtClient 
kubecli.KubevirtClient) *v1.VirtualMachineInstance {
        By("Starting a VirtualMachineInstance")
        var err error
-       vmi, err = 
virtClient.VirtualMachineInstance(util.NamespaceTestDefault).Create(context.Background(),
 vmi)
+       vmi, err = 
virtClient.VirtualMachineInstance(testsuite.GetTestNamespace(vmi)).Create(context.Background(),
 vmi)
        Expect(err).ToNot(HaveOccurred())
-       libwait.WaitForSuccessfulVMIStart(vmi)
+       return libwait.WaitForSuccessfulVMIStart(vmi)
 }
 
 var _ = Describe("[sig-compute-realtime][Serial]Realtime", Serial, 
decorators.SigComputeRealtime, func() {
@@ -81,15 +83,17 @@ var _ = Describe("[sig-compute-realtime][Serial]Realtime", 
Serial, decorators.Si
 
                It("when no mask is specified", func() {
                        const noMask = ""
-                       vmi := newFedoraRealtime(noMask)
-                       byStartingTheVMI(vmi, virtClient)
+                       vmi := byStartingTheVMI(newFedoraRealtime(noMask), 
virtClient)
                        By("Validating VCPU scheduler placement information")
                        pod := tests.GetRunningPodByVirtualMachineInstance(vmi, 
util.NamespaceTestDefault)
+                       emulator, err := tests.GetRunningVMIEmulator(vmi)
+                       Expect(err).ToNot(HaveOccurred())
+                       emulator = filepath.Base(emulator)
                        psOutput, err := exec.ExecuteCommandOnPod(
                                virtClient,
                                pod,
                                "compute",
-                               []string{tests.BinBash, "-c", "ps -LC qemu-kvm 
-o policy,rtprio,psr|grep FF| awk '{print $2}'"},
+                               []string{tests.BinBash, "-c", "ps -LC " + 
emulator + " -o policy,rtprio,psr|grep FF| awk '{print $2}'"},
                        )
                        Expect(err).ToNot(HaveOccurred())
                        slice := strings.Split(strings.TrimSpace(psOutput), 
"\n")
@@ -102,7 +106,7 @@ var _ = Describe("[sig-compute-realtime][Serial]Realtime", 
Serial, decorators.Si
                                virtClient,
                                pod,
                                "compute",
-                               []string{tests.BinBash, "-c", "grep 'locked 
memory' /proc/$(ps -C qemu-kvm -o pid --noheader|xargs)/limits |tr -s ' '| awk 
'{print $4\" \"$5}'"},
+                               []string{tests.BinBash, "-c", "grep 'locked 
memory' /proc/$(ps -C " + emulator + " -o pid --noheader|xargs)/limits |tr -s ' 
'| awk '{print $4\" \"$5}'"},
                        )
                        Expect(err).ToNot(HaveOccurred())
                        limits := strings.Split(strings.TrimSpace(psOutput), " 
")
@@ -123,15 +127,17 @@ var _ = 
Describe("[sig-compute-realtime][Serial]Realtime", Serial, decorators.Si
                })
 
                It("when realtime mask is specified", func() {
-                       vmi := newFedoraRealtime("0-1,^1")
-                       byStartingTheVMI(vmi, virtClient)
+                       vmi := byStartingTheVMI(newFedoraRealtime("0-1,^1"), 
virtClient)
                        pod := tests.GetRunningPodByVirtualMachineInstance(vmi, 
util.NamespaceTestDefault)
                        By("Validating VCPU scheduler placement information")
+                       emulator, err := tests.GetRunningVMIEmulator(vmi)
+                       Expect(err).ToNot(HaveOccurred())
+                       emulator = filepath.Base(emulator)
                        psOutput, err := exec.ExecuteCommandOnPod(
                                virtClient,
                                pod,
                                "compute",
-                               []string{tests.BinBash, "-c", "ps -LC qemu-kvm 
-o policy,rtprio,psr|grep FF| awk '{print $2}'"},
+                               []string{tests.BinBash, "-c", "ps -LC " + 
emulator + " -o policy,rtprio,psr|grep FF| awk '{print $2}'"},
                        )
                        Expect(err).ToNot(HaveOccurred())
                        slice := strings.Split(strings.TrimSpace(psOutput), 
"\n")
@@ -143,7 +149,7 @@ var _ = Describe("[sig-compute-realtime][Serial]Realtime", 
Serial, decorators.Si
                                virtClient,
                                pod,
                                "compute",
-                               []string{tests.BinBash, "-c", "ps -TcC qemu-kvm 
 |grep CPU |awk '{print $3\" \" $8}'"},
+                               []string{tests.BinBash, "-c", "ps -TcC " + 
emulator + " |grep CPU |awk '{print $3\" \" $8}'"},
                        )
                        Expect(err).ToNot(HaveOccurred())
                        slice = strings.Split(strings.TrimSpace(psOutput), "\n")
diff --git a/tests/security_features_test.go b/tests/security_features_test.go
index cc49ba038..42adfe1d6 100644
--- a/tests/security_features_test.go
+++ b/tests/security_features_test.go
@@ -129,9 +129,9 @@ var _ = Describe("[Serial][sig-compute]SecurityFeatures", 
Serial, decorators.Sig
                                Expect(err).ToNot(HaveOccurred())
                                libwait.WaitForSuccessfulVMIStart(vmi)
 
-                               domSpec, err := 
tests.GetRunningVMIDomainSpec(vmi)
+                               emulator, err := 
tests.GetRunningVMIEmulator(vmi)
                                Expect(err).ToNot(HaveOccurred())
-                               emulator := "[/]" + 
strings.TrimPrefix(domSpec.Devices.Emulator, "/")
+                               emulator = "[/]" + strings.TrimPrefix(emulator, 
"/")
 
                                pod := 
tests.GetRunningPodByVirtualMachineInstance(vmi, 
testsuite.GetTestNamespace(vmi))
                                qemuProcessSelinuxContext, err := 
exec.ExecuteCommandOnPod(
@@ -142,10 +142,10 @@ var _ = Describe("[Serial][sig-compute]SecurityFeatures", 
Serial, decorators.Sig
                                )
                                Expect(err).ToNot(HaveOccurred())
 
-                               By("Checking that qemu-kvm process is of the 
SELinux type container_t")
+                               By("Checking that qemu process is of the 
SELinux type container_t")
                                Expect(strings.Split(qemuProcessSelinuxContext, 
":")[2]).To(Equal("container_t"))
 
-                               By("Checking that qemu-kvm process has SELinux 
category_set")
+                               By("Checking that qemu process has SELinux 
category_set")
                                Expect(strings.Split(qemuProcessSelinuxContext, 
":")).To(HaveLen(5))
 
                                err = 
virtClient.VirtualMachineInstance(testsuite.GetTestNamespace(vmi)).Delete(context.Background(),
 vmi.Name, &metav1.DeleteOptions{})
@@ -205,9 +205,9 @@ var _ = Describe("[Serial][sig-compute]SecurityFeatures", 
Serial, decorators.Sig
                                libwait.WaitUntilVMIReady(vmi, 
console.LoginToAlpine)
 
                                By("Fetching virt-launcher Pod")
-                               domSpec, err := 
tests.GetRunningVMIDomainSpec(vmi)
+                               emulator, err := 
tests.GetRunningVMIEmulator(vmi)
                                Expect(err).ToNot(HaveOccurred())
-                               emulator := "[/]" + 
strings.TrimPrefix(domSpec.Devices.Emulator, "/")
+                               emulator = "[/]" + strings.TrimPrefix(emulator, 
"/")
 
                                pod, err := 
libvmi.GetPodByVirtualMachineInstance(vmi, testsuite.NamespacePrivileged)
                                Expect(err).ToNot(HaveOccurred())
@@ -219,7 +219,7 @@ var _ = Describe("[Serial][sig-compute]SecurityFeatures", 
Serial, decorators.Sig
                                )
                                Expect(err).ToNot(HaveOccurred())
 
-                               By("Checking that qemu-kvm process is of the 
SELinux type virt_launcher.process")
+                               By("Checking that qemu process is of the 
SELinux type virt_launcher.process")
                                Expect(strings.Split(qemuProcessSelinuxContext, 
":")[2]).To(Equal(launcherType))
 
                                By("Verifying SELinux context contains custom 
type in pod")
diff --git a/tests/utils.go b/tests/utils.go
index 6b5ab7de8..276046454 100644
--- a/tests/utils.go
+++ b/tests/utils.go
@@ -363,10 +363,10 @@ func GetProcessName(pod *k8sv1.Pod, pid string) (output 
string, err error) {
        return
 }
 
-func GetVcpuMask(pod *k8sv1.Pod, cpu string) (output string, err error) {
+func GetVcpuMask(pod *k8sv1.Pod, emulator, cpu string) (output string, err 
error) {
        virtClient := kubevirt.Client()
 
-       pscmd := "ps -LC qemu-kvm -o lwp,comm| grep \"CPU " + cpu + "\"  | cut 
-f 1 -d \"C\""
+       pscmd := "ps -LC " + emulator + " -o lwp,comm| grep \"CPU " + cpu + "\" 
 | cut -f 1 -d \"C\""
        output, err = exec.ExecuteCommandOnPod(
                virtClient,
                pod,
@@ -383,14 +383,14 @@ func GetVcpuMask(pod *k8sv1.Pod, cpu string) (output 
string, err error) {
        return output, err
 }
 
-func GetKvmPitMask(pod *k8sv1.Pod, nodeName string) (output string, err error) 
{
+func GetKvmPitMask(pod *k8sv1.Pod, emulator, nodeName string) (output string, 
err error) {
        virtClient := kubevirt.Client()
 
        output, err = exec.ExecuteCommandOnPod(
                virtClient,
                pod,
                "compute",
-               []string{"ps", "-C", "qemu-kvm", "-o", "pid", "--noheader"},
+               []string{"ps", "-C", emulator, "-o", "pid", "--noheader"},
        )
        Expect(err).ToNot(HaveOccurred())
        qemupid := strings.TrimSpace(strings.Trim(output, "\n"))
@@ -1748,6 +1748,14 @@ func GetRunningVMIDomainSpec(vmi 
*v1.VirtualMachineInstance) (*launcherApi.Domai
        return &runningVMISpec, err
 }
 
+func GetRunningVMIEmulator(vmi *v1.VirtualMachineInstance) (string, error) {
+       domSpec, err := GetRunningVMIDomainSpec(vmi)
+       if err != nil {
+               return "", err
+       }
+       return domSpec.Devices.Emulator, nil
+}
+
 func ForwardPorts(pod *k8sv1.Pod, ports []string, stop chan struct{}, 
readyTimeout time.Duration) error {
        errChan := make(chan error, 1)
        readyChan := make(chan struct{})
diff --git a/tests/vmi_configuration_test.go b/tests/vmi_configuration_test.go
index cfdd1afe1..a574a911d 100644
--- a/tests/vmi_configuration_test.go
+++ b/tests/vmi_configuration_test.go
@@ -2506,18 +2506,22 @@ var _ = Describe("[sig-compute]Configurations", 
decorators.SigCompute, func() {
                                        &expect.BExp{R: "2"},
                                }, 15)).To(Succeed())
 
+                               emulator, err := 
tests.GetRunningVMIEmulator(vmi)
+                               Expect(err).ToNot(HaveOccurred())
+                               emulator = filepath.Base(emulator)
+
                                virtClient := kubevirt.Client()
-                               pscmd := []string{"ps", "-C", "qemu-kvm", "-o", 
"pid", "--noheader"}
+                               pscmd := []string{"ps", "-C", emulator, "-o", 
"pid", "--noheader"}
                                _, err = exec.ExecuteCommandOnPod(
                                        virtClient, readyPod, "compute", pscmd)
-                               // do not check for kvm-pit thread if qemu-kvm 
is not in use
+                               // do not check for kvm-pit thread if qemu is 
not in use
                                if err != nil {
                                        return
                                }
-                               kvmpitmask, err := 
tests.GetKvmPitMask(readyPod, node)
+                               kvmpitmask, err := 
tests.GetKvmPitMask(readyPod, emulator, node)
                                Expect(err).ToNot(HaveOccurred())
 
-                               vcpuzeromask, err := 
tests.GetVcpuMask(readyPod, "0")
+                               vcpuzeromask, err := 
tests.GetVcpuMask(readyPod, emulator, "0")
                                Expect(err).ToNot(HaveOccurred())
 
                                Expect(kvmpitmask).To(Equal(vcpuzeromask))
-- 
2.41.0

Reply via email to