有条件地运行 Ansible 任务,如果不满足条件则失败

Cod*_*der 4 ansible ansible-playbook

我对 Ansible 很陌生并且遇到了问题。我只想在满足条件时运行该模块,但如果条件失败,它应该使任务失败并向用户报告。目前我所做的,只会跳过它而不是失败。

下面是我的代码,我有要检查的条件,并且仅在 result.stdout == '有效' 时运行,但如果其'无效',我希望任务失败。目前,如果不满足条件,它只会跳过它。

---
- name: Check Value
  become: yes
  shell: /usr/bin/python3 check.py
  args:
    chdir: "mydir/scripts/"
  register: result
  tags: data_merge

- name: Merge Data
  become: yes
  when: result.stdout == 'valid'
  local_action:
    module: some_module
    provider: "{{some_provider}}"
    role_path: "{{role_path}}"
  run_once: true
  tags: data_merge
Run Code Online (Sandbox Code Playgroud)

Cav*_*vaz 6

您有三个选择:

用于failed_when使 playbook 无法检查条件。我建议向 python 脚本添加退出代码(例如:)exit(255 if error else 0),它比解析stdout:更干净

- name: Check Value
  shell: /usr/bin/python3 check.py
  args:
    chdir: "mydir/scripts/"
  register: result
  failed_when: result.rc != 0
  tags: data_merge
Run Code Online (Sandbox Code Playgroud)

fail将终止打印错误消息的应用程序:

- name: Fail on not valid
  fail:
    msg: failed
  when: result.stdout != 'valid'
Run Code Online (Sandbox Code Playgroud)

meta: end_play将默默地停止应用程序(但如果您想要反馈输出,这可能没有用)

- name: Stop on not valid
  meta: end_play
  when: result.stdout != 'valid'
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,您都不再需要when: result.stdout == 'valid'合并数据了。