diff mbox series

[1/1] tests/vm: Allow to set qemu-img path

Message ID 20191114134246.12073-2-wainersm@redhat.com
State New
Headers show
Series tests/vm: Allow to set path to qemu-img | expand

Commit Message

Wainer dos Santos Moschetta Nov. 14, 2019, 1:42 p.m. UTC
By default VM build test use qemu-img from system's PATH to
create the image disk. Due the lack of qemu-img on the system
or the desire to simply use a version built with QEMU, it would
be nice to allow one to set its path. So this patch makes that
possible by reading the path to qemu-img from QEMU_IMG if set,
otherwise it fallback to default behavior.

Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
---
 docs/devel/testing.rst    | 6 ++++--
 tests/vm/Makefile.include | 1 +
 tests/vm/basevm.py        | 5 +++++
 tests/vm/centos           | 2 +-
 tests/vm/fedora           | 4 +---
 tests/vm/freebsd          | 3 +--
 tests/vm/netbsd           | 3 +--
 tests/vm/openbsd          | 3 +--
 tests/vm/ubuntu.i386      | 2 +-
 9 files changed, 16 insertions(+), 13 deletions(-)

Comments

Alex Bennée Dec. 3, 2019, 11:35 a.m. UTC | #1
Wainer dos Santos Moschetta <wainersm@redhat.com> writes:

> By default VM build test use qemu-img from system's PATH to
> create the image disk. Due the lack of qemu-img on the system
> or the desire to simply use a version built with QEMU, it would
> be nice to allow one to set its path. So this patch makes that
> possible by reading the path to qemu-img from QEMU_IMG if set,
> otherwise it fallback to default behavior.
>
> Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>

Queued to testing/next, thanks.

> ---
>  docs/devel/testing.rst    | 6 ++++--
>  tests/vm/Makefile.include | 1 +
>  tests/vm/basevm.py        | 5 +++++
>  tests/vm/centos           | 2 +-
>  tests/vm/fedora           | 4 +---
>  tests/vm/freebsd          | 3 +--
>  tests/vm/netbsd           | 3 +--
>  tests/vm/openbsd          | 3 +--
>  tests/vm/ubuntu.i386      | 2 +-
>  9 files changed, 16 insertions(+), 13 deletions(-)
>
> diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
> index 8e981e062d..9be6cd4410 100644
> --- a/docs/devel/testing.rst
> +++ b/docs/devel/testing.rst
> @@ -418,13 +418,15 @@ access, so they SHOULD NOT be exposed to external interfaces if you are
>  concerned about attackers taking control of the guest and potentially
>  exploiting a QEMU security bug to compromise the host.
>  
> -QEMU binary
> ------------
> +QEMU binaries
> +-------------
>  
>  By default, qemu-system-x86_64 is searched in $PATH to run the guest. If there
>  isn't one, or if it is older than 2.10, the test won't work. In this case,
>  provide the QEMU binary in env var: ``QEMU=/path/to/qemu-2.10+``.
>  
> +Likewise the path to qemu-img can be set in QEMU_IMG environment variable.
> +
>  Make jobs
>  ---------
>  
> diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
> index fea348e845..9e7c46a473 100644
> --- a/tests/vm/Makefile.include
> +++ b/tests/vm/Makefile.include
> @@ -34,6 +34,7 @@ vm-help vm-test:
>  	@echo "    DEBUG=1              	 - Enable verbose output on host and interactive debugging"
>  	@echo "    V=1				 - Enable verbose ouput on host and guest commands"
>  	@echo "    QEMU=/path/to/qemu		 - Change path to QEMU binary"
> +	@echo "    QEMU_IMG=/path/to/qemu-img	 - Change path to qemu-img tool"
>  
>  vm-build-all: $(addprefix vm-build-, $(IMAGES))
>  
> diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
> index 91a9226026..d1efeb3646 100755
> --- a/tests/vm/basevm.py
> +++ b/tests/vm/basevm.py
> @@ -152,6 +152,11 @@ class BaseVM(object):
>      def build_image(self, img):
>          raise NotImplementedError
>  
> +    def exec_qemu_img(self, *args):
> +        cmd = [os.environ.get("QEMU_IMG", "qemu-img")]
> +        cmd.extend(list(args))
> +        subprocess.check_call(cmd)
> +
>      def add_source_dir(self, src_dir):
>          name = "data-" + hashlib.sha1(src_dir.encode("utf-8")).hexdigest()[:5]
>          tarfile = os.path.join(self._tmpdir, name + ".tar")
> diff --git a/tests/vm/centos b/tests/vm/centos
> index 53976f1c4c..eac07dacd6 100755
> --- a/tests/vm/centos
> +++ b/tests/vm/centos
> @@ -68,7 +68,7 @@ class CentosVM(basevm.BaseVM):
>          sys.stderr.write("Extracting the image...\n")
>          subprocess.check_call(["ln", "-f", cimg, img_tmp + ".xz"])
>          subprocess.check_call(["xz", "--keep", "-dvf", img_tmp + ".xz"])
> -        subprocess.check_call(["qemu-img", "resize", img_tmp, "50G"])
> +        self.exec_qemu_img("resize", img_tmp, "50G")
>          self.boot(img_tmp, extra_args = ["-cdrom", self._gen_cloud_init_iso()])
>          self.wait_ssh()
>          self.ssh_root_check("touch /etc/cloud/cloud-init.disabled")
> diff --git a/tests/vm/fedora b/tests/vm/fedora
> index 7fec1479fb..8e270fc0f0 100755
> --- a/tests/vm/fedora
> +++ b/tests/vm/fedora
> @@ -74,9 +74,7 @@ class FedoraVM(basevm.BaseVM):
>  
>          self.print_step("Preparing iso and disk image")
>          subprocess.check_call(["cp", "-f", cimg, iso])
> -        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
> -                               img_tmp, self.size])
> -
> +        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
>          self.print_step("Booting installer")
>          self.boot(img_tmp, extra_args = [
>              "-bios", "pc-bios/bios-256k.bin",
> diff --git a/tests/vm/freebsd b/tests/vm/freebsd
> index 2a19461a90..1825cc5821 100755
> --- a/tests/vm/freebsd
> +++ b/tests/vm/freebsd
> @@ -82,8 +82,7 @@ class FreeBSDVM(basevm.BaseVM):
>          self.print_step("Preparing iso and disk image")
>          subprocess.check_call(["cp", "-f", cimg, iso_xz])
>          subprocess.check_call(["xz", "-dvf", iso_xz])
> -        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
> -                               img_tmp, self.size])
> +        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
>  
>          self.print_step("Booting installer")
>          self.boot(img_tmp, extra_args = [
> diff --git a/tests/vm/netbsd b/tests/vm/netbsd
> index 611e6cc5b5..ec6f3563b2 100755
> --- a/tests/vm/netbsd
> +++ b/tests/vm/netbsd
> @@ -77,8 +77,7 @@ class NetBSDVM(basevm.BaseVM):
>  
>          self.print_step("Preparing iso and disk image")
>          subprocess.check_call(["ln", "-f", cimg, iso])
> -        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
> -                               img_tmp, self.size])
> +        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
>  
>          self.print_step("Booting installer")
>          self.boot(img_tmp, extra_args = [
> diff --git a/tests/vm/openbsd b/tests/vm/openbsd
> index b92c39f89a..6df5162dbf 100755
> --- a/tests/vm/openbsd
> +++ b/tests/vm/openbsd
> @@ -73,8 +73,7 @@ class OpenBSDVM(basevm.BaseVM):
>  
>          self.print_step("Preparing iso and disk image")
>          subprocess.check_call(["cp", "-f", cimg, iso])
> -        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
> -                               img_tmp, self.size])
> +        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
>  
>          self.print_step("Booting installer")
>          self.boot(img_tmp, extra_args = [
> diff --git a/tests/vm/ubuntu.i386 b/tests/vm/ubuntu.i386
> index 38f740eabf..39bbe9cc21 100755
> --- a/tests/vm/ubuntu.i386
> +++ b/tests/vm/ubuntu.i386
> @@ -70,7 +70,7 @@ class UbuntuX86VM(basevm.BaseVM):
>              sha256sum="e30091144c73483822b7c27193e9d47346dd1064229da577c3fedcf943f7cfcc")
>          img_tmp = img + ".tmp"
>          subprocess.check_call(["cp", "-f", cimg, img_tmp])
> -        subprocess.check_call(["qemu-img", "resize", img_tmp, "50G"])
> +        self.exec_qemu_img("resize", img_tmp, "50G")
>          self.boot(img_tmp, extra_args = ["-cdrom", self._gen_cloud_init_iso()])
>          self.wait_ssh()
>          self.ssh_root_check("touch /etc/cloud/cloud-init.disabled")
Philippe Mathieu-Daudé Dec. 3, 2019, 4:17 p.m. UTC | #2
On 11/14/19 2:42 PM, Wainer dos Santos Moschetta wrote:
> By default VM build test use qemu-img from system's PATH to
> create the image disk. Due the lack of qemu-img on the system
> or the desire to simply use a version built with QEMU, it would
> be nice to allow one to set its path. So this patch makes that
> possible by reading the path to qemu-img from QEMU_IMG if set,
> otherwise it fallback to default behavior.
> 
> Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> ---
>   docs/devel/testing.rst    | 6 ++++--
>   tests/vm/Makefile.include | 1 +
>   tests/vm/basevm.py        | 5 +++++
>   tests/vm/centos           | 2 +-
>   tests/vm/fedora           | 4 +---
>   tests/vm/freebsd          | 3 +--
>   tests/vm/netbsd           | 3 +--
>   tests/vm/openbsd          | 3 +--
>   tests/vm/ubuntu.i386      | 2 +-
>   9 files changed, 16 insertions(+), 13 deletions(-)
> 
> diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
> index 8e981e062d..9be6cd4410 100644
> --- a/docs/devel/testing.rst
> +++ b/docs/devel/testing.rst
> @@ -418,13 +418,15 @@ access, so they SHOULD NOT be exposed to external interfaces if you are
>   concerned about attackers taking control of the guest and potentially
>   exploiting a QEMU security bug to compromise the host.
>   
> -QEMU binary
> ------------
> +QEMU binaries
> +-------------
>   
>   By default, qemu-system-x86_64 is searched in $PATH to run the guest. If there
>   isn't one, or if it is older than 2.10, the test won't work. In this case,
>   provide the QEMU binary in env var: ``QEMU=/path/to/qemu-2.10+``.
>   
> +Likewise the path to qemu-img can be set in QEMU_IMG environment variable.
> +
>   Make jobs
>   ---------
>   
> diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
> index fea348e845..9e7c46a473 100644
> --- a/tests/vm/Makefile.include
> +++ b/tests/vm/Makefile.include
> @@ -34,6 +34,7 @@ vm-help vm-test:
>   	@echo "    DEBUG=1              	 - Enable verbose output on host and interactive debugging"
>   	@echo "    V=1				 - Enable verbose ouput on host and guest commands"
>   	@echo "    QEMU=/path/to/qemu		 - Change path to QEMU binary"
> +	@echo "    QEMU_IMG=/path/to/qemu-img	 - Change path to qemu-img tool"
>   
>   vm-build-all: $(addprefix vm-build-, $(IMAGES))
>   
> diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
> index 91a9226026..d1efeb3646 100755
> --- a/tests/vm/basevm.py
> +++ b/tests/vm/basevm.py
> @@ -152,6 +152,11 @@ class BaseVM(object):
>       def build_image(self, img):
>           raise NotImplementedError
>   
> +    def exec_qemu_img(self, *args):
> +        cmd = [os.environ.get("QEMU_IMG", "qemu-img")]
> +        cmd.extend(list(args))
> +        subprocess.check_call(cmd)
> +
>       def add_source_dir(self, src_dir):
>           name = "data-" + hashlib.sha1(src_dir.encode("utf-8")).hexdigest()[:5]
>           tarfile = os.path.join(self._tmpdir, name + ".tar")
> diff --git a/tests/vm/centos b/tests/vm/centos
> index 53976f1c4c..eac07dacd6 100755
> --- a/tests/vm/centos
> +++ b/tests/vm/centos
> @@ -68,7 +68,7 @@ class CentosVM(basevm.BaseVM):
>           sys.stderr.write("Extracting the image...\n")
>           subprocess.check_call(["ln", "-f", cimg, img_tmp + ".xz"])
>           subprocess.check_call(["xz", "--keep", "-dvf", img_tmp + ".xz"])
> -        subprocess.check_call(["qemu-img", "resize", img_tmp, "50G"])
> +        self.exec_qemu_img("resize", img_tmp, "50G")
>           self.boot(img_tmp, extra_args = ["-cdrom", self._gen_cloud_init_iso()])
>           self.wait_ssh()
>           self.ssh_root_check("touch /etc/cloud/cloud-init.disabled")
> diff --git a/tests/vm/fedora b/tests/vm/fedora
> index 7fec1479fb..8e270fc0f0 100755
> --- a/tests/vm/fedora
> +++ b/tests/vm/fedora
> @@ -74,9 +74,7 @@ class FedoraVM(basevm.BaseVM):
>   
>           self.print_step("Preparing iso and disk image")
>           subprocess.check_call(["cp", "-f", cimg, iso])
> -        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
> -                               img_tmp, self.size])
> -
> +        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
>           self.print_step("Booting installer")
>           self.boot(img_tmp, extra_args = [
>               "-bios", "pc-bios/bios-256k.bin",
> diff --git a/tests/vm/freebsd b/tests/vm/freebsd
> index 2a19461a90..1825cc5821 100755
> --- a/tests/vm/freebsd
> +++ b/tests/vm/freebsd
> @@ -82,8 +82,7 @@ class FreeBSDVM(basevm.BaseVM):
>           self.print_step("Preparing iso and disk image")
>           subprocess.check_call(["cp", "-f", cimg, iso_xz])
>           subprocess.check_call(["xz", "-dvf", iso_xz])
> -        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
> -                               img_tmp, self.size])
> +        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
>   
>           self.print_step("Booting installer")
>           self.boot(img_tmp, extra_args = [
> diff --git a/tests/vm/netbsd b/tests/vm/netbsd
> index 611e6cc5b5..ec6f3563b2 100755
> --- a/tests/vm/netbsd
> +++ b/tests/vm/netbsd
> @@ -77,8 +77,7 @@ class NetBSDVM(basevm.BaseVM):
>   
>           self.print_step("Preparing iso and disk image")
>           subprocess.check_call(["ln", "-f", cimg, iso])
> -        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
> -                               img_tmp, self.size])
> +        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
>   
>           self.print_step("Booting installer")
>           self.boot(img_tmp, extra_args = [
> diff --git a/tests/vm/openbsd b/tests/vm/openbsd
> index b92c39f89a..6df5162dbf 100755
> --- a/tests/vm/openbsd
> +++ b/tests/vm/openbsd
> @@ -73,8 +73,7 @@ class OpenBSDVM(basevm.BaseVM):
>   
>           self.print_step("Preparing iso and disk image")
>           subprocess.check_call(["cp", "-f", cimg, iso])
> -        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
> -                               img_tmp, self.size])
> +        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
>   
>           self.print_step("Booting installer")
>           self.boot(img_tmp, extra_args = [
> diff --git a/tests/vm/ubuntu.i386 b/tests/vm/ubuntu.i386
> index 38f740eabf..39bbe9cc21 100755
> --- a/tests/vm/ubuntu.i386
> +++ b/tests/vm/ubuntu.i386
> @@ -70,7 +70,7 @@ class UbuntuX86VM(basevm.BaseVM):
>               sha256sum="e30091144c73483822b7c27193e9d47346dd1064229da577c3fedcf943f7cfcc")
>           img_tmp = img + ".tmp"
>           subprocess.check_call(["cp", "-f", cimg, img_tmp])
> -        subprocess.check_call(["qemu-img", "resize", img_tmp, "50G"])
> +        self.exec_qemu_img("resize", img_tmp, "50G")
>           self.boot(img_tmp, extra_args = ["-cdrom", self._gen_cloud_init_iso()])
>           self.wait_ssh()
>           self.ssh_root_check("touch /etc/cloud/cloud-init.disabled")
>
diff mbox series

Patch

diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
index 8e981e062d..9be6cd4410 100644
--- a/docs/devel/testing.rst
+++ b/docs/devel/testing.rst
@@ -418,13 +418,15 @@  access, so they SHOULD NOT be exposed to external interfaces if you are
 concerned about attackers taking control of the guest and potentially
 exploiting a QEMU security bug to compromise the host.
 
-QEMU binary
------------
+QEMU binaries
+-------------
 
 By default, qemu-system-x86_64 is searched in $PATH to run the guest. If there
 isn't one, or if it is older than 2.10, the test won't work. In this case,
 provide the QEMU binary in env var: ``QEMU=/path/to/qemu-2.10+``.
 
+Likewise the path to qemu-img can be set in QEMU_IMG environment variable.
+
 Make jobs
 ---------
 
diff --git a/tests/vm/Makefile.include b/tests/vm/Makefile.include
index fea348e845..9e7c46a473 100644
--- a/tests/vm/Makefile.include
+++ b/tests/vm/Makefile.include
@@ -34,6 +34,7 @@  vm-help vm-test:
 	@echo "    DEBUG=1              	 - Enable verbose output on host and interactive debugging"
 	@echo "    V=1				 - Enable verbose ouput on host and guest commands"
 	@echo "    QEMU=/path/to/qemu		 - Change path to QEMU binary"
+	@echo "    QEMU_IMG=/path/to/qemu-img	 - Change path to qemu-img tool"
 
 vm-build-all: $(addprefix vm-build-, $(IMAGES))
 
diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index 91a9226026..d1efeb3646 100755
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -152,6 +152,11 @@  class BaseVM(object):
     def build_image(self, img):
         raise NotImplementedError
 
+    def exec_qemu_img(self, *args):
+        cmd = [os.environ.get("QEMU_IMG", "qemu-img")]
+        cmd.extend(list(args))
+        subprocess.check_call(cmd)
+
     def add_source_dir(self, src_dir):
         name = "data-" + hashlib.sha1(src_dir.encode("utf-8")).hexdigest()[:5]
         tarfile = os.path.join(self._tmpdir, name + ".tar")
diff --git a/tests/vm/centos b/tests/vm/centos
index 53976f1c4c..eac07dacd6 100755
--- a/tests/vm/centos
+++ b/tests/vm/centos
@@ -68,7 +68,7 @@  class CentosVM(basevm.BaseVM):
         sys.stderr.write("Extracting the image...\n")
         subprocess.check_call(["ln", "-f", cimg, img_tmp + ".xz"])
         subprocess.check_call(["xz", "--keep", "-dvf", img_tmp + ".xz"])
-        subprocess.check_call(["qemu-img", "resize", img_tmp, "50G"])
+        self.exec_qemu_img("resize", img_tmp, "50G")
         self.boot(img_tmp, extra_args = ["-cdrom", self._gen_cloud_init_iso()])
         self.wait_ssh()
         self.ssh_root_check("touch /etc/cloud/cloud-init.disabled")
diff --git a/tests/vm/fedora b/tests/vm/fedora
index 7fec1479fb..8e270fc0f0 100755
--- a/tests/vm/fedora
+++ b/tests/vm/fedora
@@ -74,9 +74,7 @@  class FedoraVM(basevm.BaseVM):
 
         self.print_step("Preparing iso and disk image")
         subprocess.check_call(["cp", "-f", cimg, iso])
-        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
-                               img_tmp, self.size])
-
+        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
         self.print_step("Booting installer")
         self.boot(img_tmp, extra_args = [
             "-bios", "pc-bios/bios-256k.bin",
diff --git a/tests/vm/freebsd b/tests/vm/freebsd
index 2a19461a90..1825cc5821 100755
--- a/tests/vm/freebsd
+++ b/tests/vm/freebsd
@@ -82,8 +82,7 @@  class FreeBSDVM(basevm.BaseVM):
         self.print_step("Preparing iso and disk image")
         subprocess.check_call(["cp", "-f", cimg, iso_xz])
         subprocess.check_call(["xz", "-dvf", iso_xz])
-        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
-                               img_tmp, self.size])
+        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
 
         self.print_step("Booting installer")
         self.boot(img_tmp, extra_args = [
diff --git a/tests/vm/netbsd b/tests/vm/netbsd
index 611e6cc5b5..ec6f3563b2 100755
--- a/tests/vm/netbsd
+++ b/tests/vm/netbsd
@@ -77,8 +77,7 @@  class NetBSDVM(basevm.BaseVM):
 
         self.print_step("Preparing iso and disk image")
         subprocess.check_call(["ln", "-f", cimg, iso])
-        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
-                               img_tmp, self.size])
+        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
 
         self.print_step("Booting installer")
         self.boot(img_tmp, extra_args = [
diff --git a/tests/vm/openbsd b/tests/vm/openbsd
index b92c39f89a..6df5162dbf 100755
--- a/tests/vm/openbsd
+++ b/tests/vm/openbsd
@@ -73,8 +73,7 @@  class OpenBSDVM(basevm.BaseVM):
 
         self.print_step("Preparing iso and disk image")
         subprocess.check_call(["cp", "-f", cimg, iso])
-        subprocess.check_call(["qemu-img", "create", "-f", "qcow2",
-                               img_tmp, self.size])
+        self.exec_qemu_img("create", "-f", "qcow2", img_tmp, self.size)
 
         self.print_step("Booting installer")
         self.boot(img_tmp, extra_args = [
diff --git a/tests/vm/ubuntu.i386 b/tests/vm/ubuntu.i386
index 38f740eabf..39bbe9cc21 100755
--- a/tests/vm/ubuntu.i386
+++ b/tests/vm/ubuntu.i386
@@ -70,7 +70,7 @@  class UbuntuX86VM(basevm.BaseVM):
             sha256sum="e30091144c73483822b7c27193e9d47346dd1064229da577c3fedcf943f7cfcc")
         img_tmp = img + ".tmp"
         subprocess.check_call(["cp", "-f", cimg, img_tmp])
-        subprocess.check_call(["qemu-img", "resize", img_tmp, "50G"])
+        self.exec_qemu_img("resize", img_tmp, "50G")
         self.boot(img_tmp, extra_args = ["-cdrom", self._gen_cloud_init_iso()])
         self.wait_ssh()
         self.ssh_root_check("touch /etc/cloud/cloud-init.disabled")