サービスsystemd
へ登録するためのsystemd-serviceというAnsible
ロールを書いたので公開します。Ubuntu Wily
用に書いてますがsystemd_service_root_dir
を設定すればRedHat
にも対応できるはず。
インストール
ansible-galaxy
で以下のようにします。
$ ansible-galaxy install tumf.systemd-service
プレイブック
プレイブックに以下の例ように書いてロールを実行します。
- hosts: servers
roles:
- role: systemd-service
systemd_service_name: "swarm-manager"
systemd_service_envs:
- "DOCKER_HOST=tcp://127.0.0.1:2375"
systemd_service_Unit_Description: Docker Swarm Manager
systemd_service_Unit_Requires: docker.service
systemd_service_Unit_After: docker.service
systemd_service_Service_ExecStartPre:
- -/usr/bin/docker stop swarm-manager
- -/usr/bin/docker rm swarm-manager
- /usr/bin/docker pull swarm
systemd_service_Service_ExecStart: /usr/bin/docker run -p 2377:2375 --name swarm-manage
パラメータ
パラメータ名 | 型 | デフォルト | 説明 |
---|---|---|---|
systemd_service_root_dir | String | "" | デプロイ先のルートパス(注1) |
systemd_service_default_dir | String | "/etc/default" | 環境変数用パス |
systemd_service_systemd_dir | String | "/etc/systemd/system" | systemdのパス |
systemd_service_name★ | String | サービス名 | |
systemd_service_envs | Array | [] | 環境変数 (/etc/default/:name) |
systemd_service_Unit_Description | String | [Unit]のDescription | |
systemd_service_Unit_Requires | String | [Unit]のRequires | |
systemd_service_Unit_After | String | [Unit]のAfter | |
systemd_service_Service_Type | String | "simple" | [Service]のType |
systemd_service_Service_ExecStartPre | Array | [Service]のExecStartPre | |
systemd_service_Service_ExecStart★ | String | [Service]のExecStart | |
systemd_service_Service_ExecStartPost | Array | [Service]のExecStartPost | |
systemd_service_Install_WantedBy | String | "multi-user.target" | [Install]のWantedBy |
★必須
注1
systemd_service_root_dir
によりデプロイ先を替えることによりユニットテストしやすくしています。
パラメータ自分が使う分しか用意していないので、適宜追加します。プルリクエストお待ちしております。
テスト(開発者向け)
以下のコマンドでローカルで単体テストを実行します。
./tests/run