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