Message ID | 20191114134246.12073-2-wainersm@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | tests/vm: Allow to set path to qemu-img | expand |
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")
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 --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")
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(-)