Как проверить, что зарегистрированная переменная не пуста?

Как я могу проверить, что 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

Так что, если нет ошибки, я могу прочитать:

  TASK: [deploy | debug msg='critp is Ok] *******
  ok: [vagrant] => {
      "msg": "myscritp is Ok"
  }

Если stderr не пуст, FATAl ошибка FATAl.

Ответы

Ответ 1

Вы можете проверить пустую строку (когда 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 == ""

Если вы хотите проверить наличие сбоя:

- debug: msg='myscritp has error: {{test_myscript.stderr}}'
  when: test_myscript.stderr != ""

Также посмотрите на этот fooobar.com/questions/293612/...

Ответ 2

См. Правила по умолчанию ansible-lint. Следующее условие вызывает E602 Не сравнивать с пустой строкой

when: test_myscript.stderr != ""

Правильный синтаксис, а также опция "Ansible Galaxy Warning-Free"

when: test_myscript.stderr | length > 0

Дополнение 1. Действующее правило гласит:

Используйте when: var а не when: var != "" (Или '' наоборот when: not var а не '' когда: var == "" '

Ответ 3

when: myvar | default(false, true) and
      myvar | trim != ''

Я использую | trim != '', чтобы проверить, имеет ли переменная пустое значение или нет. Я также всегда добавляю проверку | default(..., true), чтобы ловить, когда myvar тоже не определено.