【问题标题】:Check Multiple conditions in Ansible include检查 Ansible 中的多个条件包括
【发布时间】:2017-07-18 18:05:34
【问题描述】:

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

【问题讨论】:

  • 这不就是实现标签的目的吗?

标签: ansible ansible-role


【解决方案1】:

Tags 你在找什么吗?

您将任务标记为:

- 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(',')"

【讨论】:

  • 我的 site.yml 没有包含。它具有三个角色,每个角色 main.yml 都有 include 语句。
  • 没关系。
  • 你太棒了..谢谢你的提示
【解决方案2】:

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


如果你真的不想使用标签,你可以在 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"

【讨论】:

    猜你喜欢
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 2011-04-25
    • 2017-10-31
    • 2021-12-14
    • 1970-01-01
    • 2022-12-08
    相关资源
    最近更新 更多