Notifica / manipulador no estilo Pubsub no Ansible (reinicia todos os serviços usando o código fonte quando ele muda)

1

Eu tenho uma função que atualiza o código-fonte do meu projeto do git, e o nomeio como source_tree . O repositório Git contém a fonte usada por vários serviços, portanto, eu quero reiniciar todos os serviços usando essa fonte em cada host, se a alteração no git for detectada .

ou seja:

- git: repo=ssh://[email protected]/mylogin/hello.git dest=/home/mylogin/hello
  notify: restart everything dependent on source code

Por exemplo, tenho as funções webapp , notification_service , celery . Um host pode ter qualquer conjunto dessas funções, por exemplo, primeiro servidor executa webapp , segundo executa notification_service e celery . Todos esses serviços usam o código-fonte do mesmo diretório.

O problema é:

  • Não consigo listar todos os manipuladores em notify , como:

    - git: repo=ssh://[email protected]/mylogin/hello.git dest=/home/mylogin/hello
      notify: 
        - restart webapp
        - restart notification service
        - restart celery
    

    Como o manual falhe com erro se eu executar o manual sem todas as funções (ou mesmo se o host não incluir todas as funções):

    ERROR: change handler (restart celery) is not defined

    (por exemplo, tenho webapp.yml playbook que inclui source_tree e webapp funções, mas não notification_service e celery .)

    E não há como ignorar esse erro.

  • Não consigo criar vários manipuladores com o mesmo nome, apenas um (definido por último) estará em vigor.

Como superar essas limitações?

    
por kolen 15.01.2015 / 01:22

1 resposta

3

Eu não testei isso em todas as funções, mas você pode tentar registrar os resultados da tarefa git

- git: repo=ssh://[email protected]/mylogin/hello.git dest=/home/mylogin/hello
  register: gitrc

Em seguida, leia-o em cada uma das funções. Por exemplo,

em webapp/tasks/main.yml :

- supervisorctl: name=uwsgi state=restarted
  when: gitrc|changed

em celery/tasks/main.yml :

- supervisorctl: name=celery state=restarted
  when: gitrc|changed

Naturalmente, elas se tornam tarefas em vez de manipuladores.

    
por 15.01.2015 / 01:59

Tags