Модуль service в Ansible обеспечивает простой способ управления системными службами в различных средах.
Он взаимодействует с инструментами управления сервисами, доступными в целевой системе.
Эти инструменты обычно различны, например, системы инициализации Linux/Unix, такие как systemd, BSD init, launchd в macOS, Solaris SMF и upstart.
Однако этот модуль абстрагирует различия между различными инструментами управления сервисами, обеспечивая тем самым единый способ управления сервисами.
📜 Ansible Security: Обеспечение безопасности инфраструктуры с помощью Ansible
Параметры модуля service
сервиса имеет несколько различных параметров, наиболее распространенными из которых являются:
- name: имя службы
- enabled: определяется, должна ли служба запускаться при загрузке машины
- pattern: если команда status не работает, этот параметр позволяет определить, работает служба или нет
- sleep: во время действия restarted определяет темп между остановкой и запуском
- state: действие над службой: запущена, остановлена, перезапущена или перезагружена (в случае изменения конфигурационного файла)
Варианты использования модуля
Модуль Service можно использовать для запуска, остановки, перезапуска или перезагрузки служб по мере необходимости, помогая автоматизировать и стандартизировать управление вашей инфраструктурой.
Ниже приведен простой плейбук для запуска nginx:
---
- name: Manage Nginx service
hosts: webservers
tasks:
- name: Ensure Nginx is running and enabled at boot
ansible.builtin.service:
name: nginx
state: started
enabled: yes
Аналогичным образом, изменяя параметр state, можно останавливать и перезапускать службы.
Однако использование модуля не ограничивается запуском и остановкой сервисов.
Ниже приведен пример плейбука для установки и настройки nginx (упрощенный вариант):
---
- name: manage services
hosts: all
become: true
tasks:
- name: Installing nginx
package:
- name:
- nginx
- name: nginx configuration
template:
src:nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner:root
group:root
mode: 0644
- name: Reloading the conf
service:
name: nginx
state: reloaded
- name: Verification nginx is started
service:
name: nginx
state:started
enabled: true
Это простой пример использования модуля, но у него есть некоторые ограничения.
Одно из них заключается в том, что наш плейбук всегда будет перезапускать службу nginx, даже если конфигурация не менялась.
Один из способов избежать этого – использовать обработчики.
Использование обработчиков для работы с сервисом
Обработчики позволяют запустить действие, если задача внесла изменения в систему (статус изменился).
Ansible позволяет запускать события после того, как задача прошла статус обработчика.
Кроме того, хотя несколько задач могут требовать одного и того же действия, оно будет запущено только после выполнения всех блоков задачи.
Таким образом, наш плейбук приобретает следующий вид:
---
- name: manage services
hosts: all
become: true
tasks:
- name: nginx configuration
template:
src:nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner:root
group:root
mode: 0644
notify:
- reload nginx
- name: Verification nginx is started
service:
name: nginx
state:started
enabled: true
handlers:
- name: reload nginx
service:
name: nginx
state: reloaded
Как и в случае с модулем пакетов, существуют модули, специфичные для каждого типа системы инициализации, которые имеют больше возможностей: systemd и sysvinit.
Получение информации о сервисе: service_facts
Ansible предоставляет модуль service_facts, позволяющий получить множество информации о сервисе.
Этот модуль не принимает никаких параметров.
С другой стороны, он требует, чтобы функция gather_facts не была отключена.
Например, я хочу открывать порты 80 и 443 только в том случае, если активна служба брандмауэра.
Наш плейбук приобретает следующий вид:
---
- name: manage services
hosts: all
become: true
tasks:
- name: nginx configuration
template:
src:nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner:root
group:root
mode: 0644
notify:
- reload nginx
- name: Gets information about a service
service_facts:
- name:debug
debug:
var: ansible_facts.services["firewalld.service"]
handlers:
- name: reload nginx
service:
name: nginx
state: reloaded
Сервисы добавляются в переменную ansible_facts и содержит список всех служб, установленных на машине.
Поэтому, если вы хотите получить доступ к службе firewalld, вам нужно указать ansible_facts.services[«firewalld.service»].
TASK [debug] *********************************************************************************************
ok: [host1] => {
"firewalld.service":
{ "name": "firewalld.service",
"source": "systemd",
"state": "running",
"status": "enabled"
}
}
Например, я могу добавить задачу, которая запускается только в том случае, если служба firewalld находится в включенном состоянии:
---
- name: manage services
hosts: all
become: true
tasks:
- name: nginx configuration
template:
src:nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner:root
group:root
mode: 0644
notify:
- reload nginx
- name: Gets information about a service
service_facts:
- name: authorizes the https flow
ansible.posix.firewalld:
service: https
permanent: yes
state:enabled
when: ansible_facts.services["firewalld.service"].status == "enabled"
handlers:
- name: reload nginx
service:
name: nginx
state: reloaded
Заключение
Модуль service в Ansible – это мощный инструмент для управления системными сервисами.
При использовании с другими модулями он обеспечивает высокий уровень контроля и автоматизации, гарантируя согласованность в различных средах.
Если вы новичок в Ansible и хотите изучить его с нуля, наша серия учебников по Ansible будет вам очень полезна.
Она написана для экзамена RHCE, но поможет вам независимо от того, готовитесь вы к нему или нет.
см. также:
- 📜 Развертывание сервера Graylog с помощью Ansible на Ubuntu/Debian/CentOS
- 🔐 Ansible SSH аутентификация и повышение привилегий
- 📜 Как использовать Ansible Lint для сканирования плейбуков
- 🔐 Создание самоподписанных сертификатов OpenSSL с помощью Ansible
- 📜 Управление пользователями и группами в Linux с помощью Ansible
- 🐧 Как временно остановить демон Auditd с Ansible
- 📜 Как создать зашифрованный пароль пользователя Linux для Ansible