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 进行哪些更改?

4

2 回答 2

1

标签是您要查找的内容吗?

您将任务标记为:

- include: ssl_pull.yml
  tags: renewal

- include: ssl_push.yml
  tags: install

- include: ssl_install.yml
  tags: install

然后使用参数指定标签-t

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

如果你因为某些原因不能使用标签,我们也可以用 vars 做类似的事情。

将 var 指定为逗号分隔值:

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

并更新条件以用逗号分割 var:

- include: ssl_pull.yml
  when: "'renewal' in ACTIONS.split(',')"
于 2017-07-18T10:01:26.410 回答
1

Ansible 标签就是为做这种任务选择而设计的。


如果你真的不想使用标签,你可以在 extra-vars 中传递一个 JSON 对象:

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

然后针对数组进行测试:

- include: ssl_pull.yml
  when: "'renewal' in ACTIONS"
于 2017-07-18T10:05:34.777 回答