from ..orchestra import cluster
remotes = []
for t, key in ctx.config['targets'].iteritems():
- console = None
- if 'ipmi_user' in ctx.teuthology_config:
- host = t.split('@')[-1]
- shortname = host.split('.')[0]
- console = remote.RemoteConsole(name=host,
- ipmiuser=ctx.teuthology_config['ipmi_user'],
- ipmipass=ctx.teuthology_config['ipmi_password'],
- ipmidomain=ctx.teuthology_config['ipmi_domain'])
- cname = '{host}.{domain}'.format(host=shortname, domain=ctx.teuthology_config['ipmi_domain'])
- log.debug('checking console status of %s' % cname)
- if not console.check_status():
- log.info('Failed to get console status for %s, disabling console...' % cname)
- console=None
- else:
- log.debug('console ready on %s' % cname)
-
log.debug('connecting to %s', t)
remotes.append(
remote.Remote(name=t,
ssh=connection.connect(user_at_host=t,
host_key=key,
keep_alive=True),
- console=console))
+ console=None))
ctx.cluster = cluster.Cluster()
if 'roles' in ctx.config:
for rem, roles in zip(remotes, ctx.config['roles']):
config = {}
assert isinstance(config, dict), \
'thrashosds task only accepts a dict for configuration'
+
+ if 'powercycle' in config:
+
+ if 'ipmi_user' in ctx.teuthology_config:
+ for t, key in ctx.config['targets'].iteritems():
+ host = t.split('@')[-1]
+ shortname = host.split('.')[0]
+ from ..orchestra import remote as oremote
+ console = oremote.RemoteConsole(name=host,
+ ipmiuser=ctx.teuthology_config['ipmi_user'],
+ ipmipass=ctx.teuthology_config['ipmi_password'],
+ ipmidomain=ctx.teuthology_config['ipmi_domain'])
+ cname = '{host}.{domain}'.format(host=shortname, domain=ctx.teuthology_config['ipmi_domain'])
+ log.debug('checking console status of %s' % cname)
+ if not console.check_status():
+ log.info('Failed to get console status for %s, disabling console...' % cname)
+ console=None
+ else:
+ # find the remote for this console and add it
+ remotes = [r for r in ctx.cluster.remotes.keys() if r.name == t]
+ if len(remotes) != 1:
+ raise Exception('Too many (or too few) remotes found for target {t}'.format(t=t))
+ remotes[0].console = console
+ log.debug('console ready on %s' % cname)
+
+ # check that all osd remotes have a valid console
+ osds = ctx.cluster.only(teuthology.is_type('osd'))
+ for remote, _ in osds.remotes.iteritems():
+ if not remote.console:
+ raise Exception('IPMI console required for powercycling, but not available on osd role: {r}'.format(r=remote.name))
+
log.info('Beginning thrashosds...')
first_mon = teuthology.get_first_mon(ctx, config)
(mon,) = ctx.cluster.only(first_mon).remotes.iterkeys()