🐧 Управление службами с помощью модуля Ansible Service |

🐧 Управление службами с помощью модуля Ansible Service

Мануал

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

см. также:

 

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий