Automatize tarefas na Raspberry Pi com Ansible Deixe um comentário

Instalar pacotes, modificar arquivos de configuração e reiniciar serviços, são tarefas simples se executadas uma única vez em uma única Raspberry Pi. Mas em um momento onde as empresas estão aumentando os investimentos em novas tecnologias como Internet da Coisas (IoT), dispositivos como a Raspberry Pi tendem a se multiplicar, aumentando a complexidade na execução de tarefas antes simples. Para cenários como este, existe o Ansible, uma ferramenta de automação de TI focada na simplicidade e facilidade de uso. Ele não usa agentes, por isso é fácil de implantar e usa uma linguagem muito simples (YAML, na forma de Ansible Playbooks). Então, confira neste post como automatizar tarefas na Raspberry Pi com Ansible.

Instalação do Ansible para automatizar tarefas na Raspberry Pi

Ansible pode ser executado a partir de qualquer máquina com o Python 2 (versão 2.7) ou Python 3 (versões 3.5 e superior) instalado. Isso inclui Red Hat, Debian, Ubuntu, CentOS, macOS, qualquer um dos BSDs e assim por diante. O Windows não é suportado.

Só é preciso instalá-lo em uma máquina, que pode ser facilmente um notebook. Uma vez instalado, é possível gerenciar uma grande quantidade de Raspberry Pi’s.

Instalar versão mais recente no Ubuntu:

sudo apt-get update && sudo apt-get install software-properties-common && sudo apt-add-repository --yes --update ppa:ansible/ansible && sudo apt-get install ansible

Instalar versão mais recente no Debian:

sudo echo 'deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main' >> /etc/apt/sources.list && sudo apt-get install dirmngr && sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 && sudo apt-get update && sudo apt-get install ansible

Como automatizar tarefas na Raspberry Pi com Ansible

O Ansible funciona conectando-se (via SSH por padrão) às Raspberry Pi’s e executando pequenos programas, chamados módulos.

As senhas são suportadas, mas as chaves SSH com ssh-agent são uma das melhores maneiras de usar o Ansible.

Criar chave SSH caso ainda não possua:

ssh-keygen

O processo é intuitivo. Primeiro pressionar a tecla Enter  e em seguida digitar a mesma senha duas vezes:

Enter file in which to save the key (/home/ansible/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): M1nh@5enh@+
Enter same passphrase again: M1nh@5enh@+

Em um cenário hipotético, vamos gerenciar duas Raspberry Pi’s, para onde precisamos apenas copiar a chave SSH pública.

Copiar chave SSH pública para a primeira Raspberry Pi:

ATENÇÃO! Substitua o nome de usuário (pi) e o endereço IP (192.168.0.1) de acordo com a configuração da sua Raspberry Pi.

ssh-copy-id [email protected]

Digitar yes:

Are you sure you want to continue connecting (yes/no)? yes

E a senha da Raspberry Pi:

[email protected]'s password: raspberry

Copiar chave SSH pública para a segunda Raspberry Pi:

ATENÇÃO! Substitua o nome de usuário (pi) e o endereço IP (192.168.0.2) de acordo com a configuração da sua Raspberry Pi.

ssh-copy-id [email protected]

Digitar yes:

Are you sure you want to continue connecting (yes/no)? yes

E a senha da Raspberry Pi:

[email protected]'s password: raspberry

Gerenciar inventário

O Ansible consulta em um arquivo simples, conhecido como inventário, a lista das Raspberry Pi’s a serem gerenciadas.

Para um inventário básico, editar o arquivo /etc/ansible/hosts:

sudo vim /etc/ansible/hosts

E incluir os endereços IP das Raspberry Pi’s:

ATENÇÃO! Substitua os endereços IP (192.168.0.1 e 192.168.0.2) de acordo com a configuração das Raspberry Pi’s.

192.168.0.1
192.168.0.2

Executar tarefas básicas (ad-hoc)

Um comando ad-hoc do Ansible usa a ferramenta de linha de comando /usr/bin/ansible para automatizar uma única tarefa em uma ou mais Raspberry Pi’s. Comandos ad-hoc são rápidos e fáceis, mas não são reutilizáveis. Os comandos ad-hoc demonstram a simplicidade e o poder do Ansible.

Para configurar o ssh-agent e evitar redigitar senhas:

ssh-agent bash

Em seguida:

ssh-add ~/.ssh/id_rsa

E digitar a mesma senha da chave SSH:

Enter passphrase for /home/ansible/.ssh/id_rsa:M1nh@5enh@+

Executar o comando /usr/bin/timedatectl para verificar o relógio do sistema e suas configurações em todas as Raspberry Pi’s do inventário:

ATENÇÃO! Substitua o nome de usuário (pi) de acordo com a configuração da Raspberry Pi.

ansible all -a /usr/bin/timedatectl -u pi

O resultado deve ser parecido com esse:

Imagem 1 - Automatizar tarefas na Raspberry Pi com Ansible

Nesse cenário hipotético, o sistema operacional das Raspberry Pi’s foi recém instalado. É esperado que a hora local (local time) e o fuso horário (time zone) não estejam corretamente configurados. Para solucionar esse problema existe a opção manual e repetitiva abordada no post Servidor NTP para manter a hora certa na Raspberry Pi, onde é preciso acessar cada Raspberry Pi e executar uma sequência de comandos. E existe a opção automatizada e dinâmica, usando Ansible playbook.

Executar tarefas complexas (playbook)

Os playbooks são uma maneira completamente diferente e mais poderosa de usar o Ansible. Diferentemente do modo ad-hoc que executa uma única tarefa, com os playbooks é possível executar várias tarefas em uma ou mais Raspberry Pi’s. Os Playbooks são projetados para serem legíveis por humanos e são desenvolvidos em uma linguagem básica de texto.

Para automatizar o post Servidor NTP para manter a hora certa na Raspberry Pi é preciso criar o arquivo modelo (template):

sudo vim /srv/ntp.conf.j2

E incluir a configuração a ser enviada para as Raspberry Pi’s:

driftfile /var/lib/ntp/ntp.drift

# Habilite para que as estatísticas sejam registradas.
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

# Adicione a lista de servidores NTP públicos.
# A diretiva iburst no final de cada linha é para acelerar a sincronização inicial.
server a.st1.ntp.br iburst
server b.st1.ntp.br iburst
server c.st1.ntp.br iburst
server d.st1.ntp.br iburst
server gps.ntp.br iburst
server a.ntp.br iburst
server b.ntp.br iburst
server c.ntp.br iburst
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst

# Define as permissões adequadas, concedendo acesso irrestrito apenas ao localhost.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
restrict 127.0.0.1
restrict ::1

Criar o arquivo de playbook:

vim playbook.yml

E incluir as tarefas a serem executadas nas Raspberry Pi’s:

---
- hosts: all
become: yes

tasks:
- name: Define o fuso horário para America/Sao_Paulo
timezone:
name: America/Sao_Paulo

- name: Verifique se o NTP está instalado
apt:
name: ntp
state: present

- name: Escreva o arquivo de configuração do NTP
template:
src: /srv/ntp.conf.j2
dest: /etc/ntp.conf
notify:
- restart ntp

- name: Verifique se o NTP está em execução e ativado
service:
name: ntp
state: started
enabled: yes

handlers:
- name: restart ntp
service:
name: ntp
state: restarted

Executar um único comando:

ansible-playbook playbook.yml -u pi

E aguardar o resultado:

Imagem 2 - Automatizar tarefas na Raspberry Pi com Ansible

Analisando o resultado, principalmente as áreas destacadas em tom alaranjado com a palavra changed, é possível concluir que com um único comando: definiu-se o fuso horário, instalou-se o pacote NTP, escreveu-se o arquivo de configuração e reiniciou-se o serviço NTP em todas as Raspberry Pi’s.

Ao executar novamente o comando /usr/bin/timedatectl para verificar o relógio do sistema e suas configurações:

ATENÇÃO! Substitua o nome de usuário (pi) de acordo com a configuração da Raspberry Pi.

ansible all -a /usr/bin/timedatectl -u pi

O resultado deve ser parecido com esse:

Imagem 3 - Automatizar tarefas na Raspberry Pi com Ansible

Agora a hora local (local time) e o fuso horário (time zone) estão corretamente configurados.

Fantástico, não é?!

Mas apenas arranhamos a superfície, o Ansible possui muito mais a oferecer, com certeza um ótimo tópico para investir e se aprofundar.

Gostou de apender como automatizar tarefas na Raspberry Pi com Ansible? Ajude-nos a melhorar o blog, participe com a sua sugestão, dúvida ou comentário aqui embaixo.

Faça seu comentário

Acesse sua conta e participe