使用 ansible 模板创建实例服务文件

使用 ansible 模板创建实例服务文件

我已经使用 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”之类的关键字?

答案1

将本地文件重命名为[email protected](不是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 [email protected]
  copy: [email protected] 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

相关内容