2017-10-16 16 views
-1

有条件运行角色是否有标准或最佳实践?有条件地运行角色的最佳实践

如果我有以下的基本剧本:

--- 
- 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 
... 

缺点,我可以看到这种方法:

这始终报告“前置任务”为已经做了“变化”。

它还会将每个单独的任务与“跳过”角色报告为跳过,而不是仅跳过整个角色。

+2

在某处键入问号并不一定会成为问题。 – techraf

+0

感谢您的反馈......这个问题没有明确说明,所以我做了一个编辑。 – comfytoday

回答

1

这总是报告'前任务'已经做了'改变'。

使用

changed_when: false 

当你执行一个shell命令,你知道,这只是收集资料,但并不能改变什么。

它还报告每个单个任务的“跳过”角色为跳过,而不是跳过整个角色。

设置您ansible.cfg

stdout_callback = skippy 

忽略跳过任务。

有没有办法阻止这个pre_task在测试失败时记录错误?

不可能阻止记录错误。但是,有可能忽略的错误有以下选项:

failed_when: false 

在这种情况下,记录的错误,但剧本不停止执行。这对于处理剧本中的错误是必要的。以here为例。

+0

有没有办法阻止这个pre_task在测试失败时记录错误? atm第一个任务记录了一堆红色的错误文本。 – comfytoday