anasbouzid.systemd
Ansible Rolle: systemd
Diese Rolle bietet eine einfache und flexible Möglichkeit, alle systemd-Einheitendateien zu verwalten.
Funktionen
- Erstellen aller systemd Einheitendateien.
- Erstellen von Vorlageneinheiten.
- Alle Einheitendirektiven festlegen.
- Jede Einheit aktivieren/deaktivieren.
- Einheiten bei Änderungen neu starten.
Anforderungen
- Ansible 2.8 oder höher.
Rollenvariablen
Verfügbare Variablen sind unten aufgeführt, zusammen mit Standardwerten (siehe defaults/main.yml
):
systemd_units: []
Eine Liste von Dictionaries. Für jede Einheit müssen Sie einen Namen
angeben, alle anderen Schlüssel sind im Syntaxabschnitt unten aufgeführt.
systemd_units_restart_changed: ja
Ob die Einheit bei Dateiänderungen neu gestartet werden soll. Sie können auch den Parameter restart_changed
für jede Einheit angeben. Vorlageneinheiten werden immer übersprungen.
systemd_units_enabled: ja
Ob Einheiten beim Booten aktiviert werden sollen. Sie können auch den Parameter enabled
für jede Einheit angeben. Vorlageneinheiten werden immer übersprungen.
Syntax
Eine systemd_unit
hat alle Parameter des systemd-Moduls plus mehrere Schlüssel, die mit _section
enden. Sie können so viele Abschnitte angeben, wie Sie möchten. Jeder Abschnitt ist ein Dictionary von Konfigurationsdirektiven. Wenn kein Abschnitt bereitgestellt wird, wird eine leere Datei erstellt. Dies ist eine effektive Möglichkeit, eine Einheit vollständig zu deaktivieren.
- name: foo.service
scope: user
# andere Systemd-Modulparameter...
Unit_section:
Description: Foo
Service_section:
ExecStart: /usr/sbin/foo-daemon
Install_section:
WantedBy: multi-user.target
Die obige Einheit erstellt eine foo.service
-Datei mit folgendem Inhalt:
[Unit]
Description=Foo
[Service]
ExecStart=/usr/sbin/foo-daemon
[Install]
WantedBy=multi-user.target
Ein direktiver Schlüssel kann eine Zeichenkette
, eine Liste
oder ein Dictionary
sein, jeder Schlüsseltyp wird wie folgt konvertiert:
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"
Wandle snake_case-Schlüssel in PascalCase um
systemd_convert_snake_case_keys: ja
Diese Variable ermöglicht es Ihnen, alle Direktiven in snake_case
zu schreiben. Wenn aktiviert, wird diese Rolle alle snake_case
-Direktiven in PascalCase
umwandeln, z.B. wird exec_start: "/usr/bin/foo-daemon"
in ExecStart=/usr/bin/foo-daemon
umgewandelt. Wenn Ihnen diese Funktion nicht gefällt, können Sie sie deaktivieren.
systemd_readable_snake_case_keys: # siehe defaults/main.yml
Diese Rolle verwaltet ein Dictionary von lesbaren snake_case
-Direktiven. Tatsächlich sind einige Direktiven abgekürzt, um CPUShares
im snake case zu schreiben, müssen Sie c_p_u_shares
schreiben. Dank dieser Variable können Sie cpu_shares
schreiben.
Abhängigkeiten
Keine.
Beispiel Playbook
Dies ist eine Beispiel-Playbook-Datei zum Erstellen und Starten einer Diensteinheit 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] }
Dies ist eine Beispiel-Variable systemd_units
zum Erstellen und Starten einer Zieleinheit sleep.target
, die 3 Dienstvorlagen instanziiert.
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
Die gleiche Variable kann in snake_case
geschrieben werden.
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
Um Ihren Code zu organisieren, können Sie Einheiten in Kategorien aufteilen.
systemd_services: []
systemd_targets: []
systemd_sockets: []
systemd_units: "{{ systemd_services + systemd_targets + systemd_sockets }}"
Oder Sie können sie nach Funktionalität gruppieren.
systemd_nginx_units: []
systemd_queue_units: []
systemd_php_units: []
systemd_units: "{{ systemd_nginx_units + systemd_queue_units + systemd_php_units }}"
Lizenz
MIT