首页 > 解决方案 > 覆盖特定角色的 Ansible 主机

问题描述

我有一个像下面这样的剧本

- name: Do something
  hosts: "view-servers"
  roles:
    - { role: role1, var1: "abc" }
    - { role: role2, var2: "def" }
    - { role: role2, var2: "ghi" }

中的服务器view-servers是相同的并且是复制的。因此,除了主机名之外,从变量的角度来看没有区别。在role1上面,我只需要为 1 个视图服务器实际运行它。类似的东西view-servers[0]

有没有办法做到这一点?

标签: ansibleansible-role

解决方案


playbook yaml 实际上是一个list,这就是为什么它们都以- hosts:(错误,或者- name:在你的情况下,但大多数没有命名的 playbooks)开头

因此:

- hosts: view-servers
  roles:
  - role: role1
- hosts: view-servers[0]
  roles:
  - role: role1

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

请注意,这view-servers[0]高度依赖于您的库存,因此请注意该组中的第 0 个项目始终是您想要的服务器。如果您需要更严格的控制,您可以使用动态清单脚本,或者您可以使用add_host:任务来选择或创建主机并将其添加到(新的或现有的)组中,作为剧本的副作用。


推荐阅读