DEV Community

Cover image for Configurando Ansible para uso com equipamentos Juniper - Final
Cristian Cardoso
Cristian Cardoso

Posted on

Configurando Ansible para uso com equipamentos Juniper - Final

Na parte 1 sobre uso do Ansible em equipamentos Juniper, mostrei como montar toda a infraestrutura para uso de Ansible em servidores rodando FreeBSD e também como se conectarmos no equipamento Juniper para execução de tarefas do Ansible, agora vamos à parte onde mostro como configurar alguns exemplos de tarefa que executamos no dia a dia e que podem ser útil para vocês.

Nesse post vamos criar 3 tipos distintos de tarefas, uma onde executamos comandos "literais", como se estivéssemos via cli, outro onde importamos um nível de configuração completo e por último como criarmos e configurarmos um vizinho BGP através de um template que se utiliza de variáveis para gerar o arquivo de configuração, ao fim do tutorial, vamos executar apenas a configuração do ASN e o vizinho BGP para mostrarmos a usabilidade das "tags" no ansible.

Arquivos de template

Lembre-se que na parte 1, criamos uma estrutura de diretórios base, para uso do Ansible, agora vamos criar mais um diretório, para mantermos nossos templates.

[ansible@ansible ~]$ mkdir roles/mx80/templates
Enter fullscreen mode Exit fullscreen mode

Depois de criarmos o diretório vamos criar o arquivo "routing.conf" dentro do diretório de templates
[ansible@ansible ~]$ vim roles/mx80/templates/routing.conf

Ao acessar o arquivo, no meu caso, vou inserir a seguinte config:

Image description

Por último vamos criar o arquivo para usarmos de template para configurações de vizinhos BGP, esse arquivo conterá diversos valores que vão ser editáveis via variáveis, dessa forma, o mesmo pode ser reutilizado em outros momentos, apenas mudando os valores das variáveis.

[ansible@ansible ~]$ vim roles/mx80/templates/bgp-neigh.j2
Enter fullscreen mode Exit fullscreen mode

Image description

Como boa prática, o ideal em uma nova sessão BGP é que nada seja anunciado ou recebido, antes de validarmos se a sessão subiu corretamente e está tudo certo. Dessa forma em meu cenário existe a política de roteamento chamada "Nada", onde toda e qualquer rota é descartada em uma sessão BGP.
Quem tiver interesse em replicar ela em seu cenário, segue abaixo como ela é configurada.

ansible@mx80> show configuration policy-options policy-statement Nada | display set
set policy-options policy-statement Nada term End then reject
Enter fullscreen mode Exit fullscreen mode

Basicamente a política acima, descarta qualquer rota BGP, quando inserida seja em um filtro de importação de rotas(import) ou filtro de exportação de rotas(export).

Isso garante que ao subirmos uma sessão BGP nada será recebido ou repassado de forma incorreta, além de ser uma boa prática.

Populando variáveis para criação da tarefa de BGP

Após mostrar como criar as tarefas e como gerar o template de configuração de vizinho BGP, vamos até o arquivo de variáveis do Ansible e vamos criar os campos que estão presentes no template e que na hora da execução irá buscar o valor no arquivo vars.yml para uso no template, que na execução da playbook, vão popular o arquivo.

[ansible@ansible ~]$ vim roles/mx80/vars/main.yml
Enter fullscreen mode Exit fullscreen mode

No arquivo haverá os seguintes campos:

Image description

Criação das tarefas

Ao se logarmos com o usuário no servidor através do comando no terminal do nosso servidor, vamos abrir o arquivo de tarefas do ansible para iniciar a criação das tarefas

[root@ansible ~]# su - ansible
[ansible@ansible ~]$ vim roles/mx80/tasks/main.yml
Enter fullscreen mode Exit fullscreen mode

Nos nossos arquivos vou usar o site Carbon, porque acho que a visualização fica melhor

Dentro do arquivo vamos criar as tarefas que mencionei anteriormente

Image description

O módulo de "tags" que existe em cada tarefa, pode ou não ser utilizado, dependendo da vontade de quem estiver executando a playbook, não efetuando a chamada de nenhuma tag, ele executará a playbook de cima para baixo da primeira à última tarefa.

Botando pra rodar

Agora com as tarefas já criadas, templates criados e variáveis populadas, vamos botar pra rodar a playbook e ver no que dá.

[ansible@ansible ~]$ ansible-playbook -i hosts prov-mx80.yml --tags routing-conf,bgp-arq-neighbor,bgp-conf-neighbor

PLAY [mx80] *****************************************************************************************************************************************************************************************************
TASK [mx80 : Inserindo routing-options] *************************************************************************************************************************************************************************changed: [mx80]

TASK [mx80 : Gerando arquivo de configuração BGP] ***************************************************************************************************************************************************************changed: [mx80 -> 127.0.0.1]

TASK [mx80 : configurando bgp via arquivo .conf] ****************************************************************************************************************************************************************changed: [mx80]

PLAY RECAP ******************************************************************************************************************************************************************************************************mx80-03-ita001             : ok=3    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
Enter fullscreen mode Exit fullscreen mode

A principio, tudo rodou corretamente, vamos ver agora no Juniper, se o router-id e o ASN foi inserido corretamente

ansible@mx80> show configuration routing-options
router-id 172.16.11.203;
autonomous-system 65001;
Enter fullscreen mode Exit fullscreen mode

Acima temos as configurações de routing-options executada pelo nosso template routing.conf corretamente.

Agora, vamos ver se o BGP configurou o grupo de acordo com as variáveis inseridas:

ansible@mx80> show configuration protocols bgp group ansible-teste
type internal;
import Nada;
export Nada;
peer-as 65001;
neighbor 192.168.100.100 {
    description "Teste vizinho bgp via .conf ansible";
    local-address 192.168.100.101;
    import Nada;
    family inet {
        unicast;
    }
    export Nada;
}
neighbor 2001:db8::100:100 {
    description "Teste vizinho v6 bgp via .conf ansible";
    local-address 2001:db8::100:101;
    import Nada;
    family inet6 {
        unicast;
    }
    export Nada;
}
Enter fullscreen mode Exit fullscreen mode

Agora vamos listar se a sessão BGP está sendo exibida, já que as configurações subiram corretamente

ansible@mx80> op show-bgp-neat | match 100
192.168.100.100                    65001  Idle         1:36             0       0         0         Teste vizinho bgp via .conf ansible
2001:db8::100:100                  65001  Idle         1:36             0       0         0         Teste vizinho v6 bgp via .conf ansible
Enter fullscreen mode Exit fullscreen mode

Logicamente por motivos de estudo, não havia um vizinho BGP já ativo para a sessão já exibir estabelecida, por isso o estado em "Idle"

Nesse tutorial, foi dado continuidade na execução de tarefas com Ansible e automação de tarefas em Juniper, creio que já é um bom norte pra quem está começando e quer se aprofundar mais com automação de redes.

Deixo abaixo alguns links de referência que podem ser úteis:

Módulos Ansible para Juniper

Manual da Juniper sobre Ansible no Junos OS

Módulos Ansible para Junos no Github

Top comments (0)