Implantação de "aquecimento" Ansible

1

Eu tenho o manual abaixo (simplificado).

Funciona muito bem, mas eu gostaria de poder fazer um aquecimento onde eu só implante em um único host (como serial: 1) e depois pause para que eu possa verificar os logs para verificar se está tudo bem antes de liberar algo tão grande quanto 33% de todos os meus serviços.

Existe uma maneira fácil que o Ansible permite que você faça isso?

Eu tenho uma solução realmente hacky no lugar agora envolvendo essencialmente copiar e colar meu código com serial: 1, uma declaração de falha, uma pilha de quando verificações e argumentos de linha de comando. Tem de haver uma maneira melhor do que arruinar um manual de outra forma limpo e legível. Eu não tenho certeza do que pode ser.

- name: 33% at a time max-analytics deploy
  hosts: role_max_logger
  serial: 33%
  tasks:
    - name: take out of lb analytics
      shell: haproxy stuff
    - pause:
        seconds: 5
    - name: gracefulReloading max-analytics
      shell: reload stuff
    - name: add back to lb analytics
      shell: haproxy stuff
    
por Brando__ 10.05.2017 / 08:15

2 respostas

1

A partir do Ansible 2.2, você pode definir tamanho de lote dinâmico . p">

---
- hosts: mygroup
  serial:
   - 1
   - 33%
  tasks:
    - shell: date
    - pause:
        prompt: check if everything ok
      when: ansible_play_hosts.index(inventory_hostname) == 0

Isso levará apenas um host no primeiro lote, execute o comando date nesse host e pause se o host atual for o primeiro em hosts de reprodução. Então, ele fará uma pausa apenas uma vez e, em seguida, 33% dos lotes serão interrompidos.

    
por 10.05.2017 / 10:29
0

Você pode tornar a serial como variável e passar a quantia que deseja que a cartilha execute. Por exemplo, você pode passar "1" como serial e, no final do playbook, se a variável for "1", saia do playbook.

Se a variável não for "1", o manual continuará com outros servidores. Seu primeiro servidor pode ser implantado novamente, mas não há problema, pois suas alterações já devem estar atualizadas.

Mais informações aqui: link

e use o módulo de falha para sair se a variável for "1": link

    
por 10.05.2017 / 08:30