我对 ansible 很陌生,所以我可能会设置错误。我的想法是我有某些类别的服务器。(例如监视器、网络、数据库)
我想对它们运行本地 ansible 运行,所以我的监视器播放看起来像
---
# plays/monitor.yaml
- hosts: mongo
connection: local
hosts: localhost
become: yes
become_user: root
roles:
- ../roles/users
- ../roles/monitor
vars:
sensu_install_client: true
sensu_install_server: true
Run Code Online (Sandbox Code Playgroud)
我的roles/monitor/tasks/main.yml
样子
---
# roles/monitor/tasks/main.yaml
- include: common.yml
- include: server.yml
when: sensu_install_server
- include: client.yml
when: sensu_install_client
Run Code Online (Sandbox Code Playgroud)
我希望能够传入 vars,因此包含将发生在角色中。所以当我设置我的 api 实例时,我可以做类似的事情
vars:
sensu_install_client: true
Run Code Online (Sandbox Code Playgroud)
在剧中,它只会包含来自监视器角色的 client.yml。
我不清楚为什么这不起作用。我看不出有什么问题。但让我给你一些一般性建议,也许这也会对你有所帮助。
最佳做法是将您的剧本放在根级别。看看这个结构。通过该设置,您无需指定角色的路径,因为 Ansible 会自动期望roles
与剧本相关的目录中的角色。那么你在剧本中的角色部分就干净多了:
roles:
- users
- monitor
Run Code Online (Sandbox Code Playgroud)
您可以使用另外两种方法,而不是定义全局变量来触发角色内部的操作。
角色可以有参数。如果要传递参数,只需将其转换为字典:
roles:
- users
- role: monitor
sensu_install_client: true
sensu_install_server: true
Run Code Online (Sandbox Code Playgroud)
变量sensu_install_client
and sensu_install_server
then 仅在角色中可用monitor
。这更简洁一点,也让任何人都清楚这些变量将用于此角色,而不是users
角色。
标签实际上是如何触发剧本/角色的特定部分的方式。标签虽然是从命令行传递的,而不是由剧本中的硬编码变量传递的。想象一下你的角色main.yml
是这样的:
---
# roles/monitor/tasks/main.yaml
- include: common.yml
tags: always
- include: server.yml
tags: server
- include: client.yml
tags: client
Run Code Online (Sandbox Code Playgroud)
标签always
很特别,将运行标记的任务......好吧你猜对了......总是如此。
现在你可以这样调用你的剧本:
ansible-playbook monitor.yml --tags server
Run Code Online (Sandbox Code Playgroud)
或者
ansible-playbook monitor.yml --tags client
Run Code Online (Sandbox Code Playgroud)
或者,如果您想同时运行两者,您甚至可以这样做:
ansible-playbook monitor.yml --tags "client,server"
Run Code Online (Sandbox Code Playgroud)
如果您使用它,请不要忘记相应地标记您的用户角色,否则它根本不会运行。
如果你不指定任何--tags
所有任务都被执行,如果你想过滤特定的标签你可以使用该--skip-tags
选项
ansible-playbook monitor.yml --skip-tags "server"
Run Code Online (Sandbox Code Playgroud)
您甚至可以过滤 always 标签。
ansible-playbook monitor.yml --tags "server" --skip-tags "always"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8896 次 |
最近记录: |