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(
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':
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
'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:
# 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
'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),
]
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',
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)::