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
