Estou executando o Ansible 2.2, mas pode atualizar se ajudar.
Vi isso e fiquei bastante empolgado, mas não parece estar nesta (ou em nenhuma) versão da documentação do Ansible.
O problema que estou tentando resolver é que tenho 1000 usuários que preciso gerenciar em uma caixa de Centos.
Demora um pouco para executar esta tarefa em série. E ainda mais irritante, tudo aparece como alterado porque o comando "expira" no módulo do usuário sempre marca a coisa como alterada.
isso também parecia promissor, mas levou a mesma quantidade de tempo para executar cada comando no loop with_items e não foi mais rápido (nunca me preocupei em esperar o suficiente para chegar ao fim).
Ignorar tarefas é rápido agora (muito mais rápido do que no Ansible 2.0), se eu não conseguir descobrir como fazer isso funcionar em paralelo, acho que vou voltar e descobrir como ignorar tarefas sem sentido e se todas mais falhar, eu vou escrever meu próprio módulo. Mas parece que eu deveria ser capaz de fazer tudo isso mais rapidamente no Ansible.
Isto é o que eu quero executar em paralelo, host_authorizations
é uma lista de nomes de usuários e outros dados.
- name: Create/modify OS user accounts
user: name={{ item.username }} group=sshusers shell=/bin/bash home="/home/selinux-modules/{{ item.username }}" state=present expires={{item.expiredate|default(omit)}}
with_items: "{{ host_authorizations }}"
tags: full_maintenance
Respostas:
Como o @webKnja mencionou, isso é possível com o
async
modo. Eu mesmo descobri recentemente e aprendi que você pode usá-lo de três maneiras diferentes, dependendo de suas necessidades.Execute e faça uma sondagem nos resultados, observe o
poll:5
: Isso fará uma sondagem nos resultados a cada 5 segundos. Você pode economizar algum tempo com esse método.Dispare e esqueça
poll: 0
, esta é uma opção muito rápida, já que o Ansible está apenas executando essas tarefas. O lado negativo é que não sabemos qual foi o resultado da tarefa, ou sejachanged: True/False
. Claro que é uma desvantagem se você se importa com o feedback;).Dispare e esqueça
async_status
, a sintaxe da tarefa é a mesma do exemplo 2, sempre que exigirá tarefa adicionalasync_status
. Este é o meu favorito, pois é relativamente rápido (mais rápido que o loop normal ou oexecute and poll
) e permite que você capture o feedback, embora precise lidar com o novoregister
para o seuasync_task
.retries: 20
- quantas tentativas antes de falhar.delay: 2
- quantos segundos esperar entre as pesquisas.Uma palavra de cautela , dependendo da tarefa que você talvez não consiga usar a
async
opção. Eu tinha exemplos em que estava interagindo com o sistema que não era capaz de lidar com várias solicitações para o mesmo recurso. Eu achei aasync
opção melhor funcionando se eu tiver que executar a mesma tarefa em vários hosts. Foi onde pude "economizar" mais tempo.Desde que você postou o link para a documentação Ansible na pergunta, não vou fazer isso.
fonte
poll
valor para 0 no exemplo 3. Esta é uma explicação incrível! Thnx.async_status
requerjid
, nãoid
.Para responder à sua pergunta: Não, a partir de agora o Ansible não pode executar loops em paralelo.
Em
newusers
vez disso, eu usaria , criado para a criação de usuários em massa. Crie um arquivo com todos os usuários, copie-o para o host e executenewusers /path/to/user/list
umacommand
tarefa.fonte
É possível conseguir isso usando o
async
modo. Por favor, encontre algumas referências sobre como fazer isso abaixo.Refs:
fonte