Как проверить, что зарегистрированная переменная не пуста?
Как я могу проверить, что 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
тоже не определено.