Quero fazer algumas perguntas sobre o trabalho da Ansible.
1 - Qual shell o Ansible usa ao fazer logon no host remoto?
2 - Se eu tiver 10 tarefas em um manual, o ansible faz a conexão 10 vezes com o host remoto OU usa uma única conexão para executar todas essas 10 tarefas?
3 - Se eu estiver executando 10 tarefas em 2 hosts,
Ele executará a primeira tarefa no host 1 e, em seguida, no host 2, depois a segunda tarefa no host 1 e depois no host 2, ... logo,
.
Então, aqui também a conexão persiste para os dois hosts?
OU
primeiro, ele se conecta ao host 1, executa a tarefa 1 e, em seguida, desconecta E, em seguida, conecta-se ao host 2, executa a tarefa 1 e, em seguida, desconecta?
Respostas:
Não consigo responder 1 (sempre achei que ele usasse o / bin / sh padrão, a menos que especificado de outra forma?).
Isso fará a conexão mais de 10 vezes. Uma única tarefa normalmente terá uma conexão SCP ou SFTP para copiar o arquivo de tarefas que será executado remotamente, depois outra conexão para acionar o script. Você pode monitorar isso acontecendo executando seu playbook com -vvv, como:
A verbosidade de terceiro nível mostra todas as conexões com o cliente.
Por padrão, o Ansible executará tarefas simultaneamente em todos os hosts até o número máximo configurado de garfos. Portanto, ele executará a tarefa 1 nos dois hosts, depois a tarefa 2 nos dois hosts, etc. Forks são definidos em ansible.cfg e o padrão é 5. Altere essa variável para um número maior ou comente-o:
Opcionalmente, você também pode executar um lote contínuo ao executar playbooks, especificando a
serial
opção no playbook. Isso executará tarefas simultaneamente apenas para quantos hosts você definiu.Digamos que você esteja executando um manual com 5 hosts e tenha a opção serial definida. Com serial = 1, ele executará o host completo da playbook 1 por vez. Com serial = 2, ele executará os hosts 1 e 2, os hosts 2 e 3 e o host 5. Exemplo:
Mais leitura:
Playbook serial (contínuo) é executado:
Forquilhas:
Espero que isto ajude.
fonte
ansible
usassh
multiplexação; portanto, não deve ser uma conexão única com um host remoto para todas as tarefas?(1) Qual shell o Ansible usa?
Utilizações possíveis
/bin/sh
por padrão. Em muitos sistemas * nix, incluindo RHEL / CentOS,/bin/sh
ébash
- no entanto, no Ubuntu / Debiandash
é muito mais básico.Fazendo Ansible usar bash
Deve ser possível mudar isso com a
executable = /bin/bash
opção de configuração em ansible.cfg e possivelmente também configurando ansible_shell_type no inventário.Mas, na prática (em Ansible 2.2.2 e superior) I e outros descobriram que a criação
executable
emansible.cfg
não funciona (seja embecome
modo ou não).Uma abordagem que funciona bem, mas significa um pouco mais de código por tarefa, é escrever o seguinte:
Isso deve dizer
hello from /bin/bash
, indicando que o shell está correto.Se você precisa usar
rvm
,rbenv
,pyenv
ou semelhantes ferramentas que necessitam de um anteriorsource ~/.bash_profile
(como com um shell interativo), você precisará usar um script ou invocação de festa dentro da tarefa shell .fonte
http://docs.ansible.com/ansible/latest/shell_module.html
fonte