有条件地运行ansible角色的最佳实践

时间:2017-10-16 04:12:52

标签: ansible

是否有条件运行角色的标准或最佳做法?

如果我有以下基本剧本:

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

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

这始终将“预先任务”报告为已进行“更改”。

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

1 个答案:

答案 0 :(得分:1)

  

这始终会报告“预先”任务'因为做了一个改变'

使用

changed_when: false

执行shell命令时,您知道它只收集信息,但不会更改任何内容。

  

它还会使用'跳过'报告每个单独的任务。作为跳过的角色,而不是仅仅跳过整个角色。

ansible.cfg

中设置
stdout_callback = skippy

忽略跳过的任务。

  

当测试失败时,是否仍然阻止此pre_task记录错误?

无法阻止记录错误。但是可以使用以下选项忽略错误:

failed_when: false

在这种情况下会记录错误,但是剧本不会停止执行。这是处理剧本中的错误所必需的。有关示例,请参阅here

相关问题