]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Use an NFS mount instead of virtio-9p in the qemu task
authorAndrew Schoen <aschoen@redhat.com>
Thu, 19 Feb 2015 18:35:25 +0000 (12:35 -0600)
committerLoic Dachary <ldachary@redhat.com>
Fri, 27 Feb 2015 21:01:14 +0000 (22:01 +0100)
Signed-off-by: Andrew Schoen <aschoen@redhat.com>
(cherry picked from commit 93f2bea3530a523c7b2ac0575033697cea893f2d)

tasks/qemu.py
tasks/userdata_setup.yaml

index 4dd5fe0df73758c5d5fdf3200983a47349a4a353..17554a1f0d151b0cc367df680f0486ba6f1bf601 100644 (file)
@@ -53,12 +53,18 @@ def generate_iso(ctx, config):
     testdir = teuthology.get_testdir(ctx)
     for client, client_config in config.iteritems():
         assert 'test' in client_config, 'You must specify a test to run'
+        (remote,) = ctx.cluster.only(client).remotes.keys()
         src_dir = os.path.dirname(__file__)
         userdata_path = os.path.join(testdir, 'qemu', 'userdata.' + client)
         metadata_path = os.path.join(testdir, 'qemu', 'metadata.' + client)
 
         with file(os.path.join(src_dir, 'userdata_setup.yaml'), 'rb') as f:
             test_setup = ''.join(f.readlines())
+            # configuring the commands to setup the nfs mount
+            mnt_dir = "/export/{client}".format(client=client)
+            test_setup = test_setup.format(
+                mnt_dir=mnt_dir
+            )
 
         with file(os.path.join(src_dir, 'userdata_teardown.yaml'), 'rb') as f:
             test_teardown = ''.join(f.readlines())
@@ -84,7 +90,6 @@ def generate_iso(ctx, config):
   /mnt/cdrom/test.sh > /mnt/log/test.log 2>&1 && touch /mnt/log/success
 """ + test_teardown
 
-        (remote,) = ctx.cluster.only(client).remotes.keys()
         teuthology.write_file(remote, userdata_path, StringIO(user_data))
 
         with file(os.path.join(src_dir, 'metadata.yaml'), 'rb') as f:
@@ -154,6 +159,77 @@ def download_image(ctx, config):
                     ],
                 )
 
+
+def _setup_nfs_mount(remote, client, mount_dir):
+    """
+    Sets up an nfs mount on the remote that the guest can use to
+    store logs. This nfs mount is also used to touch a file
+    at the end of the test to indiciate if the test was successful
+    or not.
+    """
+    export_dir = "/export/{client}".format(client=client)
+    log.info("Creating the nfs export directory...")
+    remote.run(args=[
+        'sudo', 'mkdir', '-p', export_dir,
+    ])
+    log.info("Mounting the test directory...")
+    remote.run(args=[
+        'sudo', 'mount', '--bind', mount_dir, export_dir,
+    ])
+    log.info("Adding mount to /etc/exports...")
+    export = "{dir} *(rw,no_root_squash,no_subtree_check,insecure)".format(
+        dir=export_dir
+    )
+    remote.run(args=[
+        'echo', export, run.Raw("|"),
+        'sudo', 'tee', '-a', "/etc/exports",
+    ])
+    log.info("Restarting NFS...")
+    if remote.os.package_type == "deb":
+        remote.run(args=['sudo', 'service', 'nfs-kernel-server', 'restart'])
+    else:
+        remote.run(args=['sudo', 'systemctl', 'nfs', 'restart'])
+
+
+def _teardown_nfs_mount(remote, client):
+    """
+    Tears down the nfs mount on the remote used for logging and reporting the
+    status of the tests being ran in the guest.
+    """
+    log.info("Tearing down the nfs mount for {remote}".format(remote=remote))
+    export_dir = "/export/{client}".format(client=client)
+    log.info("Stopping NFS...")
+    if remote.os.package_type == "deb":
+        remote.run(args=[
+            'sudo', 'service', 'nfs-kernel-server', 'stop'
+        ])
+    else:
+        remote.run(args=[
+            'sudo', 'systemctl', 'nfs', 'stop'
+        ])
+    log.info("Unmounting exported directory...")
+    remote.run(args=[
+        'sudo', 'umount', export_dir
+    ])
+    log.info("Deleting exported directory...")
+    remote.run(args=[
+        'sudo', 'rm', '-r', '/export'
+    ])
+    log.info("Deleting export from /etc/exports...")
+    remote.run(args=[
+        'sudo', 'sed', '-i', '$ d', '/etc/exports'
+    ])
+    log.info("Starting NFS...")
+    if remote.os.package_type == "deb":
+        remote.run(args=[
+            'sudo', 'service', 'nfs-kernel-server', 'start'
+        ])
+    else:
+        remote.run(args=[
+            'sudo', 'systemctl', 'nfs', 'start'
+        ])
+
+
 @contextlib.contextmanager
 def run_qemu(ctx, config):
     """Setup kvm environment and start qemu"""
@@ -169,6 +245,10 @@ def run_qemu(ctx, config):
                 ]
             )
 
+        # make an nfs mount to use for logging and to
+        # allow to test to tell teuthology the tests outcome
+        _setup_nfs_mount(remote, client, log_dir)
+
         base_file = '{tdir}/qemu/base.{client}.qcow2'.format(
             tdir=testdir,
             client=client
@@ -189,11 +269,6 @@ def run_qemu(ctx, config):
             'file={base},format=qcow2,if=virtio'.format(base=base_file),
             # cd holding metadata for cloud-init
             '-cdrom', '{tdir}/qemu/{client}.iso'.format(tdir=testdir, client=client),
-            # virtio 9p fs for logging
-            '-fsdev',
-            'local,id=log,path={log},security_model=none'.format(log=log_dir),
-            '-device',
-            'virtio-9p-pci,fsdev=log,mount_tag=test_log',
             ]
 
         cachemode = 'none'
@@ -235,6 +310,9 @@ def run_qemu(ctx, config):
         log.debug('checking that qemu tests succeeded...')
         for client in config.iterkeys():
             (remote,) = ctx.cluster.only(client).remotes.keys()
+            # teardown nfs mount
+            _teardown_nfs_mount(remote, client)
+            # check for test status
             remote.run(
                 args=[
                     'test', '-f',
@@ -245,6 +323,7 @@ def run_qemu(ctx, config):
                     ],
                 )
 
+
 @contextlib.contextmanager
 def task(ctx, config):
     """
index eaa5f7353ea4fedd9cded1d433f87053b055d4bd..d39695bef0f7cf02e7b27e1b7565995a2626a204 100644 (file)
 - |
   #!/bin/bash
 
-  # mount a 9p fs for storing logs
+  # mount a NFS share for storing logs
+  apt-get update
+  apt-get -y install nfs-common
   mkdir /mnt/log
-  mount -t 9p -o trans=virtio test_log /mnt/log
+  # 10.0.2.2 is the host
+  mount -v -t nfs -o proto=tcp 10.0.2.2:{mnt_dir} /mnt/log
 
   # mount the iso image that has the test script
   mkdir /mnt/cdrom