Do Shell Script ao Ansible: meu primeiro e simples playbook

DevOps from Zero!💻
4 min readApr 15, 2020

--

E aí pessoal, hoje trago uma experiência mais a nível pessoal, venho compartilhar meu primeiro playbook em Ansible desenvolvido para substituir meu script feito em shell, para atualização de sistema. Isso começou há 2 anos atrás, e foi assistindo os vídeos do canal do Linux Tips que eu aprendi muito sobre DevOps e também Ansible, até que certo dia pensei em utilizar o Ansible para automações curtas no meu laptop Linux.

Um pouco da história e os scripts você confere abaixo. 😉

Basicamente, esse script faz a atualização do sistema Linux (Debian based), ele executa uma instrução condicional “case” com algumas opções de comandos de atualização, como “update”, “upgrade” e depois lista, caso tenha atualização disponível e remove pacotes desnecessários do sistema. Eu tinha um plano de converter todos os scripts em bash para playbooks Ansible, mas acabei estudando outras coisas e ferramentas, até que fiquei sem tempo. Caso vocês precisem de apoio ou mais exemplos de uso do Ansible ou de Shell Script, não deixem de ler dois artigos que publiquei um tempo atrás, ajuda MUITO.

Uma indicação boa também, é o curso que eu fiz do professor de Linux, Ricardo Prudenciato na Udemy, excelente curso e também me ajudou muito em algumas técnicas de debug e outros recursos que eu não conhecia de shell.

Costumo contribuir com a comunidade open-source e sempre que posso escrevo alguns scripts (bash) e dicas no site do vivaolinux.com.br. Vou postar ele aqui abaixo, e se vocês quiserem ver a minha postagem lá no site e dar um like, é só clicar aqui.

  • Script (Bash)
#!/usr/bin/env bash
#
# -----------------------------------------------------------------#
# Script Name: atualiza_sistema.sh
# Description: Update the system using apt command.
# Site: https://medium.com/@amaurybsouza
# Written by: Amaury Souza
# Maintenance: Amaury Souza
# -----------------------------------------------------------------# #
# Usage:
# $ ./atualiza_sistema.sh
# -----------------------------------------------------------------#
# Bash Version:
# Bash 4.4.19
# -----------------------------------------------------------------#
# History: v1.0 17/05/2019, Amaury:
# - Start de program
# - Add (apt clean) command to clean the system
# v1.1 19/05/2019, Amaury:
# - Tested with apt autoremove feature
# v1.2 30/05/2019, Amaury:
# - Add apt list --upgradable command
# -----------------------------------------------------------------#
# Thankfulness:
#
# -----------------------------------------------------------------#
TIME=1
clear
while true;do
echo " "
echo "SEJA BEM VINDO AO $0 DO UBUNTU!"
echo " "
echo "Escolha uma opção abaixo para começar!

1 - Verificar repositório do sistema
2 - Mostrar atualizações do sistema
3 - Instalar atualizações do sistema
4 - Limpar o sistema
5 - Remover pacotes não necessários
0 - Sair do sistema"
echo " "
echo -n "Opção escolhida: "
read opcao
case $opcao in
1)
echo Verificando o sistema por atualizações...
sleep $TIME
apt update
;;
2)
echo Mostrando as atualizações do sistema...
sleep $TIME
apt list --upgradable
;;
3)
echo Instalando atualizações do sistema...
sleep $TIME
apt upgrade -y
;;
4)
echo Limpando o sistema...
apt clean
apt autoclean
;;
5)
echo Removendo pacotes desnecessários do sistema...
sleep $TIME
apt autoremove -y
;;
0)
echo Saindo do sistema...
sleep $TIME
exit 0
;;

*)
echo Opção inválida, tente novamente!
;;
esac
done

Esse script acima foi o que eu utilizava para atualizar meu sistema, agora com Ansible, ficou bem mais simples e fácil de desenvolver uma playbook.

Vou destacar a documentação do Ansible para que você possa começar agora mesmo com suas automações, ahhhhh e vale reforçar uma coisa, foi até uma dica dos colegas, Alysson e Rodrigo do grupo de DevOps, que disseram um tempo atrás; o MELHOR exercício para aprender Ansible na prática, é você automatizar sua própria máquina, pois nesse exercício, você vai de fato usar as roles, variáveis, e outros recursos da ferramenta.

Documentação do Ansible.

  • Playbook Ansible

O playbook que eu escrevi foi o seguinte abaixo, não estou usando o recurso de roles, que seria uma boa prática, mas o playbook listando todas as tasks também funciona legal.

---
- hosts: local
become: yes
tasks:
- name: Upgrade all packages to the latest version (Debian based)
apt:
update_cache: yes
upgrade: yes
when: ansible_os_family == "Debian"
tags: updating
- name: Upgrade all packages to the latest version (CentOS based)
yum:
name: '*'
state: latest
when: ansible_os_family == "Centos"
- name: Remove useless packages from the cache (Debian based)
apt:
autoclean: yes
when: ansible_os_family == "Debian"
tags: remove packages
- name: Remove useless packages from the cache (CentOS based)
yum:
automremove: yes
become: yes
when: ansible_os_family == "Centos"
- name: Remove dependencies that are no longer required
apt:
autoremove: yes
when: ansible_os_family == "Debian"
tags: remove dependencies
...

Podemos ver que até pelo tanto de linhas de código, até pela forma de se declarar os módulos, o playbook é mais simples que um código em shell. Claro, alguns profissionais podem preferir usar um ou outro, mas a questão é, ter uma ferramenta de gestão de configuração hoje em sua infraestrutura de TI é bem mais simples e fácil de gerenciar seus servidores.

Existem muitas formas de se melhorar esse playbook, e deixo aqui uma sugestão, se quiserem melhorar o código com novas ideias e tal, podem comentar que faço o ajuste, alias, deixo tudo salvo no Github também é só abrir um pull request que eu adiciono no repositório. 🚀

Não pretendo estender muito, basicamente o que eu queria mostrar é isso. Foi algo mais pessoal, e vai de profissional para profissional, foi através desse playbook que eu vi o potencial do Ansible, hoje uso direto para automações. Nos próximos artigos pretendo mostrar um exemplo de Ansible com Terraform, as duas ferramentas se dão muito bem juntas.

Caso você queira ver posts sobre uma determinada ferramenta ou trocar ideia de como eu me aprofundo na cultura DevOps, é só me chamar! #VAIIII

--

--

DevOps from Zero!💻

SRE/DevOps Engineer| Lifelong learner | Medium Creator | AWS/Azure certified☁️ | Hashicorp Ambassador | Containers | Tech | Community | Coffee