6

我想在 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

有什么办法让它们按顺序运行吗?

4

3 回答 3

13

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

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

于 2016-05-25T13:48:08.893 回答
7

您可以在 playbook中使用forkswith adhoc 命令。serial: 1

在临时命令上:

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

剧本里面:

- hosts: aws
  become: yes
  gather_facts: yes
  serial: 1
  tasks:
    - YOUR TASKS HERE
于 2016-06-06T17:32:11.573 回答
2

--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 命令输出的快速脏报告很有用。

于 2018-11-30T00:06:47.550 回答