![我可以在 Ansilbe playbook 的定义(Playbook 的开头)部分使用“when”条件吗?](https://linux22.com/image/206818/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%20Ansilbe%20playbook%20%E7%9A%84%E5%AE%9A%E4%B9%89%EF%BC%88Playbook%20%E7%9A%84%E5%BC%80%E5%A4%B4%EF%BC%89%E9%83%A8%E5%88%86%E4%BD%BF%E7%94%A8%E2%80%9Cwhen%E2%80%9D%E6%9D%A1%E4%BB%B6%E5%90%97%EF%BC%9F.png)
我正在写一本剧本,这就是我想要实现的目标:
公司有一个银行应用程序,其组件分布在多个服务器上。该服务可以通过单个脚本停止,也可以逐个组件停止。在应用安全补丁 (RHEL) 之前,我必须停止该应用程序。
它应该从用户那里读取用户是否想要从 AIO 脚本停止应用程序或者应该逐个组件地停止应用程序。
对于我写的包:
vars_prompt:
- name: deploypackages
prompt: Do you want to deploy Packages
private: no
现在有一种方法可以为应用程序实现此目的,并且它应该仅在以下情况下运行:部署包等于y
我们可以when
在任务之前使用主机部分中的子句吗?我尝试过,但它没有做任何事情 - 甚至没有抛出错误,所以我在互联网上搜索,但找不到任何答案。
答案1
问:仅当“deploypackages”等于“y”时运行。
A:比如创建一个库存
shell> cat hosts
dummy
[multiple_servers]
host1
host2
host3
和剧本
shell> cat pb.yml
- hosts: "{{ (deploypackages == 'y')|
ternary('multiple_servers', 'dummy') }}"
gather_facts: false
vars_prompt:
- name: deploypackages
prompt: Do you want to deploy Packages
private: no
tasks:
- meta: end_play
when: inventory_hostname == 'dummy'
- debug:
msg: Applying security Patches ...
- 如果你不要回答“y”戏将结束
shell> ansible-playbook -i hosts pb.yml
Do you want to deploy Packages: no
PLAY [dummy] *********************************************************************************
TASK [meta] **********************************************************************************
PLAY RECAP ***********************************************************************************
- 如果你回答“是”戏还将继续
shell> ansible-playbook -i hosts pb.yml
Do you want to deploy Packages: y
PLAY [multiple_servers] **********************************************************************
TASK [meta] **********************************************************************************
skipping: [host1]
TASK [debug] *********************************************************************************
ok: [host1] =>
msg: Applying security Patches ...
ok: [host2] =>
msg: Applying security Patches ...
ok: [host3] =>
msg: Applying security Patches ...
PLAY RECAP ***********************************************************************************
host1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0