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/