return blink(locs)
+ def get_osd_uuid_map(self):
+ # type: () -> Dict[str,str]
+ osd_map = self.get('osd_map')
+ r = {}
+ for o in osd_map['osds']:
+ r[str(o['osd'])] = o['uuid']
+ return r
+
@async_completion
def _create_osd(self, all_hosts_, drive_group):
all_hosts = orchestrator.InventoryNode.get_host_names(all_hosts_)
self.log.debug('code %s out %s' % (code, out))
osds_elems = json.loads('\n'.join(out))
fsid = self._cluster_fsid
+ osd_uuid_map = self.get_osd_uuid_map()
for osd_id, osds in osds_elems.items():
for osd in osds:
if osd['tags']['ceph.cluster_fsid'] != fsid:
if len(list(set(devices) & set(osd['devices']))) == 0 and osd.get('lv_path') not in devices:
self.log.debug('mismatched devices, skipping %s' % osd)
continue
+ if osd_id not in osd_uuid_map:
+ self.log.debug('osd id %d does not exist in cluster' % osd_id)
+ continue
+ if osd_uuid_map[osd_id] != osd['tags']['ceph.osd_fsid']:
+ self.log.debug('mismatched osd uuid (cluster has %s, osd '
+ 'has %s)' % (
+ osd_uuid_map[osd_id],
+ osd['tags']['ceph.osd_fsid']))
+ continue
- # create
self._create_daemon(
- 'osd', str(osd_id), host,
- extra_args=[
- '--osd-fsid', osd['tags']['ceph.osd_fsid'],
- ])
+ 'osd', osd_id, host,
+ osd_uuid_map=osd_uuid_map)
return "Created osd(s) on host '{}'".format(host)
def _create_daemon(self, daemon_type, daemon_id, host,
keyring=None,
extra_args=None, extra_config=None,
- reconfig=False):
+ reconfig=False,
+ osd_uuid_map=None):
if not extra_args:
extra_args = []
name = '%s.%s' % (daemon_type, daemon_id)
# keyring
if not keyring:
+ if daemon_type == 'mon':
+ ename = 'mon.'
+ else:
+ ename = '%s.%s' % (daemon_type, daemon_id)
ret, keyring, err = self.mon_command({
'prefix': 'auth get',
- 'entity': '%s.%s' % str(
- daemon_type,
- daemon_id if daemon_type != 'mon' else ''),
+ 'entity': ename,
})
# generate config
'crash_keyring': crash_keyring,
})
+ # osd deployments needs an --osd-uuid arg
+ if daemon_type == 'osd':
+ if not osd_uuid_map:
+ osd_uuid_map = self.get_osd_uuid_map()
+ osd_uuid = osd_uuid_map.get(daemon_id, None)
+ if not osd_uuid:
+ raise OrchestratorError('osd.%d not in osdmap' % daemon_id)
+ extra_args.extend(['--osd-fsid', osd_uuid])
+
if reconfig:
extra_args.append('--reconfig')