Ansible adhoc 命令顺序

Ansible adhoc command in sequence

我想 运行 在 EC2 实例列表上执行 ansible adhoc 命令。我想要 ansible 按顺序 运行 它,但 ansible 运行 随机。例如:

13:42:21 @cnayak ansible :► ansible aws -a "hostname"
ec2 | SUCCESS | rc=0 >>
ip-172-31-36-255

ec3 | SUCCESS | rc=0 >>
ip-172-31-45-174

13:42:26 @cnayak ansible :► ansible aws -a "hostname"
ec3 | SUCCESS | rc=0 >>
ip-172-31-45-174

ec2 | SUCCESS | rc=0 >>
ip-172-31-36-255

有什么方法可以让它们运行按顺序排列吗?

默认情况下 运行s 任务是并行的。如果您希望它们连续执行,那么您可以使用“--forks”选项限制同时 运行ning 的工人数量。

将“--forks 1”添加到您的 ansible 调用应该 运行 您的命令在所有主机上按顺序执行(按清单定义的顺序)。

您可以在剧本中使用 forks with adhoc 命令和 serial: 1

临时命令:

ansible aws -a "hostname" --forks=1

剧本内幕:

- hosts: aws
  become: yes
  gather_facts: yes
  serial: 1
  tasks:
    - YOUR TASKS HERE

--forks=1 在最近版本的 ansible (2.7) 中没有为我整理库存

我发现另一种有用的方法是使用 "oneline" 输出回调,因此我可以在输出上使用标准 sortgrep 工具:

ANSIBLE_LOAD_CALLBACK_PLUGINS=1 \
ANSIBLE_STDOUT_CALLBACK=oneline \
ansible \
  -m debug -a "msg={{ansible_host}}\t{{inventory_hostname}}" \
  | sort \
  | grep -oP '"msg": \K"[^"]*"' \
  | xargs -n 1 echo -e

这对于快速报告任意变量或(单行)shell 命令输出非常有用。