Utilizando Ansible para automatizar ambiente local

April 21, 2022

Se você leu os primeiros posts do meu blog, deve saber que tenho um chromebook. Hoje em dia, a forma mais fácil e nativa de desenvolvimento é utilizando o Crostini. É um LXC (Linux Containers), que vem na distro Debian por padrão, mas dá para mudar para Ubuntu, Arch Linux entre outras. Eu tenho um problema muito grande chamado: espaço em disco. Como meu chromebook tem apenas 16Gb de disco, o Crostini consegue alocar no máximo 7Gb, sendo que o sistema do Linux por si só já deve comer uns 2Gb.

Geralmente faço reboot desse container para diferentes setups de desenvolvimento (Node+Docker, Terraform+Kubernetes, PHP+Python+MySQL). E fazer a instalação dos pacotes tudo na mão toda hora que eu troco entre esses setup é um saco. É aí que entra o Ansible. Conheci recentemente por uma indicação de um colega do trabalho. Pesquisei e vi uns vídeos da Alura sobre o assunto e já consegui brincar um pouquinho para automatizar o provisionamento de meu ambiente padrão de desenvolvimento no Crostini.

A ideia era fazer a migração de um script bash para o Ansible. Segue abaixo o meu script:

#!/bin/bash

echo "Mazoni Environment Script!"

sudo apt update
sudo apt upgrade -y
sudo apt install git curl fish wget -y

# fish
echo "Configuring fish..."
mkdir ~/.config/fish
curl -o ~/.config/fish/config.fish https://raw.githubusercontent.com/MMazoni/configuration-files/master/.config/fish/config.fish
sudo chsh -s $(which fish) $USER

# vim
echo "Configuring vim..."
curl -o ~/.vimrc https://raw.githubusercontent.com/MMazoni/configuration-files/master/.vimrc
curl -o ~/.vim/colors/atlantic-dark.vim https://raw.githubusercurrent.com/MMazoni/configuration-files/master/.vim/colors/atlantic-dark.vim --create-dirs

# github
echo "Configuring git..."
git config --global user.name "Matheus Mazoni"
git config --global user.email "mmazoni.andrade@gmail.com"
git config --global core.editor vim
ssh-keygen -t rsa -b 4096 -C "mmazoni.andrade@gmail.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
sshcode=`cat ~/.ssh/id_rsa.pub`
echo $sshcode
read -p "Press enter to continue"

# docker
echo "Installing docker..."
sudo apt remove docker docker-engine docker.io containerd runc -y
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io -y
sudo groupadd docker
sudo usermod -aG docker $USER

# docker-compose
echo "Installing docker-compose..."
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# node
echo "Installing node and yarn..."
nodeversion="v14.17.3"
curl -o "$HOME/.node/node-$nodeversion-linux-x64.tar.xz" "https://nodejs.org/dist/$nodeversion/node-$nodeversion-linux-x64.tar.xz" --create-dirs
tar -xvf "$HOME/.node/node-$nodeversion-linux-x64.tar.xz" -C ~/.node/
rm "$HOME/.node/node-$nodeversion-linux-x64.tar.xz"
echo "set -x PATH \$HOME/.node/node-$nodeversion-linux-x64/bin/ \$PATH" >> ~/.config/fish/config.fish
source ~/.config/fish/config.fish
npm i -g yarn

O script era bem simples:

  • Instalava o fish, meu shell favorito.
  • Configurava o git
  • Configurava o vim
  • Gerava o SSH da máquina (não era tão automatizado, pois tinha que colocar no github)
  • Instalava o Docker e o Docker Compose
  • Instalava o node

Ansible é uma ferramenta open-source de automação mais utilizada para gerenciar a configuração de servidores. Porêm, vou usá-lo com meu ambiente de desenvolvimento local. Ela foi desenvolvida pela Red Hat em python, mas não precisa saber python para usar o ansible.

Geralmente não é comum utilizar no ambiente local, pelo fato ser muito poderoso pra fazer somente isso. Só que fiz para aprender mesmo. Achei a curva de aprendizado bem tranquila.

Algumas vantagens que percebi ao usar o Ansible:

  • simplicidade, fácil de aprender
  • não precisa instalar agent na máquina que será automatizada
  • playbooks escritos em YAML
  • utilizar secrets para dados sensíveis

Em um próximo post vou mostrar as formas de instalar o ansible e como fiz a automação e estruturei os playbooks.


Foto de perfil

Escrito por Matheus Mazoni, fissurado em tecnologia, generalista demais, mora em São Paulo. Gosta de basquete, cozinhar e cultura japonesa.

© 2024, Construído com Gatsby