@@ -59,14 +59,16 @@ file using the Avocado parameters system:
- ``arch``: Probe the Qemu binary from a given architecture. It has no
effect if ``qemu_bin`` is specified. If not provided, the binary probe
will use the system architecture. Example: ``arch: x86_64``
-- ``image_path``: VMs are defined without image. If the ``image_path``
- is specified, it will be used as the VM image. The ``-snapshot``
- option will then be used to avoid writing into the image. Example:
- ``image_path: /var/lib/images/fedora-25.img``
+- ``image_path``: When a test requires (usually a bootable) image, this
+ parameter is used to define where the image is located. When undefined
+ it uses ``$QEMU_ROOT/bootable_image_$arch.qcow2``. The image is added
+ to the qemu command __only__ when the test requires an image. By
+ default ``,snapshot=on`` is used, but it can be altered by
+ ``image_snapshot`` parameter.
- ``image_user`` and ``image_pass``: When using a ``image_path``, if you
want to get the console from the Guest OS you have to define the Guest
OS credentials. Example: ``image_user: root`` and
- ``image_pass: p4ssw0rd``
+ ``image_pass: p4ssw0rd``. By default it uses ``root`` and ``123456``.
- ``machine_type``: Use this option to define a machine type for the VM.
Example: ``machine_type: pc``
- ``machine_accel``: Use this option to define a machine acceleration
@@ -39,8 +39,10 @@ from avocado.utils import network
from avocado.utils import process
from avocado.utils import path as utils_path
from avocado.utils import wait
-sys.path.append(os.path.join(os.path.dirname(__file__),
- '..', '..', '..', 'scripts'))
+
+QEMU_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(
+ os.path.dirname(__file__)))))
+sys.path.append(os.path.join(QEMU_ROOT, 'scripts'))
import qemu
@@ -360,11 +362,6 @@ class QemuTest(Test):
password=self.params.get('image_pass', default="123456"),
qemu_dst_bin=self.params.get('qemu_dst_bin'))
- self.vm.image = self.params.get('image_path')
- if self.vm.image is not None:
- self.vm.args.extend(['-drive', 'file=%s' % self.vm.image])
- self.vm.args.append('-snapshot')
-
machine_type = self.params.get('machine_type')
machine_accel = self.params.get('machine_accel')
machine_kvm_type = self.params.get('machine_kvm_type')
@@ -377,3 +374,36 @@ class QemuTest(Test):
machine += "kvm-type=%s," % machine_kvm_type
if machine:
self.vm.args.extend(['-machine', machine])
+
+ def request_image(self, path=None, snapshot=None, extra=None):
+ """
+ Add image to the `self.vm` using params or arguments.
+
+ Unless it's overridden by arguments it uses following test params
+ to specify the image:
+
+ * image_path - defines the path to the user-image. If not specified
+ it uses "QEMU_ROOT/boot_image_$arch.qcow2"
+ * image_snapshot - whether to use "snapshot=on" (snapshot=off is not
+ supplied)
+ * image_extra - free-form string to extend the "-drive" params
+
+ :param path: Override the path ("image_path" param is used otherwise)
+ :param snapshot: Override the usage of snapshot
+ :param extra: Extra arguments to be added to drive definition
+ """
+ if snapshot is None:
+ snapshot = self.params.get("image_snapshot", default=True)
+ if extra is None:
+ extra = self.params.get("image_extra", default="")
+ if path is None:
+ path = self.params.get("image_path")
+ if path is None:
+ arch = self.vm.arch
+ path = os.path.join(QEMU_ROOT, "boot_image_%s.qcow2" % arch)
+ if not os.path.exists(path):
+ self.error("Require a bootable image, which was not found. "
+ "Please provide one in '%s'." % path)
+ if snapshot:
+ extra += ",snapshot=on"
+ self.vm.args.extend(['-drive', 'file=%s%s' % (path, extra)])