Я пытаюсь запустить оператор if else внутри модуля оболочки в доступном playbook, но похоже, что мой оператор else не выполняется в любом случае.
- name: verify application/database processes are not running
shell: if ps -eaf | egrep 'apache|http'|grep -v grep > /dev/null echo 'process_running';else echo 'process_not_running';fi
ignore_errors: false
register: app_process_check
Пожалуйста, поправьте меня здесь .
Исправьте оператор if-then-else . Ключевое слово , затем отсутствует. Я добавил ps параметр -x , чтобы включить « процессы, у которых нет управляющего терминала » (которых обычно нет на веб-серверах). Приведенный ниже сценарий работает должным образом
#!/bin/sh
if ps -axef | egrep 'apache|http' | grep -v grep > /dev/null; then
echo 'process_running'
else
echo 'process_not_running'
fi
Затем используйте сценарий в Ansible. Вы можете использовать Литеральный блочный скаляр , чтобы улучшить читаемость кода. Например,
- name: verify application/database processes are not running
shell: |
if ps -axef | egrep 'apache|http' | grep -v grep > /dev/null; then
echo 'process_running'
else
echo 'process_not_running'
fi
ignore_errors: false
register: app_process_check
- debug:
var: app_process_check.stdout
дает, если Apache работает
app_process_check.stdout: process_running
, иначе
app_process_check.stdout: process_not_running
Вместо использования команды: / shell: рассмотрите модуль ansible.builtin.service_facts:. страница ansible.docs для service_facts
С этой страницы:
- name: Populate service facts
service_facts:
- debug:
var: ansible_facts.services
Оттуда вы можете получить доступ к различным фактам о настроенных службах.
ansible_facts.services ['httpd']
или ansible_facts. services ['apache']
Если вы хотите только убедиться, что служба запущена, вам не нужно проверять ее самостоятельно, Ansible может сделайте это за вас.
- name: ensure apache is started
service:
name: apache2
state: started
Ansible запустит его, если он не запущен, и ничего не будет делать, если он уже запущен.
Если вам нужно проверить это по другой причине, вы можете выполнить проверку в доступе вместо оболочки :
- name: check if apache is running
shell: ps -eaf
register: running_processes
changed_when: >
('apache' in running_processes.stdout) or
('httpd' in running_processes.stdout)
Впоследствии вы можете использовать это с running_processes.changed
(или переместить саму проверку в следующую задачу).