break
# refresh ceph.conf files for all mons + first mgr
- """
for remote, roles in ctx.cluster.remotes.items():
for mon in [r for r in roles
if teuthology.is_type('mon', cluster_name)(r)]:
c_, _, id_ = teuthology.split_role(mon)
_shell(ctx, cluster_name, remote, [
- 'ceph', 'orchestrator', 'service', 'redeploy',
+ 'ceph', 'orchestrator', 'service-instance', 'reconfig',
'mon', id_,
])
_shell(ctx, cluster_name, ctx.ceph[cluster_name].bootstrap_remote, [
- 'ceph', 'orchestrator', 'service', 'redeploy',
+ 'ceph', 'orchestrator', 'service-instance', 'reconfig',
'mgr', ctx.ceph[cluster_name].first_mgr,
])
- """
yield
@async_map_completion
def _service_action(self, service_type, service_id, host, action):
if action == 'redeploy':
- # recreate the systemd unit and then restart
- if service_type == 'mon':
- # get mon. key
- ret, keyring, err = self.mon_command({
- 'prefix': 'auth get',
- 'entity': 'mon.',
- })
- else:
- ret, keyring, err = self.mon_command({
- 'prefix': 'auth get',
- 'entity': '%s.%s' % (service_type, service_id),
- })
+ # stop, recreate the container+unit, then restart
return self._create_daemon(service_type, service_id, host,
- keyring)
+ None)
+ elif action == 'reconfig':
+ return self._create_daemon(service_type, service_id, host,
+ None, reconfig=True)
actions = {
'start': ['reset-failed', 'start'],
return self._remove_daemon(args)
def _create_daemon(self, daemon_type, daemon_id, host, keyring,
- extra_args=[], extra_config=None):
+ extra_args=[], extra_config=None,
+ reconfig=False):
name = '%s.%s' % (daemon_type, daemon_id)
# generate config
if extra_config:
config += extra_config
+ # crash_keyring
ret, crash_keyring, err = self.mon_command({
'prefix': 'auth get-or-create',
'entity': 'client.crash.%s' % host,
'crash_keyring': crash_keyring,
})
+ if reconfig:
+ extra_args.append('--reconfig')
+
out, err, code = self._run_cephadm(
host, name, 'deploy',
[
stdin=j)
self.log.debug('create_daemon code %s out %s' % (code, out))
self.service_cache.invalidate(host)
- return "(Re)deployed {} on host '{}'".format(name, host)
+ return "{} {} on host '{}'".format(
+ 'Reconfigured' if reconfig else 'Deployed', name, host)
@async_map_completion
def _remove_daemon(self, name, host):
* If using service_id, perform the action on a single specific daemon
instance.
- :param action: one of "start", "stop", "restart", "redeploy"
+ :param action: one of "start", "stop", "restart", "redeploy", "reconfig"
:param service_type: e.g. "mds", "rgw", ...
:param service_name: name of logical service ("cephfs", "us-east", ...)
:param service_id: service daemon instance (usually a short hostname)
@orchestrator._cli_write_command(
'orchestrator service',
- "name=action,type=CephChoices,strings=start|stop|restart|redeploy "
+ "name=action,type=CephChoices,strings=start|stop|restart|redeploy|reconfig "
"name=svc_type,type=CephString "
"name=svc_name,type=CephString",
- 'Start, stop, restart, redeploy an entire service (i.e. all daemons)')
+ 'Start, stop, restart, redeploy, or reconfig an entire service (i.e. all daemons)')
def _service_action(self, action, svc_type, svc_name):
completion = self.service_action(action, svc_type, service_name=svc_name)
self._orchestrator_wait([completion])
@orchestrator._cli_write_command(
'orchestrator service-instance',
- "name=action,type=CephChoices,strings=start|stop|restart|redeploy "
+ "name=action,type=CephChoices,strings=start|stop|restart|redeploy|reconfig "
"name=svc_type,type=CephString "
"name=svc_id,type=CephString",
- 'Start, stop, restart, or redeploy a specific service instance')
+ 'Start, stop, restart, redeploy, or reconfig a specific service instance')
def _service_instance_action(self, action, svc_type, svc_id):
completion = self.service_action(action, svc_type, service_id=svc_id)
self._orchestrator_wait([completion])