tvs*_*tvs 4 ansible ansible-role
假设我有一个单独的playbook,其中包含一些安装appserver的角色,我喜欢在生产和测试服务器上应用相同的playbook.
生产服务器和测试服务器都具有相同的角色列表,除了一个,只应在生产服务器上应用.
是否有可能以某种方式指定此角色仅应用于使用相同playbook的生产服务器?
例如,如果剧本是:
---
- hosts: appserver
roles:
- { role: mail, tags: ["mail"] }
- { role: firewall, tags: ["firewall"] }
- { role: webserver, tags: ["webserver"] }
- { role: cache, tags: ["cache"] }
Run Code Online (Sandbox Code Playgroud)
我有两个库存:一个用于生产,一个用于测试.
当我使用测试库存运行playbook时,我不希望执行角色'firewall'.
我的想法是做一些事情,比如在'生产'库存中设置一个变量并使用类似' if <var>的设置,然后执行角色'防火墙' '...我不知道这是否可能,如果它是的,该怎么办?
您可以定义变量,例如production_environment,在库存文件中,分配true或false值并when在playbook中使用条件:
---
- hosts: appserver
roles:
- { role: mail, tags: ["mail"] }
- { role: firewall, tags: ["firewall"], when: production_environment }
- { role: webserver, tags: ["webserver"] }
- { role: cache, tags: ["cache"] }
Run Code Online (Sandbox Code Playgroud)
或者您可以inventory_file直接访问变量.例如,如果您使用-i production:
---
- hosts: appserver
roles:
- { role: mail, tags: ["mail"] }
- { role: firewall, tags: ["firewall"], when: inventory_file == "production" }
- { role: webserver, tags: ["webserver"] }
- { role: cache, tags: ["cache"] }
Run Code Online (Sandbox Code Playgroud)
你走哪条路是一个行政决定.第二种方法使用较少的步骤,但要求库存文件名在剧本中"硬编码".
你为什么不只使用库存组?制作两个库存:
测试:
[application]
my-dev-server
Run Code Online (Sandbox Code Playgroud)
生产:
[application]
company-prod-server
[firewall]
company-prod-server
Run Code Online (Sandbox Code Playgroud)
并按如下方式更改您的剧本:
---
- hosts: firewall
roles:
- { role: firewall, tags: ["firewall"] }
- hosts: application
roles:
- { role: mail, tags: ["mail"] }
- { role: webserver, tags: ["webserver"] }
- { role: cache, tags: ["cache"] }
Run Code Online (Sandbox Code Playgroud)
- { role: firewall, tags: ["firewall"], when: MyVar }\nRun Code Online (Sandbox Code Playgroud)\n\n请参阅将 \xe2\x80\x98when\xe2\x80\x99 应用于角色并包含。
\n| 归档时间: |
|
| 查看次数: |
10080 次 |
| 最近记录: |