#ansible #ansible-2.x #ansible-facts
#ansible #ansible-2.x #ansible-факты
Вопрос:
Необходимо проверить статус единой службы в нескольких системах с помощью Ansible playbook, есть ли способ сделать это с использованием сервисных модулей, а не модуля оболочки?
Ответ №1:
С помощью service
модуля (и связанных с ним более специфических модулей, таких как systemd
) вы можете убедиться, что служба находится в желаемом состоянии.
Например, следующая задача позволит запустить apache при загрузке, если он еще не настроен, запустить apache, если он остановлен, и сообщить об изменении, если было внесено какое-либо изменение, или ok, если никаких изменений не требовалось.
- name: Enable and start apache
service:
name: apache
enabled: yes
state: started
Простая проверка статуса службы без каких-либо изменений не поддерживается этими модулями. Вам придется использовать командную строку и проанализировать статус вывода / возврата.
пример с systemd
- name: Check status of my service
command: systemctl -q is-active my_service
check_mode: no
failed_when: false
changed_when: false
register: my_service_status
- name: Report status of my service
debug:
msg: "my_service is {{ (my_service_status.rc == 0) | ternary('Up', 'Down') }}"
Следует отметить:
check_mode: no
запустите задачу независимо от того, используете вы ‘—check’ в командной строке ansible_playbook или нет. Без этого в режиме проверки следующая задача завершится неудачей с неопределенной переменной.failed_when: false
предотвращает сбой задачи, когда код возврата отличается от 0 (когда служба не запущена). Вы можете быть более конкретными, перечислив все возможные коды возврата в обычных условиях и выполнив сбой при получении другого (напримерfailed_when: not (my_service_status in [0, 3, X])
)changed_when: false
позволяет задаче всегда сообщать о порядке, за исключениемchanged
по умолчанию для команд и модуля оболочки.