anasbouzid.systemd

Ansibleロール: systemd

このロールは、すべてのsystemdユニットファイルを管理するためのシンプルで柔軟な方法を提供します。

機能

  • すべてのsystemd ユニットファイルを作成します。
  • テンプレートユニットを作成します。
  • すべてのユニットディレクティブを設定します。
  • 各ユニットを有効/無効にします。
  • 変更があった際にユニットを再起動します。

要件

  • Ansible 2.8以上。

ロール変数

利用可能な変数は次のとおりで、デフォルト値も示しています(defaults/main.ymlを参照):

systemd_units: []

辞書のリスト。各ユニットについて、nameを指定する必要があり、その他のキーはシンタックスの見出しにて確認できます。

systemd_units_restart_changed: yes

ファイル変更時にユニットを再起動するかどうか。各ユニットに対してrestart_changedパラメータを指定することもできます。テンプレートユニットは常にスキップされます。

systemd_units_enabled: yes

起動時にユニットを有効にするかどうか。各ユニットに対してenabledパラメータを指定することもできます。テンプレートユニットは常にスキップされます。

シンタックス

systemd_unitは、systemdモジュールのすべてのパラメータを持っており、_sectionで終わる複数のキーを持つことができます。必要なだけセクションを指定できます。各セクションは設定ディレクティブの辞書です。セクションが提供されない場合、空のファイルが作成されます。これはユニットを完全に無効にするのに効果的な方法です。

- name: foo.service
  scope: user
  # 他のsystemdモジュールパラメータ...
  Unit_section:
    Description: Foo
  Service_section:
    ExecStart: /usr/sbin/foo-daemon
  Install_section:
    WantedBy: multi-user.target

上記のユニットは、次の内容でfoo.serviceファイルを作成します。

[Unit]
Description=Foo

[Service]
ExecStart=/usr/sbin/foo-daemon

[Install]
WantedBy=multi-user.target

ディレクティブキーはstringlist、またはdictionaryであり、各キータイプは次のように変換されます。

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"

snake_caseキーをPascalCaseに変換

systemd_convert_snake_case_keys: yes

この変数を使うことで、すべてのディレクティブをsnake_caseで記述できます。これを有効にすると、このロールはすべてのsnake_caseディレクティブをPascalCaseに変換します。例えば、exec_start: "/usr/bin/foo-daemon"ExecStart=/usr/bin/foo-daemonに変換されます。この機能が不要な場合は、無効にできます。

systemd_readable_snake_case_keys: # defaults/main.ymlを参照

このロールは、読みやすいsnake_caseディレクティブの辞書を維持します。実際、一部のディレクティブは省略形であり、CPUSharesをsnake_caseで書くにはc_p_u_sharesと記述する必要があります。この変数のおかげでcpu_sharesと書くことが可能です。

依存関係

なし。

サンプルプレイブック

これは、サービスユニット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] }

これは、3つのサービステンプレートをインスタンス化するターゲットユニットsleep.targetを作成して起動するためのサンプルsystemd_units変数です。

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

同じ変数は、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

コードを整理するために、ユニットをカテゴリに分けることができます。

systemd_services: []
systemd_targets: []
systemd_sockets: []
systemd_units: "{{ systemd_services + systemd_targets + systemd_sockets }}"

または、機能別にグループ化することもできます。

systemd_nginx_units: []
systemd_queue_units: []
systemd_php_units: []
systemd_units: "{{ systemd_nginx_units + systemd_queue_units + systemd_php_units }}"

ライセンス

MIT

プロジェクトについて

Ansible role to manage systemd units

インストール
ansible-galaxy install anasbouzid.systemd
ライセンス
mit
ダウンロード
2.6k
所有者