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

时间:2020-09-09 06:21:27

标签: ansible yaml ansible-inventory

我有一个如下的清单文件。

[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]

1 个答案:

答案 0 :(得分:1)

您应该考虑为什么需要这样做,以及是否可以使用“常规”方式实现目标。
如果您确实需要按照自己的描述进行操作,请在剧本上设置serial: 1。这会使一个主机紧随另一个主机。

例如:

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

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