ansible:测试registered_var.stderr不为空

use*_*834 22 yaml ansible

如何测试stderr是非空的::

- name: Check script
  shell: . {{ venv_name }}/bin/activate && myscritp.py
  args:
    chdir: "{{ home }}"
  sudo_user: "{{ user }}"
  register: test_myscript

- debug: msg='myscritp is Ok'
  when: not test_myscript.stderr
Run Code Online (Sandbox Code Playgroud)

所以,如果没有错误,我可以阅读::

  TASK: [deploy | debug msg='critp is Ok] *******
  ok: [vagrant] => {
      "msg": "myscritp is Ok"
  }
Run Code Online (Sandbox Code Playgroud)

并且cas stderr中的FATAL错误不为空.

Nas*_*asr 27

你可以检查空字符串(当stderr为空时)

- name: Check script
  shell: . {{ venv_name }}/bin/activate && myscritp.py
  args:
    chdir: "{{ home }}"
  sudo_user: "{{ user }}"
  register: test_myscript

- debug: msg='myscritp is Ok'
  when: test_myscript.stderr == ""
Run Code Online (Sandbox Code Playgroud)

如果要检查是否失败:

- debug: msg='myscritp has error: {{test_myscript.stderr}}'
  when: test_myscript.stderr != ""
Run Code Online (Sandbox Code Playgroud)

另请参阅stackoverflow问题

  • Ansible Galaxy语法得分:报告"E602:不要与空字符串比较". (3认同)

Vla*_*tka 16

请参阅ansible-lint 默认规则。以下情况导致E602不与空字符串进行比较

when: test_myscript.stderr != ""
Run Code Online (Sandbox Code Playgroud)

正确的语法以及“ Ansible Galaxy Warning-Free”选项是

when: test_myscript.stderr | length > 0
Run Code Online (Sandbox Code Playgroud)

加法1. 当前规则说

相反使用when: var而不是when: var != ""(或''' when: not var而不是``when:var ==“”


Ale*_*lex 10

when: myvar | default('', true) | trim != ''
Run Code Online (Sandbox Code Playgroud)

| trim != ''用来检查变量是否具有空值。我也总是添加| default(..., true)检查以捕获何时myvar未定义。