anasbouzid.systemd

Rôle Ansible : systemd

Ce rôle offre un moyen simple mais flexible de gérer tous les fichiers d'unités systemd.

Caractéristiques

  • Créer tous les fichiers d'unités systemd.
  • Créer des unités modèles.
  • Définir toutes les directives d'unités.
  • Activer/Désactiver chaque unité.
  • Redémarrer les unités en cas de changement.

Exigences

  • Ansible 2.8 ou version supérieure.

Variables du Rôle

Les variables disponibles sont listées ci-dessous, avec des valeurs par défaut (voir defaults/main.yml) :

systemd_units: []

Une liste de dictionnaires. Pour chaque unité, vous devez fournir un nom, toutes les autres clés sont listées dans la section de syntaxe ci-dessous.

systemd_units_restart_changed: yes

Indique si l'unité doit être redémarrée en cas de changement de fichier. Vous pouvez également spécifier le paramètre restart_changed pour chaque unité. Les unités modèles seront toujours ignorées.

systemd_units_enabled: yes

Indique si les unités doivent être activées au démarrage. Vous pouvez également spécifier le paramètre enabled pour chaque unité. Les unités modèles seront toujours ignorées.

Syntaxe

Une systemd_unit a tous les paramètres du module systemd ainsi que plusieurs clés se terminant par _section, vous pouvez spécifier autant de sections que vous le souhaitez. Chaque section est un dictionnaire de directives de configuration. Si aucune section n'est fournie, un fichier vide sera créé. Utilisez ceci comme une méthode efficace pour désactiver complètement une unité.

- name: foo.service
  scope: user
  # autres paramètres du module systemd...
  Unit_section:
    Description: Foo
  Service_section:
    ExecStart: /usr/sbin/foo-daemon
  Install_section:
    WantedBy: multi-user.target

L'unité ci-dessus créera un fichier foo.service avec le contenu suivant :

[Unit]
Description=Foo

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

[Install]
WantedBy=multi-user.target

Une clé de directive peut être une chaîne, une liste ou un dictionnaire, chaque type de clé sera converti comme suit :

ExecStart: "/usr/bin/foo-daemon"
Wants:
  - [email protected]
  - [email protected]
Environment:
  VAR1: mot1 mot2
  VAR2: mot3
  VAR3: $mot 5 6
ExecStart=/usr/bin/foo-daemon
Wants=foo@1.service
Wants=foo@2.service
Environment="VAR1=mot1 mot2"
Environment="VAR2=mot3"
Environment="VAR3=$mot 5 6"

Convertir les clés en snake_case en PascalCase

systemd_convert_snake_case_keys: yes

Cette variable vous permet d'écrire toutes les directives en snake_case. Lorsque cette option est activée, ce rôle convertira toutes les directives snake_case en PascalCase, par exemple exec_start: "/usr/bin/foo-daemon" sera converti en ExecStart=/usr/bin/foo-daemon. Si vous ne souhaitez pas cette fonctionnalité, vous pouvez la désactiver.

systemd_readable_snake_case_keys: # voir defaults/main.yml

Ce rôle maintient un dictionnaire de directives snake_case lisibles. En effet, certaines directives sont abrégées. Pour écrire CPUShares en snake case, vous devez écrire c_p_u_shares. Grâce à cette variable, vous pouvez écrire cpu_shares.

Dépendances

Aucune.

Exemple de Playbook

Voici un exemple de fichier playbook pour créer et démarrer une unité de service 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] }

Voici un exemple de variable systemd_units pour créer et démarrer une unité cible sleep.target qui instancie 3 modèles de service.

systemd_units:
  - name: [email protected]
    Unit_section:
      Description: Dormir pendant %i secondes
      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 même variable peut être écrite en snake_case.

systemd_units:
  - name: [email protected]
    unit_section:
      description: Dormir pendant %i secondes
      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

Pour organiser votre code, vous pouvez diviser les unités en catégories.

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

Ou vous pouvez les regrouper par fonctionnalité.

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

Licence

MIT

À propos du projet

Ansible role to manage systemd units

Installer
ansible-galaxy install anasbouzid.systemd
Licence
mit
Téléchargements
2.6k
Propriétaire