Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kubevirt for openSUSE:Factory 
checked in at 2021-09-02 23:20:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kubevirt (Old)
 and      /work/SRC/openSUSE:Factory/.kubevirt.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kubevirt"

Thu Sep  2 23:20:18 2021 rev:29 rq:915714 version:0.44.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/kubevirt/kubevirt.changes        2021-08-27 
21:44:58.786045700 +0200
+++ /work/SRC/openSUSE:Factory/.kubevirt.new.1899/kubevirt.changes      
2021-09-02 23:20:37.772577025 +0200
@@ -1,0 +2,6 @@
+Fri Aug 27 11:53:09 UTC 2021 - Vasily Ulyanov <vasily.ulya...@suse.com>
+
+- Fix issue with recent qemu-img
+  0001-Specify-format-of-the-backing-image.patch
+
+-------------------------------------------------------------------

New:
----
  0001-Specify-format-of-the-backing-image.patch

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

Other differences:
------------------
++++++ kubevirt.spec ++++++
--- /var/tmp/diff_new_pack.TFf71D/_old  2021-09-02 23:20:38.344577738 +0200
+++ /var/tmp/diff_new_pack.TFf71D/_new  2021-09-02 23:20:38.348577743 +0200
@@ -28,6 +28,7 @@
 Source2:        kubevirt_containers_meta
 Source3:        kubevirt_containers_meta.service
 Source100:      %{name}-rpmlintrc
+Patch0:         0001-Specify-format-of-the-backing-image.patch
 BuildRequires:  glibc-devel-static
 BuildRequires:  golang-packaging
 BuildRequires:  pkgconfig

++++++ 0001-Specify-format-of-the-backing-image.patch ++++++
>From da2d833ad71d79e468a98f23f77db547ca9319e3 Mon Sep 17 00:00:00 2001
From: Vasiliy Ulyanov <vulya...@suse.de>
Date: Fri, 27 Aug 2021 13:38:24 +0200
Subject: [PATCH] Specify format of the backing image

Latest qemu-img deprecates use of -b without -F.

Signed-off-by: Vasiliy Ulyanov <vulya...@suse.de>
---
 pkg/container-disk/validation.go              | 13 ++---
 pkg/ephemeral-disk/ephemeral-disk.go          | 50 +++++++++++++++----
 pkg/virt-handler/isolation/BUILD.bazel        |  2 +-
 pkg/virt-handler/isolation/validation.go      |  6 +--
 .../virtwrap/converter/converter.go           | 23 +--------
 pkg/virt-launcher/virtwrap/manager.go         |  4 +-
 6 files changed, 52 insertions(+), 46 deletions(-)

diff --git a/pkg/container-disk/validation.go b/pkg/container-disk/validation.go
index fcc4fa023..4160d4f15 100644
--- a/pkg/container-disk/validation.go
+++ b/pkg/container-disk/validation.go
@@ -2,20 +2,15 @@ package containerdisk
 
 import (
        "fmt"
+
+       ephemeraldisk "kubevirt.io/kubevirt/pkg/ephemeral-disk"
 )
 
 const (
        DiskSourceFallbackPath = "/disk"
 )
 
-type DiskInfo struct {
-       Format      string `json:"format"`
-       BackingFile string `json:"backing-filename"`
-       ActualSize  int    `json:"actual-size"`
-       VirtualSize int    `json:"virtual-size"`
-}
-
-func VerifyQCOW2(diskInfo *DiskInfo) error {
+func VerifyQCOW2(diskInfo *ephemeraldisk.DiskInfo) error {
        if diskInfo.Format != "qcow2" {
                return fmt.Errorf("expected a disk format of qcow2, but got 
'%v'", diskInfo.Format)
        }
@@ -26,7 +21,7 @@ func VerifyQCOW2(diskInfo *DiskInfo) error {
        return nil
 }
 
-func VerifyImage(diskInfo *DiskInfo) error {
+func VerifyImage(diskInfo *ephemeraldisk.DiskInfo) error {
        switch diskInfo.Format {
        case "qcow2":
                return VerifyQCOW2(diskInfo)
diff --git a/pkg/ephemeral-disk/ephemeral-disk.go 
b/pkg/ephemeral-disk/ephemeral-disk.go
index c88c21f64..fb0a51b32 100644
--- a/pkg/ephemeral-disk/ephemeral-disk.go
+++ b/pkg/ephemeral-disk/ephemeral-disk.go
@@ -20,6 +20,7 @@
 package ephemeraldisk
 
 import (
+       "encoding/json"
        "fmt"
        "os"
        "os/exec"
@@ -34,6 +35,13 @@ const (
        ephemeralDiskPVCBaseDir = "/var/run/kubevirt-private/vmi-disks"
 )
 
+type DiskInfo struct {
+       Format      string `json:"format"`
+       BackingFile string `json:"backing-filename"`
+       ActualSize  int    `json:"actual-size"`
+       VirtualSize int    `json:"virtual-size"`
+}
+
 type EphemeralDiskCreatorInterface interface {
        CreateBackedImageForVolume(volume v1.Volume, backingFile string) error
        CreateEphemeralImages(vmi *v1.VirtualMachineInstance) error
@@ -130,14 +138,36 @@ func (c *ephemeralDiskCreator) CreateEphemeralImages(vmi 
*v1.VirtualMachineInsta
 }
 
 func createBackingDisk(backingFile string, imagePath string) ([]byte, error) {
-       // #nosec No risk for attacket injection. Parameters are predefined 
strings
-       cmd := exec.Command("qemu-img",
-               "create",
-               "-f",
-               "qcow2",
-               "-b",
-               backingFile,
-               imagePath,
-       )
-       return cmd.CombinedOutput()
+       if backingInfo, err := GetImageInfo(backingFile); err != nil {
+               return nil, err
+       } else {
+               // #nosec No risk for attacker injection. Parameters are 
predefined strings
+               cmd := exec.Command("qemu-img",
+                       "create",
+                       "-f",
+                       "qcow2",
+                       "-b",
+                       backingFile,
+                       "-F",
+                       backingInfo.Format,
+                       imagePath,
+               )
+               return cmd.CombinedOutput()
+       }
+}
+
+func GetImageInfo(imagePath string) (*DiskInfo, error) {
+       // #nosec No risk for attacker injection. Only get information about an 
image
+       out, err := exec.Command(
+               "/usr/bin/qemu-img", "info", imagePath, "--output", "json",
+       ).Output()
+       if err != nil {
+               return nil, fmt.Errorf("failed to invoke qemu-img: %v", err)
+       }
+       info := &DiskInfo{}
+       err = json.Unmarshal(out, info)
+       if err != nil {
+               return nil, fmt.Errorf("failed to parse disk info: %v", err)
+       }
+       return info, err
 }
diff --git a/pkg/virt-handler/isolation/BUILD.bazel 
b/pkg/virt-handler/isolation/BUILD.bazel
index 7284151d8..5c38b92d2 100644
--- a/pkg/virt-handler/isolation/BUILD.bazel
+++ b/pkg/virt-handler/isolation/BUILD.bazel
@@ -13,7 +13,7 @@ go_library(
     importpath = "kubevirt.io/kubevirt/pkg/virt-handler/isolation",
     visibility = ["//visibility:public"],
     deps = [
-        "//pkg/container-disk:go_default_library",
+        "//pkg/ephemeral-disk:go_default_library",
         "//pkg/util:go_default_library",
         "//pkg/virt-handler/cgroup:go_default_library",
         "//pkg/virt-handler/cmd-client:go_default_library",
diff --git a/pkg/virt-handler/isolation/validation.go 
b/pkg/virt-handler/isolation/validation.go
index a5d507ddd..9c09405a6 100644
--- a/pkg/virt-handler/isolation/validation.go
+++ b/pkg/virt-handler/isolation/validation.go
@@ -8,14 +8,14 @@ import (
        v1 "kubevirt.io/client-go/api/v1"
        virt_chroot "kubevirt.io/kubevirt/pkg/virt-handler/virt-chroot"
 
-       containerdisk "kubevirt.io/kubevirt/pkg/container-disk"
+       ephemeraldisk "kubevirt.io/kubevirt/pkg/ephemeral-disk"
 )
 
 const (
        QEMUIMGPath = "/usr/bin/qemu-img"
 )
 
-func GetImageInfo(imagePath string, context IsolationResult, config 
*v1.DiskVerification) (*containerdisk.DiskInfo, error) {
+func GetImageInfo(imagePath string, context IsolationResult, config 
*v1.DiskVerification) (*ephemeraldisk.DiskInfo, error) {
        memoryLimit := fmt.Sprintf("%d", config.MemoryLimit.Value())
 
        // #nosec g204 no risk to use MountNamespace()  argument as it returns 
a fixed string of "/proc/<pid>/ns/mnt"
@@ -32,7 +32,7 @@ func GetImageInfo(imagePath string, context IsolationResult, 
config *v1.DiskVeri
                return nil, fmt.Errorf("failed to invoke qemu-img: %v", err)
        }
 
-       info := &containerdisk.DiskInfo{}
+       info := &ephemeraldisk.DiskInfo{}
        err = json.Unmarshal(out, info)
        if err != nil {
                return nil, fmt.Errorf("failed to parse disk info: %v", err)
diff --git a/pkg/virt-launcher/virtwrap/converter/converter.go 
b/pkg/virt-launcher/virtwrap/converter/converter.go
index 540235aa5..81d6fc8e3 100644
--- a/pkg/virt-launcher/virtwrap/converter/converter.go
+++ b/pkg/virt-launcher/virtwrap/converter/converter.go
@@ -26,10 +26,8 @@ package converter
 */
 
 import (
-       "encoding/json"
        "fmt"
        "os"
-       "os/exec"
        "path/filepath"
        "strconv"
        "strings"
@@ -103,7 +101,7 @@ type ConverterContext struct {
        IsBlockDV             map[string]bool
        HotplugVolumes        map[string]v1.VolumeStatus
        PermanentVolumes      map[string]v1.VolumeStatus
-       DiskType              map[string]*containerdisk.DiskInfo
+       DiskType              map[string]*ephemeraldisk.DiskInfo
        SRIOVDevices          []api.HostDevice
        SMBios                *cmdv1.SMBios
        GpuDevices            []string
@@ -452,7 +450,7 @@ func SetDriverCacheMode(disk *api.Disk, directIOChecker 
DirectIOChecker) error {
 }
 
 func isPreAllocated(path string) bool {
-       diskInf, err := GetImageInfo(path)
+       diskInf, err := ephemeraldisk.GetImageInfo(path)
        if err != nil {
                return false
        }
@@ -2021,23 +2019,6 @@ func createHostDevicesFromMdevUUIDList(mdevUuidList 
[]string) ([]api.HostDevice,
        return hds, nil
 }
 
-func GetImageInfo(imagePath string) (*containerdisk.DiskInfo, error) {
-
-       // #nosec No risk for attacket injection. Only get information about an 
image
-       out, err := exec.Command(
-               "/usr/bin/qemu-img", "info", imagePath, "--output", "json",
-       ).Output()
-       if err != nil {
-               return nil, fmt.Errorf("failed to invoke qemu-img: %v", err)
-       }
-       info := &containerdisk.DiskInfo{}
-       err = json.Unmarshal(out, info)
-       if err != nil {
-               return nil, fmt.Errorf("failed to parse disk info: %v", err)
-       }
-       return info, err
-}
-
 func needsSCSIControler(vmi *v1.VirtualMachineInstance) bool {
        for _, disk := range vmi.Spec.Domain.Devices.Disks {
                if disk.LUN != nil && disk.LUN.Bus == "scsi" {
diff --git a/pkg/virt-launcher/virtwrap/manager.go 
b/pkg/virt-launcher/virtwrap/manager.go
index 9c14deed5..1617827c9 100644
--- a/pkg/virt-launcher/virtwrap/manager.go
+++ b/pkg/virt-launcher/virtwrap/manager.go
@@ -672,7 +672,7 @@ func (l *LibvirtDomainManager) generateConverterContext(vmi 
*v1.VirtualMachineIn
        // Check if PVC volumes are block volumes
        isBlockPVCMap := make(map[string]bool)
        isBlockDVMap := make(map[string]bool)
-       diskInfo := make(map[string]*containerdisk.DiskInfo)
+       diskInfo := make(map[string]*ephemeraldisk.DiskInfo)
        for i, volume := range vmi.Spec.Volumes {
                if volume.VolumeSource.PersistentVolumeClaim != nil {
                        isBlockPVC := false
@@ -687,7 +687,7 @@ func (l *LibvirtDomainManager) generateConverterContext(vmi 
*v1.VirtualMachineIn
                        if err != nil {
                                return nil, err
                        }
-                       info, err := converter.GetImageInfo(image)
+                       info, err := ephemeraldisk.GetImageInfo(image)
                        if err != nil {
                                return nil, err
                        }
-- 
2.32.0

Reply via email to