我正在尝试仅在文件存在时包含文件.如果我的角色的用户需要,这允许现有"任务/角色"之间的自定义"任务/角色".我找到了这个:
- include: ...
when: condition
Run Code Online (Sandbox Code Playgroud)
但Ansible文档指出:
"评估所有任务,但条件适用于每项任务" - http://docs.ansible.com/playbooks_conditionals.html#applying-when-to-roles-and-includes
所以
- stat: path=/home/user/optional/file.yml
register: optional_file
- include: /home/user/optional/file.yml
when: optional_file.stat.exists
Run Code Online (Sandbox Code Playgroud)
如果包含的文件不存在,则会失败.我想可能还有另一种允许用户将任务添加到现有配方的机制.我不能让用户在我之后添加一个角色,因为他们无法控制订单:他们的角色将在我之后执行.
Dav*_*pka 29
with_first_found
条件可以在没有stat
或没有的情况下完成local_action
.此条件将通过本地文件列表执行任务,item
并将set设置为存在的第一个文件的路径.包括skip: true
对with_first_found
选项会阻止它,如果文件不存在失败.
例:
- hosts: localhost
connection: local
gather_facts: false
tasks:
- include: "{{ item }}"
with_first_found:
- files:
- /home/user/optional/file.yml
skip: true
Run Code Online (Sandbox Code Playgroud)
Leo*_*lán 10
感谢你的帮助!在最终尝试所有回复和我自己的问题的代码回到今天的Ansible之后,我正在回答我自己的问题:ansible 2.0.1.0
我的原代码,似乎现在的工作,除了可选的文件我一直在寻找在我的本地机器上,所以我必须贯穿统计local_action并设置become: no
为特定的任务,所以ansible不会试图做须藤在我的本地机器和错误:"sudo:需要密码\n"
- local_action: stat path=/home/user/optional/file.yml
register: optional_file
become: no
- include: /home/user/optional/file.yml
when: optional_file.stat.exists
Run Code Online (Sandbox Code Playgroud)
在 Ansible 2.5 及更高版本中,可以使用如下测试来完成:
- include: /home/user/optional/file.yml
when: "'/home/user/optional/file.yml' is file"
Run Code Online (Sandbox Code Playgroud)
更多详细信息:https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html#testing-paths
小智 6
我使用类似的东西,但对于文件模块,我的诀窍是检查变量定义,尝试类似于:
when: optional_file.stat.exists is defined and optional_file.stat.exists
Run Code Online (Sandbox Code Playgroud)
只有当变量存在时,任务才会运行.
归档时间: |
|
查看次数: |
50627 次 |
最近记录: |