Automatize suas tarefas com esta folha de dicas do Ansible
Comece a automatizar suas tarefas repetitivas conhecendo os módulos do Ansible, a estrutura YAML e muito mais.
O Ansible é uma das principais ferramentas no mundo da automação e orquestração devido à sua ampla utilidade e flexibilidade. No entanto, essas mesmas características são a razão pela qual pode ser difícil começar a usar o Ansible. Não é um aplicativo gráfico e, ainda assim, também não é um script ou linguagem de programação. Mas, assim como uma linguagem de programação, a resposta à pergunta comum “o que posso fazer com isso?” é "tudo", o que torna difícil saber por onde começar a fazer qualquer coisa.
Veja como vejo o Ansible: é um "mecanismo" que usa módulos de outras pessoas para realizar tarefas complexas que você descreve em um formato de texto especial de "pseudocódigo" chamado YAML. Isso significa que você precisa de três coisas para começar a usar o Ansible:
- Ansible
- Uma tarefa repetitiva que você deseja automatizar
- Uma compreensão básica do YAML
Este artigo tem como objetivo ajudá-lo a começar com essas três coisas.
Instale o Ansible
Parte da popularidade generalizada do Ansible pode ser atribuída à forma como ele permite que você (o usuário) ignore completamente o sistema operacional (SO) que você está almejando. Geralmente, você não precisa pensar se sua tarefa Ansible será executada no Linux, macOS, Windows ou BSD. O Ansible cuida das partes complicadas específicas da plataforma para você.
No entanto, para executar o Ansible, você precisa ter o Ansible instalado em algum lugar. O computador onde o Ansible está instalado é chamado de nó de controle. Qualquer computador alvo do Ansible é chamado de host.
Somente o nó de controle precisa ter o Ansible instalado.
Se você estiver no Linux, poderá instalar o Ansible do seu repositório de software com o gerenciador de pacotes.
Até o momento, o Windows não é capaz de servir como um nó de controle Ansible, embora quanto mais progresso ele fizer em direção ao POSIX, melhores serão as coisas, portanto, fique atento ao produto Windows Subsystem for Linux (WSL) da Microsoft.
No macOS, você pode usar um gerenciador de pacotes de terceiros, como Homebrew ou MacPorts.
Módulos Ansible
Ansible é apenas um motor. As partes que fazem 90% do trabalho são módulos Ansible. Esses módulos são programados por muitas pessoas diferentes em todo o mundo. Alguns se tornaram tão populares que a equipe do Ansible os adota e ajuda a mantê-los.
Como usuário, grande parte da sua interação com o Ansible é direcionada aos seus módulos. Escolher um módulo é como escolher um aplicativo em seu telefone ou computador: você tem uma tarefa que deseja realizar, então procura um módulo Ansible que afirma ajudar.
A maioria dos módulos está vinculada a aplicativos específicos. Por exemplo, o módulo de arquivo ajuda a criar e gerenciar arquivos. O móduloauthorized_key ajuda a gerenciar chaves SSH, os módulos de banco de dados ajudam a controlar e manipular bancos de dados e assim por diante.
Parte da decisão sobre uma tarefa a ser transferida para o Ansible é encontrar o módulo que o ajudará a realizá-la. As peças Ansible executam tarefas, e as tarefas consistem em palavras-chave Ansible ou módulos Ansible.
YAML e Ansible
O formato de texto YAML é uma forma altamente estruturada de fornecer instruções a um aplicativo, tornando-o quase uma forma de código. Assim como uma linguagem de programação, você deve escrever YAML de acordo com um conjunto específico de regras de sintaxe. Um arquivo YAML destinado ao Ansible é chamado de playbook e consiste em uma ou mais reproduções do Ansible.
Uma peça Ansible, como YAML, tem uma estrutura muito limitada. Existem dois tipos de instruções: uma sequência e um mapeamento. Uma peça Ansible, assim como YAML, sempre começa com 3 travessões (---
).
Sequências
Um elemento sequência é uma lista. Por exemplo, aqui está uma lista de espécies de pinguins no YAML:
---
- Emperor
- Gentoo
- Yellow-eyed
----
Mapeamento
Um elemento mapping consiste em duas partes: uma chave e um valor. Uma chave no Ansible geralmente é uma palavra-chave definida por um módulo Ansible, e o valor às vezes é booleano (true
ou false
) ou alguma escolha de parâmetros definidos pelo módulo, ou algo arbitrário, uma variável, dependendo do que está sendo definido.
Aqui está um mapeamento simples em YAML:
---
- Name: "A list of penguin species"
----
Sequências e mapeamento
Esses dois tipos de dados não são mutuamente exclusivos.
Você pode colocar uma sequência em um mapeamento. Nesse caso, a sequência é um valor para a chave de um mapeamento. Ao colocar uma sequência em um mapeamento, você recua a sequência para que ela seja "descendente" (ou "filho") de sua chave:
---
- Penguins:
- Emperor
- Gentoo
- Yellow-eyed
----
Você também pode colocar mapeamentos em uma sequência:
---
- Penguin: Emperor
- Mammal: Gnu
- Planar: Demon
----
Essas são todas as regras com as quais você precisa estar familiarizado para escrever YAML válido.
Escreva uma peça Ansible
Para jogadas Ansible, se você usa uma sequência ou um mapeamento (ou um mapeamento em uma sequência, ou uma sequência em um mapeamento) é ditado pelo Ansible ou pelo módulo Ansible que você está usando. A “linguagem” do Ansible fala principalmente de opções de configuração para ajudá-lo a determinar como e onde seu jogo será executado. Uma referência rápida a todas as palavras-chave do Ansible está disponível na documentação do manual do Ansible.
A partir da lista de palavras-chave, você pode criar uma abertura para sua peça. Você começa com três travessões porque é assim que um arquivo YAML sempre começa. Então você dá um nome à sua peça em um bloco de mapeamento. Você também deve definir em quais hosts (computadores) deseja que a peça seja executada e como o Ansible deve chegar ao computador.
Para este exemplo, configurei o host como localhost
, para que a reprodução seja executada apenas neste computador e o tipo de conexão como local
(o padrão é ssh
):
---
- name: "My first Ansible play"
hosts: localhost
connection: local
----
A maior parte do YAML que você escreverá em uma peça provavelmente são opções de configuração para um módulo Ansible específico. Para descobrir quais instruções um módulo espera do seu jogo Ansible, consulte a documentação desse módulo. Os módulos mantidos pelo Ansible estão documentados no site do Ansible.
Para este exemplo, usarei o módulo de depuração.
opensource. com
Na página de documentação do debug, três parâmetros estão listados:
msg
é uma string opcional para imprimir no terminal.var
é uma variável opcional, interpretada como uma string. Isso é mutuamente exclusivo commsg
, então você pode usar um ou outro – não ambos.verbosidade
é um número inteiro que você pode usar para controlar o quão detalhado é esse depurador. Seu padrão é 0, portanto não há limite a ser ultrapassado.
É um módulo simples, mas o que devemos procurar é o tipo de dados YAML de cada parâmetro. Você pode determinar pela minha descrição se esses parâmetros são uma sequência (uma lista) ou um mapeamento (um par de chave e valor)? Saber que tipo de bloco YAML usar em sua peça ajuda você a escrever peças válidas.
Aqui está uma jogada simples do Ansible do tipo "olá mundo":
---
- name: "My first Ansible play"
hosts: localhost
connection: local
tasks:
- name: "Print a greeting"
debug:
msg: "Hello world"
----
Observe que a peça contém uma tarefa
. Esta tarefa é um mapeamento que contém uma sequência de exatamente um item. O item nesta tarefa é nome
(e seu valor), o módulo que está sendo usado pela tarefa e um parâmetro msg
(junto com seu valor). Tudo isso faz parte do mapeamento de tarefas, portanto, são recuados para mostrar a herança.
Você pode testar este jogo Ansible usando o comando ansible-playbook
com a opção --check
:
$ ansible-playbook --check hello.yaml
PLAY [My first Ansible play] *************************
TASK [Gathering Facts] *******************************
ok: [localhost]
TASK [Print a greeting] ******************************
ok: [localhost] => {
"msg": "Hello world"
}
PLAY RECAP *******************************************
localhost: ok=2 changed=0 unreachable=0 failed=0
É detalhado, mas você pode depurar a mensagem na tarefa "Imprimir uma saudação", exatamente onde você a colocou.
Módulos de teste
Usar um novo módulo Ansible é como experimentar um novo comando do Linux. Você lê sua documentação, estuda sua sintaxe e depois tenta alguns testes.
Existem pelo menos dois outros módulos que você pode usar para escrever uma peça "olá mundo": assert e meta. Tente ler a documentação desses módulos e veja se você consegue criar um teste simples com base no que aprendeu acima.
Para obter mais exemplos de como os módulos são usados para realizar o trabalho, visite Ansible Galaxy, um repositório de código aberto de peças contribuídas pela comunidade.