Perguntas sobre Conexão Ansible com hosts remotos


8

Quero fazer algumas perguntas sobre o trabalho da Ansible.

1 - Qual shell o Ansible usa ao fazer logon no host remoto?

/ubuntu/937354/track-logins-made-via-non-interactive-shells/937716?noredirect=1#comment1486867_937716

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?


11
Em geral, a plataforma Stack Exchange funciona melhor se você fizer apenas uma pergunta por ... pergunta.
Xiong Chiamiov

Sim, de fato ! Mas como essas eram pequenas perguntas e relacionadas a um único tópico, eu as combinei.
Luv.preet 26/07/2017

Não combine perguntas no futuro, pois fica mais difícil responder e ler todo o conjunto de perguntas e respostas. A questão 1 não está realmente relacionada às outras duas.
RichVel 7/08

Respostas:


7

Não consigo responder 1 (sempre achei que ele usasse o / bin / sh padrão, a menos que especificado de outra forma?).

  1. 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:

    ansible-playbook deploy_app.yml -u maplebird -vvv
    

    A verbosidade de terceiro nível mostra todas as conexões com o cliente.

  2. 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:

    forks = 5
    

    Opcionalmente, você também pode executar um lote contínuo ao executar playbooks, especificando a serialopçã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:

    name: deploy to all webservers
    hosts: webservers
    serial: 2
    roles:
       - deploy_application
    

Mais leitura:

Playbook serial (contínuo) é executado:

Forquilhas:

Espero que isto ajude.


2
IIRC, ansibleusa sshmultiplexação; portanto, não deve ser uma conexão única com um host remoto para todas as tarefas?
heemayl

3

(1) Qual shell o Ansible usa?

Utilizações possíveis /bin/shpor 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/bashopçã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 executableem ansible.cfgnão funciona (seja em becomemodo ou não).

Uma abordagem que funciona bem, mas significa um pouco mais de código por tarefa, é escrever o seguinte:

- shell:
    echo hello from $0
  args:
    executable: /bin/bash

Isso deve dizer hello from /bin/bash, indicando que o shell está correto.

Se você precisa usar rvm, rbenv, pyenvou semelhantes ferramentas que necessitam de um anterior source ~/.bash_profile(como com um shell interativo), você precisará usar um script ou invocação de festa dentro da tarefa shell .


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.