覆盖特定角色上的Ansible主机

覆盖特定角色上的Ansible主机,ansible,ansible-role,Ansible,Ansible Role,我有一本下面这样的剧本 - name: Do something hosts: "view-servers" roles: - { role: role1, var1: "abc" } - { role: role2, var2: "def" } - { role: role2, var2: "ghi" } 查看服务器中的服务器相同且重复。因此,从变量的角度来看,除了主机名之外没有什么不同。 在上面的role1中,我需要为其中一个视图服务器实际运行它。类似于查看

我有一本下面这样的剧本

- name: Do something
  hosts: "view-servers"
  roles:
    - { role: role1, var1: "abc" }
    - { role: role2, var2: "def" }
    - { role: role2, var2: "ghi" }
查看服务器
中的服务器相同且重复。因此,从变量的角度来看,除了主机名之外没有什么不同。 在上面的
role1
中,我需要为其中一个视图服务器实际运行它。类似于
查看服务器[0]


有办法吗

剧本yaml实际上是一个列表,这就是为什么它们都以
-hosts:
开头(在您的例子中是err或
-name:
,但大多数都没有命名剧本)

因此:

-主机:查看服务器
角色:
-角色:角色1
-主机:查看服务器[0]
角色:
-角色:角色1
由于它们是一个列表,它将按照它们在文件中的存在顺序运行它们;因此,如果希望先运行
查看服务器[0]
,请将其移动到
-hosts:view servers
之前,否则它将运行所有服务器,然后重新连接到组中的第一个服务器,并对其应用指定的角色


请注意,
查看服务器[0]
高度依赖于您的库存,因此请注意该组中的第0项始终是您想要的服务器。如果您需要更严格的控制,您可以使用动态资源清册脚本,也可以使用任务选择或创建主机,并将其添加到(新的或现有的)组中,作为playbook的副作用。

playbook yaml实际上是一个列表,这就是为什么它们都以
-hosts:
(错误,或
-name:
在您的案例中,但大多数都没有命名的剧本)

因此:

-主机:查看服务器
角色:
-角色:角色1
-主机:查看服务器[0]
角色:
-角色:角色1
由于它们是一个列表,它将按照它们在文件中的存在顺序运行它们;因此,如果您希望先运行
查看服务器[0]
,请将其移动到
-hosts:view servers
之前,否则它将全部运行它们,然后重新连接到组中的第一个并对其应用指定的角色

请注意,
查看服务器[0]
高度依赖于您的资源清册,因此请注意该组中的第0项始终是您想要的服务器。如果您需要更严格的控制,您可以使用动态资源清册脚本,也可以使用任务选择或创建主机并将其添加到(新的或现有的)中作为剧本的副作用分组