Ansible - 如何在运行playbook时控制主机的顺序

cri*_*tan 5 ansible

假设我们在库存文件中定义了两台机器:

[db-server-preprod] 172.16.0.1 172.16.0.2

如果我针对该组运行一个剧本,则如果序列为0则在两台机器上同时运行,或者如果为1则顺序运行,并且该顺序似乎是在该组中定义IP的顺序.

但问题是我是否可以在定义的机器上控制剧本执行的顺序?

对于其中一台机器(主机)而言,相同角色的行为略有不同,但与其他所有机器相比,但我希望作为主机的机器将是第一台执行该机器的机器非常重要.

我的想法到目前为止:

  • 创建不同的组名,其中IP的顺序是相反的,并且基于在一个主机或另一个主机上运行的需求,但缺点是我认为我需要复制group_vars,因此每个db-server-preprod*变体+所有其他环境将有一个.
  • 将安装分成两个不同的角色 - 一个用于主服务器和备用服务器,根据需要,我将在我想要的机器上运行我想要的那个.

Kon*_*rov 7

您可以将主主机置于单独的组中,然后将公共角色一次应用于所有服务器,然后仅将主角色应用于主服务器,将奴隶角色应用于除主模式之外的所有服务器使用排除模式.

库存:

[all-servers]
host1
host2
host3
host4

[master-server]
host2
Run Code Online (Sandbox Code Playgroud)

剧本:

---
- hosts: all-servers
  gather_facts: no
  tasks:
    - debug: msg=role-common

- hosts: master-server
  gather_facts: no
  tasks:
    - debug: msg=role-master

- hosts: all-servers:!master-server
  gather_facts: no
  tasks:
    - debug: msg=role-slave
Run Code Online (Sandbox Code Playgroud)