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

O projekcie

Ansible role to manage systemd units

Zainstaluj
ansible-galaxy install anasbouzid.systemd
Licencja
mit
Pobrania
2.6k
Właściciel