Criando um arquivo de serviço de instância usando um modelo ansible

1

Eu tenho usado ansible por um tempo para instalar e configurar vários serviços, mas esta é a primeira vez que estou tentando configurar um serviço que pode ter várias instâncias em execução ao mesmo tempo. Estou usando um modelo para o arquivo de serviço, algo assim:

[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

E a minha função para instalar e configurar este serviço contém tarefas como esta:

- 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

Neste exato momento, isso está funcionando para algo como port = 80, mas acho que não o tornei genérico o suficiente. Eu não entendo completamente como criar esses serviços de instância. Como posso modificar o arquivo de serviço e a função de forma que cada porta de escuta possa ter seu próprio arquivo de serviço? Devo usar a palavra-chave "Wants" ou algo como "WantedBy = multi-user.target"?

    
por user3270760 01.12.2017 / 00:42

1 resposta

3

Renomeie seu arquivo local para [email protected] (não api.service.j2 ) - usaremos o modelo systemd em vez do modelo Jinja2 da ansible. Então alterá-lo como abaixo:

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

Então você deve poder usá-lo com ansible com um playbook como o seguinte:

- 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

(Embora eu não tenha certeza se é melhor usar o módulo systemd ou service aqui; ainda sou novato com ansible.)

Veja também: link

    
por 21.12.2017 / 10:33