cancelar
Mostrar resultados para 
Pesquisar em vez de 
Queria dizer: 
cancel

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.

Não foi fornecido texto alternativo para esta imagem

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.

Não foi fornecido texto alternativo para esta imagem

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
Não foi fornecido texto alternativo para esta imagem


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.

Não foi fornecido texto alternativo para esta imagem

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
Não foi fornecido texto alternativo para esta imagem


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'"
Não foi fornecido texto alternativo para esta imagem

💡 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
Não foi fornecido texto alternativo para esta imagem

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.

Não foi fornecido texto alternativo para esta imagem

 

CHECANDO NOS ROTEADORES

Vamos dar um SSH nos roteadores e checar as alterações:


TASK BANNER

Banner login no csr1:

Não foi fornecido texto alternativo para esta imagem

 

Banner login no csr2:

Não foi fornecido texto alternativo para esta imagem


Também podemos chegar a informação do banner login com o comando:

show run | begin banner
Não foi fornecido texto alternativo para esta imagem

 


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:

Não foi fornecido texto alternativo para esta imagem
Não foi fornecido texto alternativo para esta imagem

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
Não foi fornecido texto alternativo para esta imagem

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.

Não foi fornecido texto alternativo para esta imagem
Não foi fornecido texto alternativo para esta imagem

Sem banner de login.

 

E checando as interfaces dos roteadores:

Não foi fornecido texto alternativo para esta imagem
Não foi fornecido texto alternativo para esta imagem

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

Primeiros Passos

Encontre respostas, faça perguntas e conecte-se com nossa comunidade de especialistas da Cisco de todo o mundo.

Estamos felizes por você estar aqui! Participe da conversa, encontre respostas, faça perguntas e conecte-se com sua comunidade.