From d98aa1a39ae03fb8990543383ab13b94f54628c3 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Tue, 20 Dec 2016 09:25:33 -0500 Subject: [PATCH] qa/tasks/qemu: attach all disks as rbd block devices Signed-off-by: Jason Dillaman --- qa/suites/rbd/maintenance/qemu/xfstests.yaml | 2 +- .../rbd/qemu/workloads/qemu_xfstests.yaml | 2 +- qa/tasks/qemu.py | 74 ++++++++++++++----- 3 files changed, 58 insertions(+), 20 deletions(-) diff --git a/qa/suites/rbd/maintenance/qemu/xfstests.yaml b/qa/suites/rbd/maintenance/qemu/xfstests.yaml index bd0f3e44de0a7..ffa012e30bf93 100644 --- a/qa/suites/rbd/maintenance/qemu/xfstests.yaml +++ b/qa/suites/rbd/maintenance/qemu/xfstests.yaml @@ -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 diff --git a/qa/suites/rbd/qemu/workloads/qemu_xfstests.yaml b/qa/suites/rbd/qemu/workloads/qemu_xfstests.yaml index 670fd5f159a40..2fc6fb695e529 100644 --- a/qa/suites/rbd/qemu/workloads/qemu_xfstests.yaml +++ b/qa/suites/rbd/qemu/workloads/qemu_xfstests.yaml @@ -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 diff --git a/qa/tasks/qemu.py b/qa/tasks/qemu.py index 75ea23c4efd46..218f0a1c1534a 100644 --- a/qa/tasks/qemu.py +++ b/qa/tasks/qemu.py @@ -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):: -- 2.39.5