Utilizando o Ansible para provisionar ambientes
Depois de um tempo sem postar, venho falar de uma ferramenta que gosto muito: o Ansible. Para mostrar como funciona o Ansible, criaremos um blog na plataforma Ghost e esse será executado em um container Docker utilizando a imagem Ghost. Veremos como utilizar o Ansible e de quebra, como usá-lo juntamente com uma imagem Docker.
Vamos aprender a utilizar o Ansible:
Uma visão geral da estrutura de pastas do Ansible:
Inventory:
Na pasta hosts definimos o inventário das nossas máquinas que serão executados os playbooks (já veremos o que isso significa), no exemplo abaixo, temos um inventário chamado de blog-server, que contém apenas uma máquina inventariada.
Poderíamos ter outros inventários no mesmo arquivo ou outras máquinas inventariadas. Bastaria adicionar o endereço, login e senha dos outros servidores.
Ansible.cfg:
No arquivo ansible.cfg definimos qual será o inventário padrão e ignoramos a pergunta relacionada ao desejo de adicionar o IP da máquina ao arquivo known_hosts.
Playbooks:
Podemos dizer que um playbook é uma receita, onde é definido o que será provisionado nos nossos inventários. Fazendo uma analogia, seria um passo a passo para uma receita de bolo.
Nesse exemplo temos 3 passos a serem executadas, config-basic, docker, start-services. É importante dizer que esses passos são executados sequencialmente. Abaixo veremos o que cada um deles faz:
Roles:
Na pasta roles temos o seguinte formato:
Roles
config-basic
files
tasks
docker
files
tasks
start-services
files
tasks
Dentro de cada role, existe a pasta files, onde ficam os arquivos que serão utilizados para configurar algo no provisionamento do ambiente. Dentro da pasta tasks ficam as tarefas que serão executadas para provisionar o ambiente desejado. Por padrão o Ansible sempre procura dentro da pasta tasks um arquivo main.yml.
config-basic:
Abaixo temos o nosso arquivo main.yml com tarefas para configurar: timezone, language, criação de um usuário, adicionar o usuário no grupo de sudo e instala o unzip na máquina provisionada.
Docker:
Dentro da pasta files temos um arquivo do docker-compose.yml para subir o blog que desejamos na máquina provisionada.
Dentro da pasta tasks temos uma tarefa para adicionar o arquivo docker-compose.yml para dentro da home do usuário.
Agora tempos a tarefa para instalar o Docker na máquina que irá ser provisionada.
Próxima tarefa é para instalar o docker-compose na máquina provisionada.
Agora o arquivo main.yml tem apenas os imports das tarefas que estão na mesma role, dessa forma, fica mais organizado do que adicionar todas as tarefas no mesmo arquivo.
Start-services: E por último, vamos executar o comando para "startar" o serviço com o docker-compose.
Para provisionar uma máquina e rodar o blog com o Ghost, basta executar o comando:
ansible-playbook blog-server.yml
Ao executar este comando será apresentada a imagem abaixo, quando finalizar o provisionamento do nosso blog.
Ao acessar a máquina que provisionamos, podemos ver o nosso blog em execução, pronto para configurarmos.
É isso pessoal, espero que tenham gostado desse post. Até o próximo.
Referencias
http://docs.ansible.com/ansible/playbooksbestpractices.html https://www.ansible.com/