我正在尝试仅在文件存在时包含文件.如果我的角色的用户需要,这允许现有"任务/角色"之间的自定义"任务/角色".我找到了这个:
- 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)
如果包含的文件不存在,则会失败.我想可能还有另一种允许用户将任务添加到现有配方的机制.我不能让用户在我之后添加一个角色,因为他们无法控制订单:他们的角色将在我之后执行.
我wget从ansible 下载文件.
- name: Download Solr
shell: chdir={{project_root}}/solr wget http://mirror.mel.bkb.net.au/pub/apache/lucene/solr/4.7.0/solr-4.7.0.zip
Run Code Online (Sandbox Code Playgroud)
但如果该位置不存在zip文件,我只想这样做.目前系统每次都下载它.
我有一种情况需要检查本地机器上的文件状态(我将调用的文件ansible-playbook ...).
如果存在由用户创建的文件,则需要将其复制到远程主机.如果它不存在,则没有远程主机需要它.
我知道我做过的事情:
- name: Check for ~/.blah/config
stat: path=/home/ubuntu/.blah/config
register: stat_blah_config
- name: Do something with blah config
shell: ~/do_something_with_config.sh
when: stat_aws_config.stat.exists == true
Run Code Online (Sandbox Code Playgroud)
但这只有在远程存在文件时才有效.有没有办法有条件地执行任务(如副本)只有当文件存在于本地时(stat第一个任务在本地而不是远程执行),如果没有,则无声地失败?我不确定ansible是否具有这种功能,但它会很有用.