Ansible: reinicie o serviço somente se ele estivesse em execução

7

Em um playbook Ansible, eu gostaria de reiniciar um serviço depois de atualizar o arquivo de configuração, mas somente se ele já estava em execução .

Eu não quero controlar o estado do serviço com ansible, apenas reiniciá-lo se ele foi iniciado anteriormente.

Eu poderia usar um comando personalizado para isso, mas não seria portátil em diferentes sistemas de gerenciamento de serviço (upstart / systemd / sysvinit / openrc ...) como o módulo de serviço do ansible é.

Obrigado por qualquer dica.

    
por Beli 24.02.2015 / 16:46

2 respostas

5

Registre uma variável quando a configuração for atualizada. Registre outra variável ao verificar se um serviço está sendo executado. Chame o manipulador de reinicialização do serviço somente se as duas variáveis forem verdadeiras.

Quanto aos detalhes de vários sistemas operacionais, você pode ter uma execução condicional com base na família / distribuição dos fatos do host.

    
por 25.02.2015 / 05:40
3

O módulo service: do Ansible não fornece um mecanismo para verificar se um serviço já está em execução ou não. Portanto, você terá que recorrer ao uso de algo assim por meio do módulo shell: para determinar primeiro se o serviço está sendo executado.

Exemplo

Aqui estou detectando se o WebSphere ou o Tomcat8 está em execução e, em seguida, reinicie o serviço apropriado com base em seu status.

---
# handles tomcat8
- name: is tomcat8 already running?
  shell: service tomcat8 status warn=false
  register: _svc_tomcat8
  failed_when: _svc_tomcat8.rc != 0 and ("unrecognized service" not in _svc_tomcat8.stderr)
  ignore_errors: true

- name: restart tomcat8 if running
  service: name=tomcat8 state=restarted
  when: "_svc_tomcat8.rc == 0"

# handles WAS
- name: is WebSphere already running?
  shell: service Node01_was.init status warn=false
  register: _svc_websphere
  failed_when: _svc_websphere.rc != 0 and ("unrecognized service" not in _svc_websphere.stderr)
  ignore_errors: true

- name: restart WebSphere if running
  service: name=Node01_was.init state=restarted
  when: "_svc_websphere.rc == 0"

# vim:ft=ansible:

Para invocar somente a reinicialização se um arquivo específico foi atualizado, você pode usar uma register: nas tarefas copy: ou template: para salvar o estado de atualização do arquivo. Os resultados desse register: podem ser incorporados como parte da tarefa when: na tarefa service: name=XXXX state=restarted .

    
por 21.07.2016 / 15:13

Tags