'''
-def container_exec(binary, container_image):
+def container_exec(binary, container_image, mounts=None):
'''
Build the docker CLI to run a command inside a container
'''
+ _mounts = {}
+ _mounts['/run/lock/lvm'] = '/run/lock/lvm:z'
+ _mounts['/var/run/udev'] = '/var/run/udev:z'
+ _mounts['/dev'] = '/dev'
+ _mounts['/etc/ceph'] = '/etc/ceph:z'
+ _mounts['/run/lvm'] = '/run/lvm'
+ _mounts['/var/lib/ceph'] = '/var/lib/ceph:z'
+ _mounts['/var/log/ceph'] = '/var/log/ceph:z'
+ if mounts is None:
+ mounts = _mounts
+ else:
+ _mounts.update(mounts)
+
+ volumes = sum(
+ [['-v', '{}:{}'.format(src_dir, dst_dir)]
+ for src_dir, dst_dir in _mounts.items()], [])
+
container_binary = os.getenv('CEPH_CONTAINER_BINARY')
command_exec = [container_binary, 'run',
- '--rm', '--privileged', '--net=host', '--ipc=host',
- '-v', '/run/lock/lvm:/run/lock/lvm:z',
- '-v', '/var/run/udev/:/var/run/udev/:z',
- '-v', '/dev:/dev', '-v', '/etc/ceph:/etc/ceph:z',
- '-v', '/run/lvm/:/run/lvm/',
- '-v', '/var/lib/ceph/:/var/lib/ceph/:z',
- '-v', '/var/log/ceph/:/var/log/ceph/:z',
- '--entrypoint=' + binary, container_image]
+ '--rm',
+ '--privileged',
+ '--net=host',
+ '--ipc=host'] + volumes + \
+ ['--entrypoint=' + binary, container_image]
return command_exec
-def build_cmd(action, container_image, cluster='ceph', binary='ceph-volume'):
+def build_cmd(action, container_image,
+ cluster='ceph',
+ binary='ceph-volume', mounts=None):
'''
Build the ceph-volume command
'''
if container_image:
cmd = container_exec(
- binary, container_image)
+ binary, container_image, mounts=mounts)
else:
binary = [binary]
cmd = binary
# Build the CLI
action = ['lvm', 'list']
- cmd = build_cmd(action, container_image, cluster)
+ cmd = build_cmd(action,
+ container_image,
+ cluster,
+ mounts={'/var/lib/ceph': '/var/lib/ceph:ro'})
if data:
cmd.append(data)
cmd.append('--format=json')
print('You need the mock library installed on python2.x to run tests')
-container_cmd = ['docker', 'run', '--rm', '--privileged',
- '--net=host', '--ipc=host',
- '-v', '/run/lock/lvm:/run/lock/lvm:z',
- '-v', '/var/run/udev/:/var/run/udev/:z',
- '-v', '/dev:/dev', '-v', '/etc/ceph:/etc/ceph:z',
- '-v', '/run/lvm/:/run/lvm/',
- '-v', '/var/lib/ceph/:/var/lib/ceph/:z',
- '-v', '/var/log/ceph/:/var/log/ceph/:z',
- '--entrypoint=ceph-volume']
+def get_mounts(mounts=None):
+ volumes = {}
+ volumes['/run/lock/lvm'] = '/run/lock/lvm:z'
+ volumes['/var/run/udev'] = '/var/run/udev:z'
+ volumes['/dev'] = '/dev'
+ volumes['/etc/ceph'] = '/etc/ceph:z'
+ volumes['/run/lvm'] = '/run/lvm'
+ volumes['/var/lib/ceph'] = '/var/lib/ceph:z'
+ volumes['/var/log/ceph'] = '/var/log/ceph:z'
+ if mounts is not None:
+ volumes.update(mounts)
+
+ return sum([['-v', '{}:{}'.format(src_dir, dst_dir)] for src_dir, dst_dir in volumes.items()], [])
+
+
+def get_container_cmd(mounts=None):
+
+ return ['docker', 'run', '--rm', '--privileged',
+ '--net=host', '--ipc=host'] + \
+ get_mounts(mounts) + ['--entrypoint=ceph-volume']
@mock.patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': 'docker'})
def test_container_exec(self):
fake_binary = "ceph-volume"
fake_container_image = "quay.ceph.io/ceph-ci/daemon:latest"
- expected_command_list = container_cmd + [fake_container_image]
+ expected_command_list = get_container_cmd() + [fake_container_image]
result = ceph_volume.container_exec(fake_binary, fake_container_image)
assert result == expected_command_list
fake_module = MagicMock()
fake_module.params = {'data': '/dev/sda'}
fake_container_image = "quay.ceph.io/ceph-ci/daemon:latest"
- expected_command_list = container_cmd + [fake_container_image,
- '--cluster',
- 'ceph',
- 'lvm',
- 'zap',
- '--destroy',
- '/dev/sda']
+ expected_command_list = get_container_cmd() + \
+ [fake_container_image,
+ '--cluster',
+ 'ceph',
+ 'lvm',
+ 'zap',
+ '--destroy',
+ '/dev/sda']
result = ceph_volume.zap_devices(fake_module, fake_container_image)
assert result == expected_command_list
fake_module = MagicMock()
fake_module.params = {'cluster': 'ceph', 'data': '/dev/sda'}
fake_container_image = "quay.ceph.io/ceph-ci/daemon:latest"
- expected_command_list = container_cmd + [fake_container_image,
- '--cluster',
- 'ceph',
- 'lvm',
- 'list',
- '/dev/sda',
- '--format=json']
+ expected_command_list = get_container_cmd(
+ {
+ '/var/lib/ceph': '/var/lib/ceph:ro'
+ }) + \
+ [fake_container_image,
+ '--cluster',
+ 'ceph',
+ 'lvm',
+ 'list',
+ '/dev/sda',
+ '--format=json']
result = ceph_volume.list_osd(fake_module, fake_container_image)
assert result == expected_command_list
def test_list_storage_inventory_container(self):
fake_module = MagicMock()
fake_container_image = "quay.ceph.io/ceph-ci/daemon:latest"
- expected_command_list = container_cmd + [fake_container_image,
- '--cluster',
- 'ceph',
- 'inventory',
- '--format=json']
+ expected_command_list = get_container_cmd() + \
+ [fake_container_image,
+ '--cluster',
+ 'ceph',
+ 'inventory',
+ '--format=json']
result = ceph_volume.list_storage_inventory(fake_module, fake_container_image)
assert result == expected_command_list
fake_action = "create"
fake_container_image = "quay.ceph.io/ceph-ci/daemon:latest"
- expected_command_list = container_cmd + [fake_container_image,
- '--cluster',
- 'ceph',
- 'lvm',
- 'create',
- '--%s' % objectstore,
- '--data',
- '/dev/sda']
+ expected_command_list = get_container_cmd() + \
+ [fake_container_image,
+ '--cluster',
+ 'ceph',
+ 'lvm',
+ 'create',
+ '--%s' % objectstore,
+ '--data',
+ '/dev/sda']
result = ceph_volume.prepare_or_create_osd(
fake_module, fake_action, fake_container_image)
assert result == expected_command_list
fake_action = "prepare"
fake_container_image = "quay.ceph.io/ceph-ci/daemon:latest"
- expected_command_list = container_cmd + [fake_container_image,
- '--cluster',
- 'ceph',
- 'lvm',
- 'prepare',
- '--%s' % objectstore,
- '--data',
- '/dev/sda']
+ expected_command_list = get_container_cmd() + \
+ [fake_container_image,
+ '--cluster',
+ 'ceph',
+ 'lvm',
+ 'prepare',
+ '--%s' % objectstore,
+ '--data',
+ '/dev/sda']
result = ceph_volume.prepare_or_create_osd(
fake_module, fake_action, fake_container_image)
assert result == expected_command_list
'batch_devices': ["/dev/sda", "/dev/sdb"]}
fake_container_image = "quay.ceph.io/ceph-ci/daemon:latest"
- expected_command_list = container_cmd + [fake_container_image,
- '--cluster',
- 'ceph',
- 'lvm',
- 'batch',
- '--%s' % objectstore,
- '--yes',
- '--prepare',
- '--journal-size' if objectstore == 'filestore' else '--block-db-size', # noqa E501
- '4096',
- '/dev/sda',
- '/dev/sdb']
+ expected_command_list = get_container_cmd() + \
+ [fake_container_image,
+ '--cluster',
+ 'ceph',
+ 'lvm',
+ 'batch',
+ '--%s' % objectstore,
+ '--yes',
+ '--prepare',
+ '--journal-size' if objectstore == 'filestore' else '--block-db-size', # noqa E501
+ '4096',
+ '/dev/sda',
+ '/dev/sdb']
result = ceph_volume.batch(
fake_module, fake_container_image)
assert result == expected_command_list