From b4bf14edd550862760783f6298da9c74079b018a Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 22 Oct 2012 16:51:54 -0700 Subject: [PATCH] add exec task --- teuthology/misc.py | 5 +++++ teuthology/task/exec.py | 42 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 teuthology/task/exec.py diff --git a/teuthology/misc.py b/teuthology/misc.py index b88ff4ea4a33d..0422a826e947e 100644 --- a/teuthology/misc.py +++ b/teuthology/misc.py @@ -138,6 +138,11 @@ def roles_of_type(roles_for_host, type_): id_ = name[len(prefix):] yield id_ +def all_roles(cluster): + for _, roles_for_host in cluster.remotes.iteritems(): + for name in roles_for_host: + yield name + def all_roles_of_type(cluster, type_): prefix = '{type}.'.format(type=type_) for _, roles_for_host in cluster.remotes.iteritems(): diff --git a/teuthology/task/exec.py b/teuthology/task/exec.py new file mode 100644 index 0000000000000..8961ee6faf5e0 --- /dev/null +++ b/teuthology/task/exec.py @@ -0,0 +1,42 @@ +import contextlib +import logging +import os + +from teuthology import misc as teuthology + +log = logging.getLogger(__name__) + +def task(ctx, config): + """ + Execute commands on a given role + + tasks: + - ceph: + - kclient: [client.a] + - exec: + client.a: + - echo 'module libceph +p' > /sys/kernel/debug/dynamic_debug/control + - echo 'module ceph +p' > /sys/kernel/debug/dynamic_debug/control + - interactive: + + """ + log.info('Executing custom commands...') + assert isinstance(config, dict), "task exec got invalid config" + + if 'all' in config and len(config) == 1: + a = config['all'] + roles = teuthology.all_roles(ctx.cluster) + config = dict((id_, a) for id_ in roles) + + for role, ls in config.iteritems(): + (remote,) = ctx.cluster.only(role).remotes.iterkeys() + log.info('Running commands on role %s host %s', role, remote.name) + for c in ls: + remote.run( + args=[ + 'sudo', + 'bash', + '-c', + c], + ) + -- 2.39.5