2017-07-18 55 views
0

我ansible角色有这个main.yml检查多个条件包括:

more tasks/main.yml 
--- 

- include: ssl_pull.yml 
    when: ACTION == 'renewal' 
- include: ssl_gen.yml 
    when: ACTION == 'generate' 
- include: ssl_push.yml 
    when: ACTION == 'install' 
- include: ssl_install.yml 
    when: ACTION == 'install' 

我想给用户传递像更新多个活动&安装所以它的能力包括

- include: ssl_pull.yml 
- include: ssl_push.yml 
- include: ssl_install.yml 

我知道如何通过ACTION变量的单个值,如下所示

ansible-playbook -v -i /web/hosts.txt site.yml -e "ACTION=renewal" 

,我可以传递一个或多个值并包含基于传递的值的文件吗?

你能提出建议我需要对我的命令/ yml进行哪些更改吗?

+3

”不是个吨,哪些标签实施了? – techraf

回答

1

Tags你在找什么?

你喜欢标记的任务:

ansible-playbook -v -i /web/hosts.txt site.yml -t "renewal,generate" 

如果您不能使用标签出于某些原因,我们还可以:

- include: ssl_pull.yml 
    tags: renewal 

- include: ssl_push.yml 
    tags: install 

- include: ssl_install.yml 
    tags: install 

然后使用-t参数中指定的标签与瓦尔斯做类似的事情。

指定VAR为逗号分隔值:

ansible-playbook -v -i /web/hosts.txt site.yml -e "ACTIONS=renewal,generate" 

并更新状态以逗号分割的VAR:

- include: ssl_pull.yml 
    when: "'renewal' in ACTIONS.split(',')" 
+0

我的site.yml没有include。它有三个角色,每个角色main.yml都有include语句。 – shifahim

+0

没关系。 –

+0

你真了不起。谢谢你的提示 – shifahim

1

Ansible tags设计做这种任务选择的。


如果你真的想不使用标签,你可以在加时赛瓦尔传递一个JSON对象:

ansible-playbook --inventory-file /web/hosts.txt site.yml \ 
       --extra-vars '{"ACTIONS": ["renewal", "install"]}' 

然后针对阵列测试:

- include: ssl_pull.yml 
    when: "'renewal' in ACTIONS"