| |
@@ -4,6 +4,7 @@
|
| |
import errno
|
| |
import json
|
| |
import os
|
| |
+ import fmf
|
| |
import shutil
|
| |
import shlex
|
| |
import signal
|
| |
@@ -142,6 +143,59 @@
|
| |
return inventory
|
| |
|
| |
|
| |
+ class FmfMetadataTree(object):
|
| |
+ """This is aux class to hold one copy FMF tree. fmf.Tree(path) could be
|
| |
+ very resource consuming when walking through big project with many
|
| |
+ directories.
|
| |
+
|
| |
+ """
|
| |
+ tree = None
|
| |
+ """fmf.Tree() object."""
|
| |
+ path = None
|
| |
+ """Metadata tree is created for this path."""
|
| |
+ def get(self, path="."):
|
| |
+ if self.path != path or self.tree is None:
|
| |
+ FmfMetadataTree.path = path
|
| |
+ FmfMetadataTree.tree = fmf.Tree(path)
|
| |
+ return self.tree
|
| |
+
|
| |
+
|
| |
+ def fmf_get(path, default=None):
|
| |
+ """Return parameter from FMF at desired path or default.
|
| |
+
|
| |
+ Parameters
|
| |
+ ----------
|
| |
+ path: dict
|
| |
+ List of strings. Strings form a path for looking parameter.
|
| |
+ default: str
|
| |
+ Function ignores this parameter.
|
| |
+
|
| |
+ Returns
|
| |
+ -------
|
| |
+ str
|
| |
+ Found parameter in FMF or `default`.
|
| |
+
|
| |
+ """
|
| |
+ tree = FmfMetadataTree().get()
|
| |
+ path.insert(0, 'standard-inventory-qcow2')
|
| |
+ value = default
|
| |
+ for provision in tree.prune(names=[".*/provision$"]):
|
| |
+ value = provision.data
|
| |
+ for node in path:
|
| |
+ try:
|
| |
+ value = value[node]
|
| |
+ except (KeyError, TypeError):
|
| |
+ value = default
|
| |
+ break
|
| |
+ try:
|
| |
+ diagnose = distutils.util.strtobool(os.getenv("TEST_DEBUG", "0"))
|
| |
+ except ValueError:
|
| |
+ diagnose = 0
|
| |
+ if diagnose:
|
| |
+ sys.stderr.write("DIAGNOSE: fmf_get() for {}: {}\n".format(str(path), str(value)))
|
| |
+ return value
|
| |
+
|
| |
+
|
| |
def start_qemu(image, cloudinit, artifacts, portrange=(2222, 5555)):
|
| |
for _ in range(10):
|
| |
port = random.randint(*portrange)
|
| |
@@ -166,12 +220,15 @@
|
| |
log_guest = os.path.join(artifacts, "{0}.guest.log".format(os.path.basename(image)))
|
| |
# Log from qemu itself.
|
| |
log_qemu = log_guest.replace(".guest.log", ".qemu.log")
|
| |
+ # Parameters from FMF:
|
| |
+ param_m = fmf_get(['qemu', 'm'], 1024)
|
| |
+ param_net_nic_model = fmf_get(['qemu', 'net_nic', 'model'], 'virtio')
|
| |
# Use -cpu host and -smp by default.
|
| |
# virtio-rng-pci: https://wiki.qemu.org/Features/VirtIORNG
|
| |
qemu_cmd = ["/usr/bin/qemu-system-x86_64",
|
| |
"-cpu", "host", "-smp", get_qemu_smp_arg(),
|
| |
- "-m", "1024", image, "-enable-kvm", "-snapshot", "-cdrom", cloudinit,
|
| |
- "-net", "nic,model=virtio", "-net", "user,hostfwd=tcp:127.0.0.3:{0}-:22".format(port),
|
| |
+ "-m", param_m, image, "-enable-kvm", "-snapshot", "-cdrom", cloudinit,
|
| |
+ "-net", "nic,model=%s" % param_net_nic_model, "-net", "user,hostfwd=tcp:127.0.0.3:{0}-:22".format(port),
|
| |
"-device", "virtio-rng-pci", "-rtc", "base=utc",
|
| |
"-device", "isa-serial,chardev=pts2", "-chardev", "file,id=pts2,path=" + log_guest,
|
| |
"-display", "none"]
|
| |
Signed-off-by: Andrei Stepanov astepano@redhat.com