Ansible: Como executar um Host de Tarefa por Host?

9

No nível de reprodução, temos serial: 1 para nos permitir executar toda a reprodução de um host de cada vez. Mas eu não encontrei uma maneira simples de fazer isso em uma única tarefa. Isso é especialmente relevante se a tarefa em questão não realizar o bloqueio adequado (por qualquer motivo).

Uma resposta óbvia é colocar a tarefa em seu próprio jogo. Mas isso não ajuda nos papéis. (Ter que colocar serial: 1 no jogo usando o papel não é realmente intuitivo.)

    
por Elrond 15.11.2015 / 02:24

4 respostas

8

Se você não quiser nenhum paralelismo na execução das etapas do seu manual, defina o nível do fork como 1:

ansible-playbook --forks=1 ...

Você também pode colocar isso em seu arquivo cfg ansible:

[defaults]
forks=1

mas se você quiser individualmente, use a opção de linha de comando acima.

EDITAR:

serial: 1 faz algo completamente diferente: é como executar o playbook de cada host, esperando a conclusão do playbook completo antes de passar para o próximo host. forks=1 significa executar a primeira tarefa em uma reprodução em um host antes de executar a mesma tarefa no próximo host, portanto, a primeira tarefa será executada para cada host antes que a próxima tarefa seja tocada.

Então você quer forks=1 para apenas uma jogada; infelizmente isso não é possível no momento.

    
por 16.11.2015 / 16:30
1

Se você estiver executando-o em uma única máquina, o problema de bloqueios exclusivos surge para mais de um host. Portanto, você deve executar um por um para todos os hosts. Para isso, você precisa ter --forks=1 definido ao chamar ansible comando playbook. Por exemplo: ansible-playbook webserver.yml --forks=1 em que webserver.yml tem app01 e app02 dentro de seu [webserver]

    
por 30.05.2018 / 15:00
0

Pense o que você quer é

run_once: true

    
por 11.08.2016 / 20:31
0

Para comandos que podem ser executados localmente, use um loop para iterar todos os hosts da reprodução. Isso só funciona se o comando puder ser executado localmente. Você também pode executar um comando com ssh nele para as máquinas remotas uma por uma dessa maneira, se as chaves estiverem configuradas, mas se torna difícil quando se fala em escalonamento.

EG:

- name: Init New Appliances - Remove the known hosts entry for the server in case it has changed
  run_once: yes
  connection: local
  become: no
  command: "ssh-keygen -R {{ item }}"
  with_items:
  - "{{ inventory_hostname }}"
    
por 24.05.2017 / 13:21

Tags