Estou rodando o Ansible 2.0 no SLES 11 SP4 contra cerca de 430 máquinas e é muito lento, não sei dizer por que ele é tão lento, mas vai muito mais rápido se limitar o número de máquinas no inventário . Levou cerca de 7 horas para executar um manual de 3 tarefas (incluindo a coleta de fatos) e a 3ª tarefa foi uma ação local. Demora o mesmo tempo para reunir 2 arquivos de fatos de máquinas quando estou executando o inventário de todos os 430 como faz para processar totalmente 6 máquinas.
E ele usa 99,9% da CPU logo de cara:
root 11646 99.8 0.4 220188 61016 pts/1 Rl+ 07:24 6:41 \_ /usr/bin/python /usr/bin/ansible-playbook /etc/ansible/playbooks/checkhostnames.yml ...
root 11651 0.1 0.4 187396 58828 pts/1 Sl+ 07:24 0:00 \_ /usr/bin/python /usr/bin/ansible-playbook /etc/ansible/playbooks/checkhostnames.yml ...
root 11652 0.1 0.4 187812 59216 pts/1 Sl+ 07:24 0:00 \_ /usr/bin/python /usr/bin/ansible-playbook /etc/ansible/playbooks/checkhostnames.yml ...
root 11653 0.1 0.4 188052 59428 pts/1 Sl+ 07:24 0:00 \_ /usr/bin/python /usr/bin/ansible-playbook /etc/ansible/playbooks/checkhostnames.yml ...
root 11654 0.1 0.4 186148 57496 pts/1 Sl+ 07:24 0:00 \_ /usr/bin/python /usr/bin/ansible-playbook /etc/ansible/playbooks/checkhostnames.yml ...
root 11655 0.1 0.4 186552 57924 pts/1 Sl+ 07:24 0:00 \_ /usr/bin/python /usr/bin/ansible-playbook /etc/ansible/playbooks/checkhostnames.yml ...
root 11656 0.4 0.2 154948 25828 pts/1 Sl+ 07:24 0:01 \_ /usr/bin/python /usr/bin/ansible-playbook /etc/ansible/playbooks/checkhostnames.yml ...
O que é assustador, já que eu realmente esperava que isso otimizasse nossos processos ssh serializados, parece que vai sugar todos os recursos.
quando eu strace o pid principal, ele parece estar executando stat
no arquivo de inventário repetidas vezes.
Estou mantendo todos os meus host vars em um arquivo de inventário que eu gero de um banco de dados. Eu tentei usar um inventário dinâmico, mas isso levou muito tempo para ser inicializado (acho que ele está acertando a consulta sql várias vezes)
Então, há um truque para executá-lo contra muitas máquinas?
Já experimentei todos os truques no link
Eu também tentei dividi-lo colocando host_vars para cada host em seu próprio arquivo - percebi que a Strace estava me dizendo que estava analisando meu arquivo de inventário 500k constantemente. Mas isso não ajudou muito.
Eu troquei meu manual para apenas fazer um olá, sem coletar fatos
quando executo um arquivo de inventário com apenas 3 hosts nele, obtenho
real 0m1.996s
user 0m0.400s
sys 0m0.112s
quando eu executo um arquivo de inventário com todos os 430 hosts e limito apenas aos 3 primeiros, eu o faço em , esses são hosts diferentes - mas a mesma marca de máquina :
real 0m11.989s
user 0m13.693s
sys 0m0.552s
e quando eu executo um arquivo de inventário com todos os 430 hosts sem limite (e ctrl-c após o terceiro, eu recebo:
real 2m50.961s
user 2m56.495s
sys 0m0.764s
Então, isso me faz pensar que não está acontecendo muita coisa nos bastidores e algo está intensamente bloqueando.