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

Acerca del proyecto

Ansible role to manage systemd units

Instalar
ansible-galaxy install anasbouzid.systemd
Licencia
mit
Descargas
2.6k
Propietario