tmp_config.write(config)
tmp_config.flush()
+ # a CLI helper to reduce our typing
+ def cli(cmd, extra_mounts=None):
+ mounts = {
+ log_dir: '/var/log/ceph:z',
+ tmp_admin_keyring.name: '/etc/ceph/ceph.client.admin.keyring:z',
+ tmp_config.name: '/etc/ceph/ceph.conf:z',
+ }
+ if extra_mounts:
+ for k, v in extra_mounts.items():
+ mounts[k] = v
+ return CephContainer(
+ image=args.image,
+ entrypoint='/usr/bin/ceph',
+ args=cmd,
+ volume_mounts=mounts,
+ ).run()
+
logger.info('Waiting for mon to start...')
while True:
c = CephContainer(
# assimilate and minimize config
if not args.no_minimize_config:
logger.info('Assimilating anything we can from ceph.conf...')
- out = CephContainer(
- image=args.image,
- entrypoint='/usr/bin/ceph',
- args=['config', 'assimilate-conf',
- '-i', '/var/lib/ceph/mon/ceph-%s/config' % mon_id],
- volume_mounts={
- log_dir: '/var/log/ceph:z',
- mon_dir: '/var/lib/ceph/mon/ceph-%s:z' % mon_id,
- tmp_admin_keyring.name: '/etc/ceph/ceph.client.admin.keyring:z',
- tmp_config.name: '/etc/ceph/ceph.conf:z',
- },
- ).run()
+ cli([
+ 'config', 'assimilate-conf',
+ '-i', '/var/lib/ceph/mon/ceph-%s/config' % mon_id
+ ], {
+ mon_dir: '/var/lib/ceph/mon/ceph-%s:z' % mon_id
+ })
logger.info('Generating new minimal ceph.conf...')
- out = CephContainer(
- image=args.image,
- entrypoint='/usr/bin/ceph',
- args=['config', 'generate-minimal-conf',
- '-o', '/var/lib/ceph/mon/ceph-%s/config' % mon_id],
- volume_mounts={
- log_dir: '/var/log/ceph:z',
- mon_dir: '/var/lib/ceph/mon/ceph-%s:z' % mon_id,
- tmp_admin_keyring.name: '/etc/ceph/ceph.client.admin.keyring:z',
- tmp_config.name: '/etc/ceph/ceph.conf:z',
- },
- ).run()
+ cli([
+ 'config', 'generate-minimal-conf',
+ '-o', '/var/lib/ceph/mon/ceph-%s/config' % mon_id
+ ], {
+ mon_dir: '/var/lib/ceph/mon/ceph-%s:z' % mon_id
+ })
# re-read our minimized config
with open(mon_dir + '/config', 'r') as f:
config = f.read()
logger.info('Waiting for mgr to start...')
while True:
- out = CephContainer(
- image=args.image,
- entrypoint='/usr/bin/ceph',
- args=[
- 'status', '-f', 'json-pretty'],
- volume_mounts={
- mon_dir: '/var/lib/ceph/mon/ceph-%s:z' % (mon_id),
- tmp_admin_keyring.name: '/etc/ceph/ceph.client.admin.keyring:z',
- tmp_config.name: '/etc/ceph/ceph.conf:z',
- },
- ).run()
+ out = cli(['status', '-f', 'json-pretty'])
j = json.loads(out)
if j.get('mgrmap', {}).get('available', False):
break
f.write(ssh_pub)
logger.info('Wrote public SSH key to to %s' % args.output_pub_ssh_key)
- CephContainer(
- image=args.image,
- entrypoint='/usr/bin/ceph',
- args=[
- 'config-key',
- 'set',
- 'mgr/ssh/ssh_identity_key',
- '-i', '/tmp/key'],
- volume_mounts={
- mon_dir: '/var/lib/ceph/mon/ceph-%s:z' % (mon_id),
- tmp_key.name: '/tmp/key:z',
- tmp_admin_keyring.name: '/etc/ceph/ceph.client.admin.keyring:z',
- tmp_config.name: '/etc/ceph/ceph.conf:z',
- },
- ).run()
- CephContainer(
- image=args.image,
- entrypoint='/usr/bin/ceph',
- args=[
- 'config-key',
- 'set',
- 'mgr/ssh/ssh_identity_pub',
- '-i', '/tmp/pub'],
- volume_mounts={
- mon_dir: '/var/lib/ceph/mon/ceph-%s:z' % (mon_id),
- tmp_pub.name: '/tmp/pub:z',
- tmp_admin_keyring.name: '/etc/ceph/ceph.client.admin.keyring:z',
- tmp_config.name: '/etc/ceph/ceph.conf:z',
- },
- ).run()
+ cli([
+ 'config-key',
+ 'set',
+ 'mgr/ssh/ssh_identity_key',
+ '-i', '/tmp/key'
+ ], {
+ tmp_key.name: '/tmp/key:z',
+ })
logger.info('Adding key to root@localhost\'s authorized_keys...')
if not os.path.exists('/root/.ssh'):
f.write(ssh_pub.strip() + '\n')
logger.info('Enabling ssh module...')
- CephContainer(
- image=args.image,
- entrypoint='/usr/bin/ceph',
- args=[
- 'mgr', 'module', 'enable', 'ssh'
- ],
- volume_mounts={
- mon_dir: '/var/lib/ceph/mon/ceph-%s:z' % (mon_id),
- tmp_pub.name: '/tmp/pub:z',
- tmp_admin_keyring.name: '/etc/ceph/ceph.client.admin.keyring:z',
- tmp_config.name: '/etc/ceph/ceph.conf:z',
- },
- ).run()
+ cli(['mgr', 'module', 'enable', 'ssh'])
logger.info('Setting orchestrator backend to ssh...')
- CephContainer(
- image=args.image,
- entrypoint='/usr/bin/ceph',
- args=[
- 'orchestrator', 'set', 'backend', 'ssh'
- ],
- volume_mounts={
- mon_dir: '/var/lib/ceph/mon/ceph-%s:z' % (mon_id),
- log_dir: '/var/log/ceph:z',
- tmp_pub.name: '/tmp/pub:z',
- tmp_admin_keyring.name: '/etc/ceph/ceph.client.admin.keyring:z',
- tmp_config.name: '/etc/ceph/ceph.conf:z',
- },
- ).run()
+ cli(['orchestrator', 'set', 'backend', 'ssh'])
host = get_hostname()
logger.info('Adding host %s...' % host)
- CephContainer(
- image=args.image,
- entrypoint='/usr/bin/ceph',
- args=[
- 'orchestrator', 'host', 'add', host
- ],
- volume_mounts={
- mon_dir: '/var/lib/ceph/mon/ceph-%s:z' % (mon_id),
- tmp_pub.name: '/tmp/pub:z',
- tmp_admin_keyring.name: '/etc/ceph/ceph.client.admin.keyring:z',
- tmp_config.name: '/etc/ceph/ceph.conf:z',
- },
- ).run()
+ cli(['orchestrator', 'host', 'add', host])
logger.info('Bootstrap complete.')
return 0