anasbouzid.systemd
Rol de Ansible: systemd
Esta rol proporciona una manera simple pero flexible de gestionar todos los archivos de unidad de systemd.
Características
- Crear todos los archivos de unidad de systemd.
- Crear unidades de plantilla.
- Establecer todas las directivas de unidad.
- Habilitar/Deshabilitar cada unidad.
- Reiniciar unidades al realizar cambios.
Requisitos
- Ansible 2.8 o superior.
Variables de Rol
Las variables disponibles están listadas a continuación, junto con los valores predeterminados (ver defaults/main.yml
):
systemd_units: []
Una lista de diccionarios. Para cada unidad, debes proporcionar un nombre
, todas las demás claves están listadas en el encabezado de sintaxis a continuación.
systemd_units_restart_changed: yes
Si se debe reiniciar la unidad al cambiar el archivo. También puedes especificar el parámetro restart_changed
para cada unidad. Las unidades de plantilla siempre se omitirán.
systemd_units_enabled: yes
Si se deben habilitar las unidades al iniciar. También puedes especificar el parámetro enabled
para cada unidad. Las unidades de plantilla siempre se omitirán.
Sintaxis
Una systemd_unit
tiene todos los parámetros del módulo systemd más múltiples claves que terminan en _section
, puedes especificar tantas secciones como desees. Cada sección es un diccionario de directivas de configuración. Si no se proporciona ninguna sección, se creará un archivo vacío. Usa esto como una manera efectiva de deshabilitar completamente una unidad.
- name: foo.service
scope: user
# otros parámetros del módulo systemd...
Unit_section:
Description: Foo
Service_section:
ExecStart: /usr/sbin/foo-daemon
Install_section:
WantedBy: multi-user.target
La unidad anterior creará un archivo foo.service
con el siguiente contenido:
[Unit]
Description=Foo
[Service]
ExecStart=/usr/sbin/foo-daemon
[Install]
WantedBy=multi-user.target
Una clave de directiva puede ser una cadena
, una lista
o un diccionario
, cada tipo de clave se convertirá de la siguiente manera:
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
Wants=foo@1.service
Wants=foo@2.service
Environment="VAR1=word1 word2"
Environment="VAR2=word3"
Environment="VAR3=$word 5 6"
Convierte claves en snake_case a PascalCase
systemd_convert_snake_case_keys: yes
Esta variable te permite escribir todas las directivas en snake_case
. Cuando está habilitada, esta rol convertirá todas las directivas snake_case
a PascalCase
, por ejemplo, exec_start: "/usr/bin/foo-daemon"
se convertirá en ExecStart=/usr/bin/foo-daemon
. Si no te gusta esta función, puedes desactivarla.
systemd_readable_snake_case_keys: # ver defaults/main.yml
Este rol mantiene un diccionario de directivas legibles en snake_case
. De hecho, algunas directivas están abreviadas; para escribir CPUShares
en snake case, debes escribir c_p_u_shares
. Gracias a esta variable, puedes escribir cpu_shares
.
Dependencias
Ninguna.
Ejemplo de Playbook
Este es un archivo de playbook de muestra para crear e iniciar una unidad de servicio 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] }
Este es un ejemplo de variable systemd_units
para crear e iniciar una unidad de objetivo sleep.target
que instancie 3 plantillas de servicio.
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
La misma variable se puede escribir en 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
Para organizar tu código, puedes dividir las unidades en categorías.
systemd_services: []
systemd_targets: []
systemd_sockets: []
systemd_units: "{{ systemd_services + systemd_targets + systemd_sockets }}"
O puedes agruparlas por funcionalidad.
systemd_nginx_units: []
systemd_queue_units: []
systemd_php_units: []
systemd_units: "{{ systemd_nginx_units + systemd_queue_units + systemd_php_units }}"
Licencia
MIT
Ansible role to manage systemd units
ansible-galaxy install anasbouzid.systemd