Primeiros passos com Ansible
- Vinicius Souza
- Linux
- 15 de março de 2020
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 !