+++ /dev/null
-import contextlib
-import logging
-import os
-import re
-import subprocess
-
-from teuthology import misc as teuthology
-from ..orchestra import run
-
-log = logging.getLogger(__name__)
-
-@contextlib.contextmanager
-def task(ctx, config):
- if config is None:
- config = {}
- for _, roles_for_host in ctx.cluster.remotes.iteritems():
- config[roles_for_host[0]] = {}
- assert isinstance(config, dict)
-
- log.info('Console config is %s', config)
-
- procs = {}
- if ctx.archive is not None:
- path = os.path.join(ctx.archive, 'console')
- os.makedirs(path)
-
- for role in config.iterkeys():
- # figure out ipmi host
- (rem, ) = ctx.cluster.only(role).remotes.keys()
- log.info(' role %s remote %s', role, rem)
- match = re.search('@((plana|burnupi)\d\d)\.', rem.name);
- if match:
- host = match.group(1) + '.ipmi.sepia.ceph.com'
- htype = match.group(2)
- log.info('Attaching to console on %s', host)
- subprocess.call([
- 'ipmitool',
- '-I', 'lanplus',
- '-U', htype + 'temp',
- '-P', htype + 'temp',
- '-H', host,
- 'sol', 'deactivate'
- ])
- procs[rem] = subprocess.Popen(
- args=[
- 'ipmitool',
- '-I', 'lanplus',
- '-U', htype + 'temp',
- '-P', htype + 'temp',
- '-H', host,
- 'sol', 'activate'
- ],
- stdout=open(os.path.join(path, host), 'w'),
- stderr=open(os.devnull, 'w'),
- stdin=subprocess.PIPE,
- )
-
- try:
- yield
- finally:
- for rem, proc in procs.iteritems():
- log.info('Terminating %s console', rem.name)
- proc.stdin.write('~.\n')
- proc.wait()