From 120b83f4cef23a6d0e36b40b7b8ad4a8706ed7b8 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 10 May 2021 11:13:25 -0500 Subject: [PATCH] tasks/exec: add all-roles, all-hosts keys 'all' is ambiguous! Signed-off-by: Sage Weil --- teuthology/task/exec.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/teuthology/task/exec.py b/teuthology/task/exec.py index 2d38fa3b8..b3548c332 100644 --- a/teuthology/task/exec.py +++ b/teuthology/task/exec.py @@ -23,6 +23,16 @@ def task(ctx, config): It stops and fails with the first command that does not return on success. It means that if the first command fails, the second won't run at all. + You can run a command on all hosts `all-hosts`, or all roles with `all-roles`: + + tasks: + - exec: + all-hosts: + - touch /etc/passwd + - exec: + all-roles: + - pwd + To avoid confusion it is recommended to explicitly enclose the commands in double quotes. For instance if the command is false (without double quotes) it will be interpreted as a boolean by the YAML parser. @@ -39,6 +49,14 @@ def task(ctx, config): a = config['all'] roles = teuthology.all_roles(ctx.cluster) config = dict((id_, a) for id_ in roles) + elif 'all-roles' in config and len(config) == 1: + a = config['all-roles'] + roles = teuthology.all_roles(ctx.cluster) + config = dict((id_, a) for id_ in roles) + elif 'all-hosts' in config and len(config) == 1: + a = config['all-hosts'] + roles = [roles[0] for roles in ctx.cluster.remotes.values()] + config = dict((id_, a) for id_ in roles) for role, ls in config.items(): (remote,) = ctx.cluster.only(role).remotes.keys() -- 2.47.3