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-galaxy install anasbouzid/ansible-role-systemd