Primeiros passos com Ansible

Primeiros passos com Ansible

O QUE É O ANSIBLE

Começando com um pouco de teoria o Ansible é uma ferramenta poderosíssima de automação para provisionamento e gerenciamento de configurações. Baseado em software livre e executado tanto em distribuições Unix quanto em Windows e atualmente mantido pela RedHat.
Para comunicação e funcionamento o Ansible utiliza OpenSSH, não necessitando de agents nos nodes (máquinas que serão “conectadas” pelo Ansible), e o único componente necessário para funcionamento é o Python, que é nativo nas maiorias das distribuições Unix-like. Com o Ansible é possível automatizar diversas tarefas, como:

  • Instalação e atualização de pacotes;
  • Controle de usuários;
  • Execução de comandos remotos;
  • Envio/ Criação de arquivos;
  • Alterações em arquivos de configurações (como confs de Apache, Nginx, etc);
  • Execução de tarefas;
  • Provisionamento de servidores;
  • etc.

O Ansible é composto basicamente da estrutura abaixo:

Inventory/ Host inventory: arquivo responsável por conter o inventário das máquinas alvos do Ansible Server;
Modules: controlam os recursos (pacotes, serviços, etc) dos hosts remotos;
Tasks: tarefas que serão executadas nos hosts remotos;
Playbooks: conjunto de instruções escritas em YAML que serão executadas.

Neste post de primeiros passos mostraremos como:

  • Instalar Ansible Server;
  • Adicionar IPs (máquinas) no arquivo hosts do Ansible server;
  • Como configurar o par de chaves para acesso sem necessidade do uso de senhas;
  • Como executar comandos remotamente;
  • Como criar um playbook básico (em outro post abordaremos este assunto mais a fundo).

ITENS PARA O LABORATÓRIO

Serão necessárias pelo menos duas máquinas virtuais, sendo que uma delas será o Ansible Server e a outra o host remoto, lembrando que o host terá de ter o componente Python instalado. Neste exercicio utilizamos 2 máquinas com sistema operacional Linux.

INSTALAÇÃO DO ANSIBLE SERVER

1- Configurando o PPA e instalando o Ansible na máquina Ansible Server

apt update
apt install software-properties-common
apt-add-repository --yes --update ppa:ansible/ansible
apt install ansible

CONFIGURANDO HOSTS NO ANSIBLE SERVER

No Ansible temos um arquivo chamado host geralmente localizado em /etc/ansible/hosts. É neste arquivo que colocaremos os ips ou hosts das máquinas que serão controladas. Indicamos utilizar a organização por grupos para que possam ter maior controle.

1- Acesse o arquivo /etc/ansible/hosts e crie um grupo utilizando [] e abaixo coloque o host ou ip. Exemplo:

[webserver] 
192.168.0.1

Fazendo isso definimos o grupo com o nome de webservers e indicamos que a máquina 192.168.0.1 pertence à ele.

GERANDO PAR DE CHAVES E AUTORIZANDO ACESSO

Para o Ansible server executar qualquer ação no host controlado ele terá de ter acesso via ssh e isso é possível se autenticando no momento da ação ou configurando um par de chaves para acesso por confiança.

1- Gerar par de chaves no Ansible Server

ssh-keygen

Nesta parte eu gerei o par de chaves com usuário root, porém você pode gerar com o usuário que preferir, porém no host remoto este usuário precisará estar criado e ter privilégios sudo para execução de algumas tarefas.

2- Acessar o arquivo authorized_keys NO HOST REMOTO, geralmente localizado em user/.ssh/authorized_keys e adicionar a chave publica gerada no passo 1.

VALIDANDO FUNCIONAMENTO E CONSIDERAÇÕES IMPORTANTES

Agora que instalamos o Ansible server, configuramos o arquivo hosts com o IP do servidor remoto e criamos uma relação de confiança entre o Ansible server e o host remoto com par de chaves, podemos validar o funcionamento executando o comando abaixo no Ansible Server.

ansible all -m ping

Este comando irá realizar um ping em TODOS os hosts configurados e deverá retornar com sucesso. Se tiver qualquer problema neste teste sugerimos que retorne alguns passos e veja se esqueceu algo.
Lembram que realizamos a criação do grupo webservers? Caso queiramos atingir apenas o webservers com o comando do ping podemos fazer conforme abaixo:

ansible webservers -m ping

Entendem agora a praticidade e necessidade da criação dos grupos?

Exemplo de retorno:

No ansible temos diversos módulos que possamos utilizar, neste exemplo colocamos o ‘-m’ para definir o módulo e usamos o ping, em outro post falaremos mais a fundo sobre os módulos.

EXECUTAR COMANDOS

Podemos com o ansible executar qualquer comando importando o módulo que queremos utilizar. Por exemplo importando o módulo shell e executando alguns comandos

ansible -m shell -a 'df -h' webservers
ansible -m shell -a 'cat /etc/os-release' webservers
ansible -m shell -a 'free -h' webservers

PLAYBOOK BÁSICO

Os playbooks são escritos em YAML e são basicamente conjunto de instruções. Imaginem que precisamos instalar um WebServer com Apache, PHP, MySql. Caso tivéssemos 10 máquinas para realizar a instalação, precisaríamos logar em cada uma e executar comando por comando, ou mesmo se fizéssemos em ansible não precisamos logar em cada uma e isso já ajudaria, mas se usássemos a mesma forma que fizemos o ping, teríamos de rodar linha por linha e atingir nossos hosts remotos e da mesma forma levaria bastante tempo.

o Playbook vem para nos ajudar a realizar essas configurações, como ele é um conjunto de instruções podemos definir tudo que ele precisa fazer, sempre de forma endentada.

Abaixo um exemplo de Playbook que instalará os componentes que falei acima:

instalarapache.yml

---
-    hosts: webservers
      tasks:
          - name: 'Instalar PHP'
             apt: 
                name: php
                state: latest
            #become: yes

           - name: 'Instalar apache'
             apt:
                name: apache2
                state: latest

           - name: 'Instala o mysql'
                apt:
                name: mysql-server
                state: latest

Ele é bem intuitivo, porém contornando um pouco a explicação dele, ele basicamente irá instalar cada um os componentes que colocamos após o ’name’ usando o gerenciador ‘apt’ e usando a versão mais recente definindo pelo ‘state: latest’.

O ‘become: yes’ é caso não esteja trabalhando com o usuário root e precise executar os comandos com sudo.

Para rodar o playbook basta executar o comando:

ansible-playbook instalarapache.yml

Este é um post sobre primeiros passos para entendermos um pouco mais o Ansible e começarmos a brincar um pouco, logo faremos um post de guia definitivo onde explicaremos com detalhes o Playbook, execução de comandos, módulos e etc.

Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !