Ansible: dicas para quem está começando a usar a ferramenta de automação

O Ansible é uma ferramenta de automação de código aberto usada para configurar servidores, instalar software e executar uma grande variedade de tarefas de TI a partir de uma localização central. É um mecanismo sem agente de um para muitos, onde todas as instruções são executadas a partir de uma máquina de controle que se comunica com clientes remotos em SSH, embora outros protocolos também sejam suportados.

Embora voltado para administradores de sistema com acesso privilegiado que rotineiramente executam tarefas como instalar e configurar aplicativos, o Ansible também pode ser usado por usuários não privilegiados. Por exemplo, um administrador de banco de dados que usa o ID de login do mysql pode usar o Ansible para criar bancos de dados, adicionar usuários e definir controles de nível de acesso.

Vamos passar por um exemplo muito simples, onde um administrador do sistema provisiona 100 servidores por dia e deve executar uma série de comandos Bash em cada um antes de distribuí-lo aos usuários.

Este é um exemplo simples, mas serve para ilustrar a facilidade com que os comandos podem ser especificados em arquivos yaml e executados em servidores remotos. Em um ambiente heterogêneo, as declarações condicionais podem ser adicionadas para que determinados comandos sejam executados somente em determinados servidores (por exemplo, “apenas executa comandos yum em sistemas que não são Ubuntu ou Debian“).

Um recurso importante disponível no Ansible é um playbook que descreve um estado desejado em um sistema de computador, de forma que um playbook pode ser executado diversas vezes em um servidor sem afetar seu estado. Se uma determinada tarefa já foi implementada (por exemplo, “usuário sysman já existe“), então Ansible simplesmente a ignora e continua a tarefa.

Definições

Tasks: uma tarefa é a menor unidade de trabalho. Pode ser uma ação como “Instalar um banco de dados“, “Instalar um servidor web“, “Criar uma regra de firewall” ou “Copiar este arquivo de configuração para esse servidor”.

Plays: um play é composto de tarefas. Por exemplo, o play: “Preparar um banco de dados para ser usado por um servidor web” é composto das tarefas:

  • 1) Instalar o pacote de banco de dados;
  • 2) Definir uma senha para o administrador do banco de dados;
  • 3) Criar um banco de dados;
  • 4) Definir o acesso ao banco de dados.

Playbook: Um playbook é composto por um conjunto de plays. Um playbook poderia ser: “Prepare meu site com um backend de banco de dados”, e os plays seriam 1) Configurar o servidor de banco de dados; e 2) Configurar o servidor web.

Roles: as funções são usadas para salvar e organizar manuais e permitir compartilhar e reutilizar playbooks. Seguindo os exemplos anteriores, se você precisa configurar completamente um servidor web, pode usar uma função que outros escreveram e compartilharam para fazer exatamente isso. Uma vez que as funções são altamente configuráveis (se escritas corretamente), elas podem ser facilmente reutilizadas para atender a quaisquer requisitos de deploy.

Ansible Galaxy: O Ansible Galaxy é um repositório online onde as funções são carregadas para que possam ser compartilhadas com outras pessoas. Está integrado com o GitHub, de modo que os roles podem ser organizados em repositórios Git e, em seguida, compartilhados via Ansible Galaxy.

Essas definições e suas relações são descritas aqui:

Observe que esta é apenas uma maneira de organizar as tarefas que precisam ser executadas. Poderíamos ter dividido a instalação do banco de dados e do servidor web em diferentes playbooks e em diferentes roles. A maioria dos roles no Ansible Galaxy instala e configura aplicações individuais. Você pode ver exemplos para instalar o mysql e instalar o httpd.

Dicas para escrever playbooks

A melhor fonte para aprender Ansible é, claro, consultar o site da documentação oficial do projeto. E, como de costume, a pesquisa online é sua amiga. Recomendamos, porém, começar com tarefas simples, como instalar aplicativos ou criar usuários. Quando estiver/se sentir pronto, siga as seguintes diretrizes:

  • Ao realizar testes, use um pequeno subconjunto de servidores para que suas plays executem mais rapidamente. Se elas forem bem sucedidas em um servidor, serão bem-sucedidas em outros;
  • Sempre faça um dry run para garantir que todos os comandos estejam funcionando (execute com –check-mode flag).
  • Teste sempre que precisar, sem medo de quebrar as coisas. As tarefas descrevem um estado desejado, portanto, se um estado desejado já for alcançado, ele simplesmente será ignorado.
  • Certifique-se de que todos os nomes de host definidos em /etc/ansible/hosts sejam “resolvíveis”.
  • Como a comunicação com hosts remotos é feita usando SSH, as chaves devem ser aceitas pela máquina de controle, então, 1) troque as chaves com hosts remotos antes do início; ou 2) esteja pronto para digitar “Sim” para aceitar solicitações de troca de chaves SSH para cada host remoto que você deseja gerenciar.
  • Embora você possa combinar tarefas para diferentes distribuições Linux em um playbook, é recomendável escrever um playbook separado para cada distribuição.

Em última análise…

O Ansible é uma ótima opção para implementar a automação em seu data center:

  • É agentless, por isso é mais simples de instalar do que outras ferramentas de automação.
  • As instruções estão em YAML (embora JSON também seja suportado), por isso é mais fácil do que escrever scripts Shell.
  • É software de código aberto, então contribua para torná-lo ainda melhor!

Fonte: Opensource.com

Gostou do conteúdo? Tem alguma dúvida? Entre em contato com nossos Especialistas Mandic Cloud, ficamos felizes em ajudá-lo.