Ansible

使用 ansible 模板創建實例服務文件

  • December 21, 2017

我一直在使用 ansible 安裝和配置多個服務,但這是我第一次嘗試設置可以同時執行多個實例的服務。我正在使用服務文件的模板,如下所示:

[Unit]
Description=My Service
[Service]
WorkingDirectory=/var/lib/service/api
ExecStart=/usr/bin/python -O /var/lib/service/api/main.py -f /var/lib/service/api/cfg/service_api.cfg -p {{ port }}
Type=simple

然後我安裝和配置此服務的角色包含如下任務:

- name: Configure api.service
 template: src=api.service.j2 dest=/etc/systemd/system/api@{{port}}.service

- name: Start service
 systemd: name=api@{{port}} state=restarted enabled=yes

現在這適用於 port = 80 之類的東西,但我認為我做得不夠通用。我不完全了解如何創建這些實例服務。如何修改服務文件和角色,使每個監聽埠都有自己的服務文件?我應該使用“Wants”關鍵字還是“WantedBy=multi-user.target”之類的關鍵字?

將您的本地文件重命名為**api@.service**(not api.service.j2) — 我們將使用 systemd 模板而不是 ansible 的 Jinja2 模板。然後像下面這樣改變它:

[Unit]
Description=My Service on port %i
[Service]
...
ExecStart=... -p %i
...
[Install]
WantedBy=multi-user.target

然後你應該可以將它與 ansible 一起使用,如下所示:

- name: Deploy api@.service
 copy: src=api@.service dest=/etc/systemd/system/

- name: Start service
 systemd: name=api@{{item}} state=restarted enabled=yes
 with_items:
   - 80

(雖然我不確定在這裡使用systemdservice模組是否更好;我仍然是 ansible 的新手。)

另請參閱:https ://serverfault.com/a/730339/74509

引用自:https://serverfault.com/questions/886060