Como usar loops em Ansible

Como usar loops em Ansible
Ao trabalhar com código, pode ser necessário executar um bloco de código várias vezes. Escrever o mesmo bloco de código repetidamente é redundante e considerado um design ruim. É aqui que os loops entram.

Loops são conjuntos de comandos ou instruções que estão definidas para repetir um certo número de vezes, conforme os requisitos do usuário. Loops permitem um melhor fluxo de controle em seus scripts e remova a redundância geral deles.

Ansible também vem com vários métodos de looping de blocos de código. Este guia deve ajudá -lo a aprender sobre loops em Ansible. Abordaremos o básico do looping em Ansible, juntamente com a sintaxe e exemplos apropriados.

Dito isto, vamos dar uma olhada nos loops em Ansible.

Palavras -chave para loops em Ansible

Ansible usa as seguintes palavras -chave para suas estruturas de loop:

  • "laço"
  • "com_"
  • "até"

Como o nome sugere, "Loop" é o comando preferido para implementar loops em blocos de código.

Semelhante a "Loop", você tem "com_". Este comando exige que você forneça um plug -in de pesquisa. Recomenda -se usar com_* em vez de loop quando plugins de pesquisa estão envolvidos.

“Até” permite que você continue executando uma tarefa até que a condição necessária seja atendida. É a condição mais próxima da “enquanto” no fluxo de controle.

Agora que você tem uma idéia das palavras -chave para loops, você pode aprender sobre como implementá -las no código.

Loops padrão em Ansible

Começaremos discutindo como implementar loops padrão em Ansible. Para loops padrão, usaremos a palavra -chave "com_".

Este exemplo demonstra como podemos usar loops para adicionar usuários.

- Nome: Adicione vários usuários
do utilizador:
Nome: "item"
Estado: presente
Grupos: "roda"
with_items:
- VM1
- VM2

Agora, o próximo passo seria executar o manual. Você pode fazer isso com a ajuda do seguinte comando no terminal Linux:

Livro de teste Ansible-PlayBook.yml

Aqui, "item" é o termo de pesquisa. "With_item" tem dois hosts, VM1 e VM2, respectivamente. O loop faz o mesmo que o código abaixo:

- Nome: Adicionar usuário VM1
do utilizador:
Nome: "VM1"
Estado: presente
Grupos: "roda"
- Nome: Adicionar usuário VM2
do utilizador:
Nome: "VM2"
Estado: presente
Grupos: "roda"

Como você pode ver, usando "with_item", podemos remover a redundância do nosso código. Ao adicionar mais usuários em "with_items:", podemos adicionar vários usuários conforme a necessidade.

O próximo exemplo abordará como executar loops aninhados em Ansible.

Loops aninhados em Ansible

Ansible permite que você implemente loops aninhados em seus scripts. Um exemplo desse loop é dado abaixo.

- Nome: fornece aos usuários acesso a bancos de dados
mysql_user:
Nome: "item [0]"
priv: "item [1].*:TODOS"
Append_privs: Sim
Senha: "Foo"
with_nested:
- ['LinuxUser1', 'LinuxUser2']
- ['cliente', 'funcionário', 'provedor']

Como alternativa, você pode escrever o mesmo código com "Loop" da seguinte forma:

- Nome: fornece aos usuários acesso a bancos de dados
comunidade.mysql.mysql_user:
Nome: "item [0]"
priv: "item [1].*:TODOS"
Append_privs: Sim
Senha: "Foo"
Loop: "['linuxuser1', 'linuxuser2'] | produto (['cliente', 'funcionário', 'provider']) | list"

Os usuários terão acesso a todos os bancos de dados um por um. Como afirmado anteriormente, é mais fácil entender que o "with_" é melhor com plugins de pesquisa do que "loop" como a sintaxe.

Vamos dar uma olhada em alguns outros exemplos destacando a capacidade do Ansible.

Usando Ansible para iterar sobre hashes

Ansible permite que você pague uma lista de hashes. Isso pode ser visto no exemplo dado abaixo.

Vamos supor que você declarou uma lista de usuários da seguinte maneira.

Usuários:
VM1:
Nome: Máquina Virtual 1
Serial: 00000001
VM2:
Nome: Máquina Virtual 2
Serial: 00000002

Para imprimir todos os nomes e seriados, execute o script abaixo.

tarefas:
- Nome: Imprimir informações do usuário
depurar:
msg: "Usuário item.chave é item.valor.nome (item.valor.serial) "
with_dict: "usuários"

Isso imprimirá os nomes de usuário e seriados, respectivamente. Ao adicionar mais usuários no painel "Usuários:", você pode imprimir mais usuários sem precisar escrever o código novamente.

Usando loops para conjuntos de dados paralelos

Você também pode usar loops para conjuntos de dados paralelos. Isso é demonstrado no exemplo abaixo:

Vamos supor que você tenha os seguintes dados:

alfabetos: ['a', 'b', 'c', 'd']

Num: [2, 4, 6, 8]

Você pode fazer loop esses comandos da seguinte maneira:

tarefas:
- depurar:
msg: "item.0 e item.1 "
with_together:
- "alfabets"
- "num"

O código acima fará o loop dos dois conjuntos de dados juntos como (a, 2), (b, 4), etc.

Loops de escolha aleatória

Um dos recursos que acompanham os loops "with_" é "Random_choice".

Como o nome sugere, o recurso de escolha aleatória é usada para selecionar itens aleatoriamente de um determinado conjunto de instruções.

Este exemplo ilustra como fazer loops para selecionar uma ação de uma determinada lista de strings.

- depurar:
msg: "item"
with_random_choice:
- "Executar ação 1"
- "Executar ação 2"
- "Executar ação 3"
- "Executar ação 4"

Aqui, a sequência de "ação executada" é arbitrária e pode ser substituída por qualquer coisa. O comando with_random_choice selecionaria a lista de ações dadas aleatoriamente.

"Até" exemplos de loop

Esta seção do guia será sobre a sintaxe do loop "até".

Como afirmado anteriormente, o comando "até" repetirá um certo conjunto de instruções até que atenda a uma certa condição.

Aqui está um exemplo do loop "até" em ação.

concha:/usr/bin/foo

registro: resultado

Até: resultado.stdout.encontre ("todos os sistemas prontos") != -1

EXPETIRAS: 10

Atraso: 7

Este é um exemplo de um loop recursivo. O bloco de código acima continuará sendo executado até que o shell receba “todos os sistemas prontos” como saída de texto. Se não for esse o caso, ele vai parar depois de executar 10 vezes, pois as tentativas especificadas são "10".

O atraso corresponde ao atraso em segundos. Por padrão, está definido em 5.

Conclusão

Este foi um guia sobre como você pode usar loops em Ansible. Cobrimos o básico dos loops e sua sintaxe em Ansible e demonstramos seu uso através de diferentes exemplos. Com isso, esperamos que você esteja um passo mais perto de automatizar seus processos usando Ansible.