O ansible é de longe uma das ferramentas de automação TI que achei mais legal de estudar, é fácil de gerenciar, configurar centenas de dispositivos, de servidores windows a servidores linux e até mesmo roteadores e switches e sobre esses dois últimos que vamos tratar nesse artigo de hoje.
Ansible para Network Automation.
No meu último artigo, nós falamos de ansible e seus conceitos fundamentais, sobre como é legal de aprender ansible, que não exige um profundo conhecimento em programação, falamos de como ansible funciona, como configurar e fizemos um lab, se você ainda não viu esse artigo, recomendo que faça isso antes de continuar nesse, você pode fazer isso clicando aqui.
No artigo anterior, nós focamos em administração de servidores linux e fiquei pensando em fazer outro artigo em que pudesse falar de ansible para network automation, mais especificamente roteadores e switches e nós podemos fazer isso usando ansible e nesse artigo vamos focar nisso e como gerenciar roteadores e switches através do ansible.
Então pegue o seu café, abra o seu terminal e let's do it.
Nesse lab meu control node será um Cent OS 7, sem nenhuma configuração prévia, mais conhecido como zero bala. Então primeiro vamos dar um update no nosso querido Cent OS.
$ sudo yum update -y
E agora seguimos com os passos para a instalação do ansible.
Instalação do Ansible (Cent OS 7)
Se estiver usando outra distribuição ou SO, deixo abaixo o link para instalação do ansible nas demais plataformas, lembrando que não é possível usar um sistema operacional windows como control node.
$ sudo yum update -y
$ sudo yum install epel-release -y
$ sudo yum install ansible -y
Ansible Install: https://bit.ly/3bFdv0M
Após instalado, vamos fazer uma alteração no arquivo de configuração padrão do ansible, vamos acessar o diretório padrão do ansible:
$ cd /etc/ansible
Vamos usar o editor de texto vim para editar o arquivo de configuração do ansible:
$ vim ansible.cfg
E desabilitar a checagem de chaves, "descomentando" a linha 71, faremos isso para simplificar o artigo e os steps seguintes, mas não é recomendado em ambiente de produção.
host_key_checking = False
Feito isso podemos inserir os nossos managed nodes no inventário do ansible (para maiores informações sobre o que é isso e como isso funciona, veja meu artigo anterior, não vacila brow!).
Roteadores
Vamos para os roteadores, para esse lab vamos utilizar o Cisco Cloud Services Router (CSR) 1000V.
Para maiores informações sobre o CSR Router: https://bit.ly/2yTzdRG
Para fazer download da versão gratuita: https://bit.ly/2y8ShLh
Para uso em lab, podemos baixar e usar o router gratuitamente, mas ele será executado com uma largura de banda limitada, o que não impacta muito por ser um lab.
Eu fiz o download do arquivo OVA e importei para o VirtualBox (File > Import Appliance ...)
Editar propriedades da VM: CPUs - 2 | RAM - 4096 MB | Adaptadores de rede - 1
💡 Nota: É possível inicializar a VM com 1 CPU e 2 GB de RAM, mas levará muito mais tempo para o boot, mas claro depende dos recursos que você tem na máquina don't kill your pc.
Para o artigo não ficar muito extenso, vou ocultar a configuração para habilitar o SSH nos dois roteadores, pois recentemente eu escrevi um artigo sobre como fazer essa configuração em devices da cisco, para acessar clique aqui.
Inventário do Ansible
Vamos inserir os nossos roteadores no inventário do ansible, conforme a captura abaixo, os endereços IP dos roteadores são:
- csr1: 192.168.0.111
- csr2: 192.168.0.112
Acessando o inventário de managed nodes, para adicionar os nossos dois CSR1000V.
$ sudo vim /etc/ansible/hosts
No final do arquivo vamos definir um grupo de hosts denominado como roteadores e logo abaixo inserir os endereços dos roteadores.
[roteadores]
192.168.0.111
192.168.0.112
Existem muitas formas de acesso aos dispositivos de redes ou servidores linux e as diferenças estão nas variáveis que usamos para nos conectar a eles, então logo abaixo vamos inserir as variáveis que vão responder para o nosso grupo de roteadores:
[roteadores:vars]
ansible_user=max
ansible_password=cisco
Acima inserimos apenas as credenciais de login aos roteadores que configurei quando habilitei o SSH.
Logo abaixo ainda no grupo [roteadores:vars], vamos continuar inserindo variáveis e uma variável que absolutamente precisamos inserir é referente ao tipo de conexão (ansible_connection) porque podemos nos conectar a caixas linux ou dispositivos de redes (network_cli).
Em seguida vamos dizer ao ansible a qual sistema operacional de rede vamos nos conectar, poderia ser um nxos, junos etc., mas no caso do CSR1000v será o IOS padrão.
ansible_connection=network_cli
ansible_network_os-ios
Então como podemos ver na captura abaixo, temos o nosso grupo de roteadores e as variáveis que dizem como podemos nos conectar ao grupo, como o ansible pode interagir com eles.
Salvar e sair do arquivo de inventário para tornarmos permanentes essas alterações.
Comandos ad hoc
Feito isso a configuração está concluída, podemos efetuar testes com comandos ad-hoc direto na linha de comando, vamos começar com o PING:
$ ansible roteadores -m ping
E recebemos o pong de volta, também conhecido como SUCCESS.
Nesse segundo comando ad hoc vamos utilizar o módulo "ios_command" para comandos do Cisco IOS e vamos passar o comando para verificar os endereços IPs das interfaces dos roteadores:
$ ansible roteadores -m ios_command -a "commands='show ip int brief'"
💡 Nota: Os comandos podem ser abreviados, como fazemos normalmente na CLI.
Show, imagine se fossem 100 devices, não precisa mais ir em cada roteador para verificar uma informação que o nosso camarada ansible pode trazer de uma vez só, com um único comando.
PLAYBOOKs
E segue o jogo, vamos continuando e agora vamos entrar em playbooks. Nesse playbook, temos a play de nome Configs gerais, aplicada ao nosso grupo roteadores, que vai executar duas tasks:
1 - Adicionar um banner, especificamente o banner de login com o módulo ios_banner
2 - Adicionar uma interface loopback com o módulo ios_interface
---
- name: Configs gerais
hosts: roteadores
tasks:
- name: Adicionar banner
ios_banner:
banner: login
text: |
Somente Acesso Autorizado!
Max Address Networks
state: present
- name: Adicionar loopback
ios_interface:
name: Loopback21
state: present
Deixei o código YAML desse playbook no github: https://bit.ly/3bJy5NS
Então esse código yaml vamos adicioná-lo a um arquivo de texto:
$ sudo vim /etc/ansible/net-auto.yml
Feito isso, devemos salvar e sair do arquivo.
Agora executando o playbook:
$ ansible-playbook net-auto.yml
E funcionou! Como podemos ver nas saídas do comando acima, as duas tasks foram alteradas para o estado que definimos no código (changed=2).
Se executarmos o playbook novamente, não vamos ter nenhuma alteração, porque a configuração já está no estado que queremos, essa é uma característica no ansible chamado idempotência e falamos mais sobre ela no artigo anterior.
CHECANDO NOS ROTEADORES
Vamos dar um SSH nos roteadores e checar as alterações:
TASK BANNER
Banner login no csr1:
Banner login no csr2:
Também podemos chegar a informação do banner login com o comando:
show run | begin banner
TASK INTERFACE LOOPBACK21
Agora vamos checar as interfaces dos roteadores:
show ip interface brief
E tá lá, a interface loopback21 que adicionamos aos roteadores no playbook:
Portanto nesse ponto, tudo que queríamos que fosse executado nos roteadores, foi feito com sucesso.
REMOVER TASKS
E se quisermos remover essas alterações que fizemos? Vamos fazer isso.
Novamente devemos acessar o arquivo da playbook:
$ sudo vim /etc/ansible/net-auto.yml
E agora mudar o nome das tasks e principalmente o estado de "present" para "absent" em ambas as tasks:
---
- name: Configs gerais
hosts: roteadores
tasks:
- name: Remover banner
ios_banner:
banner: login
text: |
Somente Acesso Autorizado!
Max Address Networks
state: absent
- name: Remover loopback
ios_interface:
name: Loopback21
state: absent
Feito isso, salvar e sair do arquivo.
Agora podemos executar novamente o playbook e ver o que acontece:
$ ansible-playbook net-auto.yml
E tá lá, alterações feitas com sucesso (changed=2). Agora para finalizar, vamos checar se as duas tasks foram removidas de fato nos roteadores.
Sem banner de login.
E checando as interfaces dos roteadores:
Sem interface de loopback presente.
Portanto pudemos ver nesse artigo que não só para servidores linux que podemos utilizar o poder do ansible, para redes ele também é muito útil.
https://docs.ansible.com/
Max
📧 contato@maxaddress.com.br
ℹ️ linkedin.com/in/maxwlima
🌐 www.maxaddress.com.br