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
ディレクティブキーはstring
、list
、または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