anasbouzid.systemd
Rola Ansible: systemd
Ta rola zapewnia prosty, ale elastyczny sposób zarządzania wszystkimi plikami jednostek systemd.
Funkcje
- Tworzenie wszystkich plików jednostek systemd.
- Tworzenie jednostek szablonowych.
- Ustawianie wszystkich dyrektyw jednostek.
- Włączanie/Wyłączanie każdej jednostki.
- Restart jednostek po zmianie.
Wymagania
- Ansible 2.8 lub wyższy.
Zmienne roli
Dostępne zmienne są wymienione poniżej, wraz z wartościami domyślnymi (zobacz defaults/main.yml
):
systemd_units: []
Lista słowników. Dla każdej jednostki musisz podać name
, wszystkie inne klucze są wymienione w sekcji składni poniżej.
systemd_units_restart_changed: yes
Czy zrestartować jednostkę po zmianie pliku. Możesz także określić parametr restart_changed
dla każdej jednostki. Jednostki szablonowe zawsze będą pomijane.
systemd_units_enabled: yes
Czy włączyć jednostki przy uruchamianiu. Możesz również określić parametr enabled
dla każdej jednostki. Jednostki szablonowe zawsze będą pomijane.
Składnia
Jednostka systemd_unit
ma wszystkie parametry modułu systemd oraz wiele kluczy kończących się na _section
, możesz określić tyle sekcji, ile chcesz. Każda sekcja to słownik dyrektyw konfiguracyjnych. Jeśli nie podano sekcji, zostanie utworzony pusty plik. Użyj tego jako skutecznego sposobu na całkowite wyłączenie jednostki.
- name: foo.service
scope: user
# inne parametry modułu systemd...
Unit_section:
Description: Foo
Service_section:
ExecStart: /usr/sbin/foo-daemon
Install_section:
WantedBy: multi-user.target
Powyższa jednostka utworzy plik foo.service
z następującą zawartością:
[Unit]
Description=Foo
[Service]
ExecStart=/usr/sbin/foo-daemon
[Install]
WantedBy=multi-user.target
Klucz dyrektywy może być string
, list
lub dictionary
, każdy typ klucza zostanie przekonwertowany w następujący sposób:
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"
Konwertuj klucze snake_case na PascalCase
systemd_convert_snake_case_keys: yes
Ta zmienna pozwala na zapisanie wszystkich dyrektyw w snake_case
. Po włączeniu, ta rola przekonwertuje wszystkie dyrektywy snake_case
na PascalCase
, np. exec_start: "/usr/bin/foo-daemon"
zostanie przekonwertowane na ExecStart=/usr/bin/foo-daemon
. Jeśli nie podoba Ci się ta funkcja, możesz ją wyłączyć.
systemd_readable_snake_case_keys: # zobacz defaults/main.yml
Ta rola utrzymuje słownik czytelnych dyrektyw snake_case
. W rzeczywistości, niektóre dyrektywy są skrócone, aby napisać CPUShares
w formacie snake_case, musisz napisać c_p_u_shares
. Dzięki tej zmiennej, możesz napisać cpu_shares
.
Zależności
Brak.
Przykładowy playbook
To przykładowy plik playbook do tworzenia i uruchamiania jednostki serwisowej 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] }
To przykładowa zmienna systemd_units
do tworzenia i uruchamiania jednostki docelowej sleep.target
, która instancjonuje 3 szablony serwisowe.
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
Ta sama zmienna może być zapisana w 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
Aby zorganizować swój kod, możesz podzielić jednostki na kategorie.
systemd_services: []
systemd_targets: []
systemd_sockets: []
systemd_units: "{{ systemd_services + systemd_targets + systemd_sockets }}"
Lub możesz je grupować według funkcjonalności.
systemd_nginx_units: []
systemd_queue_units: []
systemd_php_units: []
systemd_units: "{{ systemd_nginx_units + systemd_queue_units + systemd_php_units }}"
Licencja
MIT