Назад | Перейти на главную страницу

Создание файла службы экземпляра с использованием доступного шаблона

Некоторое время я использую 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 (не api.service.j2) - мы будем использовать шаблоны systemd вместо шаблонов ansible Jinja2. Затем измените его, как показано ниже:

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

Тогда вы сможете использовать его вместе с доступным сценарием, подобным следующему:

- 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

(Хотя я не уверен, что лучше использовать systemd или service модуль здесь; Я все еще новичок в ансибле.)

Смотрите также: https://serverfault.com/a/730339/74509