ansible - 覆盖特定角色的 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]
。
有没有办法做到这一点?
解决方案
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:
任务来选择或创建主机并将其添加到(新的或现有的)组中,作为剧本的副作用。
推荐阅读
- r - rvest 包无法识别表单
- swift - Type extensions from a framework's dependency available in app
- python - 高级切片。高阶切片/选择
- javascript - Node callback style with promisify? "The 'original' argument must be of type function"
- symfony - 更改后,Symfony 实体不会在数据库中更新
- sql - Get previous rows value based on date
- python-3.x - 为什么在使用 pytest-xdist 时 pytest_sessionstart 钩子会运行多次?
- html - Animation delay on background image
- mysql - order by next and previous
- ios - 动画文本UILabels?(如 Apple 的 Clips 应用程序)