]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
qa/tasks/qemu: attach all disks as rbd block devices
authorJason Dillaman <dillaman@redhat.com>
Tue, 20 Dec 2016 14:25:33 +0000 (09:25 -0500)
committerJason Dillaman <dillaman@redhat.com>
Thu, 26 Jan 2017 19:17:30 +0000 (14:17 -0500)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
qa/suites/rbd/maintenance/qemu/xfstests.yaml
qa/suites/rbd/qemu/workloads/qemu_xfstests.yaml
qa/tasks/qemu.py

index bd0f3e44de0a7d425b46d0b285dc56cb91f8b9e4..ffa012e30bf930a5cd26c7599704b16eeb2d4994 100644 (file)
@@ -8,6 +8,6 @@ io_workload:
         client.0:
           clone: true
           type: block
-          num_rbd: 2
+          disks: 3
           test: http://git.ceph.com/?p={repo};a=blob_plain;hb={branch};f=qa/run_xfstests_qemu.sh
 exclude_arch: armv7l
index 670fd5f159a40c51099ebe4cd219a0d808a6f632..2fc6fb695e5295de0a5e72a57ac599e182786ae9 100644 (file)
@@ -3,6 +3,6 @@ tasks:
     all:
       clone: true
       type: block
-      num_rbd: 2
+      disks: 3
       test: http://git.ceph.com/?p={repo};a=blob_plain;hb={branch};f=qa/run_xfstests_qemu.sh
 exclude_arch: armv7l
index 75ea23c4efd46b1887e2d29e6cb9a08669f67182..218f0a1c1534a2daf50bc9d0289454f9c191df37 100644 (file)
@@ -16,20 +16,26 @@ from teuthology.config import config as teuth_config
 
 log = logging.getLogger(__name__)
 
-DEFAULT_NUM_RBD = 1
+DEFAULT_NUM_DISKS = 2
 DEFAULT_IMAGE_URL = 'http://download.ceph.com/qa/ubuntu-12.04.qcow2'
+DEFAULT_IMAGE_SIZE = 10240 # in megabytes
 DEFAULT_MEM = 4096 # in megabytes
 
 def create_images(ctx, config, managers):
     for client, client_config in config.iteritems():
-        num_rbd = client_config.get('num_rbd', 1)
+        disks = client_config.get('disks', DEFAULT_NUM_DISKS)
+        if not isinstance(disks, list):
+            disks = [{} for n in range(int(disks))]
         clone = client_config.get('clone', False)
-        assert num_rbd > 0, 'at least one rbd device must be used'
-        for i in xrange(num_rbd):
+        assert disks, 'at least one rbd device must be used'
+        for i, disk in enumerate(disks[1:]):
             create_config = {
                 client: {
-                    'image_name': '{client}.{num}'.format(client=client, num=i),
+                    'image_name': '{client}.{num}'.format(client=client,
+                                                          num=i + 1),
                     'image_format': 2 if clone else 1,
+                    'image_size': (disk or {}).get('image_size',
+                                                   DEFAULT_IMAGE_SIZE),
                     }
                 }
             managers.append(
@@ -39,10 +45,12 @@ def create_images(ctx, config, managers):
 
 def create_clones(ctx, config, managers):
     for client, client_config in config.iteritems():
-        num_rbd = client_config.get('num_rbd', 1)
         clone = client_config.get('clone', False)
         if clone:
-            for i in xrange(num_rbd):
+            num_disks = client_config.get('disks', DEFAULT_NUM_DISKS)
+            if isinstance(num_disks, list):
+                num_disks = len(num_disks)
+            for i in xrange(num_disks):
                 create_config = {
                     client: {
                         'image_name':
@@ -127,8 +135,11 @@ def generate_iso(ctx, config):
 
         user_data = test_setup
         if client_config.get('type', 'filesystem') == 'filesystem':
-            for i in xrange(0, client_config.get('num_rbd', DEFAULT_NUM_RBD)):
-                dev_letter = chr(ord('b') + i)
+            num_disks = client_config.get('disks', DEFAULT_NUM_DISKS)
+            if isinstance(num_disks, list):
+                num_disks = len(num_disks)
+            for i in xrange(1, num_disks):
+                dev_letter = chr(ord('a') + i)
                 user_data += """
 - |
   #!/bin/bash
@@ -207,6 +218,25 @@ def download_image(ctx, config):
                 'wget', '-nv', '-O', base_file, image_url,
                 ]
             )
+
+        disks = client_config.get('disks', None)
+        if not isinstance(disks, list):
+            disks = [{}]
+        image_name = '{client}.0'.format(client=client)
+        image_size = (disks[0] or {}).get('image_size', DEFAULT_IMAGE_SIZE)
+        remote.run(
+            args=[
+                'qemu-img', 'convert', '-f', 'qcow2', '-O', 'raw',
+                base_file, 'rbd:rbd/{image_name}'.format(image_name=image_name)
+                ]
+            )
+        remote.run(
+            args=[
+                'rbd', 'resize',
+                '--size={image_size}M'.format(image_size=image_size),
+                image_name,
+                ]
+            )
     try:
         yield
     finally:
@@ -316,10 +346,6 @@ def run_qemu(ctx, config):
         # 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
-        )
         # Hack to make sure /dev/kvm permissions are set correctly
         # See http://tracker.ceph.com/issues/17977 and
         # https://bugzilla.redhat.com/show_bug.cgi?id=1333159
@@ -338,9 +364,6 @@ def run_qemu(ctx, config):
             'term',
             qemu_cmd, '-enable-kvm', '-nographic',
             '-m', str(client_config.get('memory', DEFAULT_MEM)),
-            # base OS device
-            '-drive',
-            '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),
             ]
@@ -356,7 +379,10 @@ def run_qemu(ctx, config):
                 cachemode = 'writethrough'
 
         clone = client_config.get('clone', False)
-        for i in xrange(client_config.get('num_rbd', DEFAULT_NUM_RBD)):
+        num_disks = client_config.get('disks', DEFAULT_NUM_DISKS)
+        if isinstance(num_disks, list):
+            num_disks = len(num_disks)
+        for i in xrange(num_disks):
             suffix = '-clone' if clone else ''
             args.extend([
                 '-drive',
@@ -446,7 +472,19 @@ def task(ctx, config):
             client.0:
               test: http://download.ceph.com/qa/test.sh
               type: block
-              num_rbd: 2
+              disks: 2
+
+    - or -
+
+        tasks:
+        - ceph:
+        - qemu:
+            client.0:
+              test: http://ceph.com/qa/test.sh
+              type: block
+              disks:
+                - image_size: 1024
+                - image_size: 2048
 
     You can set the amount of memory the VM has (default is 1024 MB)::