是否有条件运行角色的标准或最佳做法?
如果我有以下基本剧本:
---
- hosts: prod
gather_facts: false
become: true
become_method: sudo
vars_files:
- variables/vars.yml
pre_tasks:
- name: check app existence
command: ls /data/myapp
# Store the resuts here
register: app_exists
ignore_errors: yes
roles:
- os_base_setup
- selinux_setup
- libsemanage_install
...
# Conditionally run this role
- - { role: app_clean_install, when: app_exists|failed }
- post_install_config
- cleanup
...
缺点我可以看到这种方法:
这始终将“预先任务”报告为已进行“更改”。
它还会将每个单独的任务报告为“跳过”角色,而不是仅仅跳过整个角色。
答案 0 :(得分:1)
这始终会报告“预先”任务'因为做了一个改变'
使用
changed_when: false
执行shell命令时,您知道它只收集信息,但不会更改任何内容。
它还会使用'跳过'报告每个单独的任务。作为跳过的角色,而不是仅仅跳过整个角色。
在ansible.cfg
stdout_callback = skippy
忽略跳过的任务。
当测试失败时,是否仍然阻止此pre_task记录错误?
无法阻止记录错误。但是可以使用以下选项忽略错误:
failed_when: false
在这种情况下会记录错误,但是剧本不会停止执行。这是处理剧本中的错误所必需的。有关示例,请参阅here。