def create_images(ctx, config, managers): for client, client_config in config.iteritems(): num_rbd = client_config.get('num_rbd', 1) clone = client_config.get('clone', False) assert num_rbd > 0, 'at least one rbd device must be used' for i in xrange(num_rbd): create_config = { client: { 'image_name': '{client}.{num}'.format(client=client, num=i), 'image_format': 2 if clone else 1, } } managers.append( lambda create_config=create_config: rbd.create_image(ctx=ctx, config=create_config) )
def create_images(ctx, config, managers): for client, client_config in config.iteritems(): 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 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 + 1), 'image_format': 2 if clone else 1, 'image_size': (disk or {}).get('image_size', DEFAULT_IMAGE_SIZE), } } managers.append( lambda create_config=create_config: rbd.create_image(ctx=ctx, config=create_config) )
def create_images(ctx, config, managers): for client, client_config in config.items(): disks = client_config['disks'] for disk in disks: if disk.get('action') != 'create' or ( 'image_url' in disk and disk['encryption_format'] == 'none'): continue image_size = disk['image_size'] if disk['encryption_format'] != 'none': image_size += ENCRYPTION_HEADER_SIZE create_config = { client: { 'image_name': disk['image_name'], 'image_format': 2, 'image_size': image_size, 'encryption_format': disk['encryption_format'], } } managers.append( lambda create_config=create_config: rbd.create_image(ctx=ctx, config=create_config) )
def task(ctx, config): """ Run a test inside of QEMU on top of rbd. Only one test is supported per client. For example, you can specify which clients to run on:: tasks: - ceph: - qemu: client.0: test: http://ceph.com/qa/test.sh client.1: test: http://ceph.com/qa/test2.sh Or use the same settings on all clients: tasks: - ceph: - qemu: all: test: http://ceph.com/qa/test.sh For tests that don't need a filesystem, set type to block:: tasks: - ceph: - qemu: client.0: test: http://ceph.com/qa/test.sh type: block The test should be configured to run on /dev/vdb and later devices. If you want to run a test that uses more than one rbd image, specify how many images to use:: tasks: - ceph: - qemu: client.0: test: http://ceph.com/qa/test.sh type: block num_rbd: 2 You can set the amount of memory the VM has (default is 1024 MB):: tasks: - ceph: - qemu: client.0: test: http://ceph.com/qa/test.sh memory: 512 # megabytes """ assert isinstance(config, dict), \ "task qemu only supports a dictionary for configuration" config = teuthology.replace_all_with_clients(ctx.cluster, config) managers = [] for client, client_config in config.iteritems(): num_rbd = client_config.get('num_rbd', 1) assert num_rbd > 0, 'at least one rbd device must be used' for i in xrange(num_rbd): create_config = { client: { 'image_name': '{client}.{num}'.format(client=client, num=i), } } managers.append( lambda create_config=create_config: rbd.create_image(ctx=ctx, config=create_config) ) managers.extend([ lambda: create_dirs(ctx=ctx, config=config), lambda: generate_iso(ctx=ctx, config=config), lambda: download_image(ctx=ctx, config=config), lambda: run_qemu(ctx=ctx, config=config), ]) with contextutil.nested(*managers): yield