如何 运行 分别为每个服务器执行 Ansible 任务

How to run Ansible tasks for each server separately

我有如下清单文件。

[all:vars]
ansible_user=root
zookeeper_new=true

[zookeepers]
10.16.0.31
10.16.0.32

在我声明任务的 .yml 文件中,我想 运行 所有这些任务首先在服务器 31 中,然后在服务器 32 中。这可能吗?如果可以,我该怎么做?

目前,它运行在两台服务器上都是单任务,然后跳转到下一个任务。举个例子;

TASK [Zookeeper/Zookeeper-New : Stop and disable existing zookeeper service] ***
ok: [10.16.0.31]
ok: [10.16.0.32]

TASK [Zookeeper/Zookeeper-New : Find previous zookeeper version directories] ***
ok: [10.16.0.32]
ok: [10.16.0.31]

相反,我想要的是

TASK [Zookeeper/Zookeeper-New : Stop and disable existing zookeeper service] ***
ok: [10.16.0.31]

TASK [Zookeeper/Zookeeper-New : Find previous zookeeper version directories] ***
ok: [10.16.0.31]

TASK [Zookeeper/Zookeeper-New : Stop and disable existing zookeeper service] ***
ok: [10.16.0.32]

TASK [Zookeeper/Zookeeper-New : Find previous zookeeper version directories] ***
ok: [10.16.0.32]

您应该考虑为什么需要这样做,以及是否可以使用“正常”方式实现您的目标。
如果你真的需要按照你描述的方式去做,请在你的剧本上设置 serial: 1 。这将导致一台主机接一台主机。

例如:

---
- name: test play
  hosts: zookeepers
  serial: 1
  tasks:
    - name: task one
      command: hostname

查看文档以获取更多信息: