systemd

Ansible Роль: systemd

Эта роль предоставляет простой, но гибкий способ управления всеми файлами юнитов systemd.

Особенности

  • Создание всех юнитов systemd.
  • Создание шаблонных юнитов.
  • Установка всех директив юнитов.
  • Включение/Отключение каждого юнита.
  • Перезагрузка юнитов при изменении.

Требования

  • Ansible 2.8 или выше.

Переменные роли

Доступные переменные перечислены ниже, с значениями по умолчанию (см. defaults/main.yml):

systemd_units: []

Список словарей. Для каждого юнита необходимо указать name, все остальные ключи перечислены в разделе синтаксиса ниже.

systemd_units_restart_changed: yes

Перезагружать ли юнит при изменении файла. Также можно указать параметр restart_changed для каждого юнита. Шаблонные юниты всегда будут пропущены.

systemd_units_enabled: yes

Включать ли юниты при загрузке. Также можно указать параметр enabled для каждого юнита. Шаблонные юниты всегда будут пропущены.

Синтаксис

systemd_unit имеет все параметры модуля systemd и несколько ключей, заканчивающихся на _section, вы можете указать столько разделов, сколько хотите. Каждый раздел является словарем директив конфигурации. Если раздел не указан, будет создан пустой файл. Используйте это как эффективный способ полностью отключить юнит.

- name: foo.service
  scope: user
  # другие параметры модуля systemd...
  Unit_section:
    Description: Foo
  Service_section:
    ExecStart: /usr/sbin/foo-daemon
  Install_section:
    WantedBy: multi-user.target

Юнит выше создаст файл foo.service со следующим содержанием:

[Unit]
Description=Foo

[Service]
ExecStart=/usr/sbin/foo-daemon

[Install]
WantedBy=multi-user.target

Ключ директивы может быть строкой, списком или словарем, каждый тип ключа будет преобразован следующим образом:

ExecStart: "/usr/bin/foo-daemon"
Wants:
  - [email protected]
  - [email protected]
Environment:
  VAR1: word1 word2
  VAR2: word3
  VAR3: $word 5 6
ExecStart=/usr/bin/foo-daemon
[email protected]
[email protected]
Environment="VAR1=word1 word2"
Environment="VAR2=word3"
Environment="VAR3=$word 5 6"

Преобразование ключей snake_case в PascalCase

systemd_convert_snake_case_keys: yes

Эта переменная позволяет вам писать все директивы в snake_case. При включении эта роль преобразует все директивы snake_case в PascalCase, например, exec_start: "/usr/bin/foo-daemon" будет преобразовано в ExecStart=/usr/bin/foo-daemon. Если вам не нравится эта функция, вы можете ее отключить.

systemd_readable_snake_case_keys: # см. defaults/main.yml

Эта роль поддерживает словарь читаемых директив snake_case. На самом деле, некоторые директивы сокращены, чтобы написать CPUShares в snake case, вам нужно написать c_p_u_shares. Благодаря этой переменной вы можете писать cpu_shares.

Зависимости

Нет.

Пример плейбука

Это пример файла плейбука для создания и запуска юнита службы sleep.service.

- hosts: all
  become: true
  vars:
    systemd_units:
      - name: sleep.service
        Service_section:
          ExecStart: /bin/sleep 300
        Install_section:
          WantedBy: multi-user.target
  roles:
    - { role: anasbouzid.systemd, tags: [systemd] }

Это пример переменной systemd_units для создания и запуска юнита цели sleep.target, который создает 3 шаблона службы.

systemd_units:
  - name: [email protected]
    Unit_section:
      Description: Sleep for %i seconds
      PartOf: sleep.target
    Service_section:
      Restart: always
      ExecStart: /bin/sleep %i
    Install_section:
      WantedBy: multi-user.target
  - name: sleep.target
    Unit_section:
      Wants:
        - [email protected]
        - [email protected]
        - [email protected]
    Install_section:
      WantedBy: multi-user.target

Та же переменная может быть написана в snake_case.

systemd_units:
  - name: [email protected]
    unit_section:
      description: Sleep for %i seconds
      part_of: sleep.target
    service_section:
      restart: always
      exec_start: /bin/sleep %i
    install_section:
      wanted_by: multi-user.target
  - name: sleep.target
    unit_section:
      wants:
        - [email protected]
        - [email protected]
        - [email protected]
    install_section:
      wanted_by: multi-user.target

Чтобы организовать ваш код, вы можете разбить юниты на категории.

systemd_services: []
systemd_targets: []
systemd_sockets: []
systemd_units: "{{ systemd_services + systemd_targets + systemd_sockets }}"

Или вы можете группировать их по функциональности.

systemd_nginx_units: []
systemd_queue_units: []
systemd_php_units: []
systemd_units: "{{ systemd_nginx_units + systemd_queue_units + systemd_php_units }}"

Лицензия

MIT

О проекте

Ansible role to manage systemd units

Установить
ansible-galaxy install anasbouzid/ansible-role-systemd
Лицензия
mit
Загрузки
2322
Владелец