Что касается условия Fail, это потому, что grep -c PATTERN FILE
вернет ненулевой код выхода, если ШАБЛОН не найден в файле.
Быстрый пример:
# grep -c root /etc/passwd; echo $?
2
0
# grep -c rootNO /etc/passwd; echo $?
0
1
Итак, я считаю, что есть два варианта:
- Просто основываясь на коде выхода
- Установите, чтобы игнорировать ошибку и обрабатывать значение
Поскольку счетчика должно хватить, здесь показан вариант 2:
- hosts: localhost
tasks:
- name: get value
shell:
cmd: grep -c root /etc/passwd
register: grep_output
ignore_errors: yes
changed_when: false
- name: Print
debug:
msg: "{{ inventory_hostname }}: '{{ grep_output.stdout }}'"
- name : Set the variable
set_fact:
oracle_version_12_1_0: "{% if grep_output.stdout == '0' %}false{% else %}true{% endif %}"
- name: Print
debug:
msg: "val: {{ oracle_version_12_1_0 }}
Отрегулируйте root
до rootNo
(например), чтобы увидеть разницу между истинным / ложным.
Кроме того, в зависимости от того, что именно вы хотите сделать, также можно зарегистрировать переменную, как указано в get value
, а затем использовать ее в проверке when (т. Е. Избегать установки переменной):
- name : task name
...
when: grep_output.stdout != '0'
Будет ли этот последний подход полезным или нет, зависит от общего варианта использования.