Este projeto demonstra a criação automatizada de uma topologia de rede no Cisco CML2, explorando três abordagens distintas para interação com sua API.
O objetivo principal é automatizar a criação de uma topologia de rede simples no CML2, consistindo em dois roteadores (iol-xe) conectados pela interface Ethernet0/0, com endereçamento IP básico:
- R1 (e0/0):
10.1.2.1/24 - R2 (e0/0):
10.1.2.2/24
- Cisco CML2: Acesso a um servidor CML2 (o projeto assume que o endereço do servidor será configurado no
.env). - Postman: Para a Etapa 1 (opcional, mas recomendado para testes manuais da API).
- Python 3.x: Ambiente de execução Python.
- Bibliotecas Python:
Flask,requests,python-dotenv,google-generativeai. - Google AI Studio: Uma conta e uma chave de API válida para a Etapa 3.
-
Clonar o Repositório:
git clone [https://github.com/mnisenbaum/cml2-ipd-week.git](https://github.com/mnisenbaum/cml2-ipd-week.git) cd cml2-ipd-week -
Configurar o Ambiente Virtual:
python -m venv venv # No Windows: .\venv\Scripts\activate # No macOS/Linux: source venv/bin/activate
-
Instalar as Dependências Python:
pip install Flask requests python-dotenv google-generativeai
-
Configurar Credenciais Seguras (Arquivo
.env): Crie um arquivo chamado.envna raiz do projeto (no mesmo diretório queapp.py). Este arquivo NÃO deve ser versionado no Git! Use o modelo.env.examplecomo guia e preencha com suas credenciais e chaves:# Credenciais do CML2 CML_SERVER=<ENDEREÇO_IP_DO_SEU_CML2>/api/v0 CML_USERNAME=<SEU_USUARIO_CML2> CML_PASSWORD=<SUA_SENHA_CML2> # Chave da API do Google AI Studio AI_STUDIO_API_KEY=<SUA_CHAVE_API_GOOGLE_AI_STUDIO>
Esta etapa demonstra como realizar cada chamada de API manualmente usando o Postman para criar a topologia.
-
Obter Token de Autenticação:
- Método:
POST - URL:
<ENDEREÇO_IP_DO_SEU_CML2>/api/v0/authenticate - Headers:
Content-Type: application/json - Body (raw/json):
{ "username": "<SEU_USUARIO_CML2>", "password": "<SUA_SENHA_CML2>" } - Ação: Copie o token JWT retornado no corpo da resposta.
- Método:
-
Criar o Laboratório (Lab):
- Método:
POST - URL:
<ENDEREÇO_IP_DO_SEU_CML2>/api/v0/labs - Headers:
Authorization: Bearer <token_obtido>,Content-Type: application/json - Body (raw/json):
{ "title": "LAB_POSTMAN", "description": "Criado via Postman" } - Ação: Copie o
iddo laboratório retornado.
- Método:
-
Criar os Nós (R1 e R2):
- Método:
POST - URL:
<ENDEREÇO_IP_DO_SEU_CML2>/api/v0/labs/<lab_id>/nodes?populate_interfaces=true - Headers:
Authorization: Bearer <token_obtido>,Content-Type: application/json - Body (raw/json - Exemplo para R1):
{ "label": "R1", "image_definition": "iol-xe", "node_definition": "iol-xe", "configuration": "hostname R1\ninterface Loopback0\n ip address 1.1.1.1 255.255.255.0\ninterface Ethernet0/0\n ip address 10.1.2.1 255.255.255.0\nend", "x": 100, "y": 100 } - Ação: Repita para R2 e copie os
ids dos nós R1 e R2.
- Método:
-
Encontrar as Interfaces:
- Método:
GET - URL:
<ENDEREÇO_IP_DO_SEU_CML2>/api/v0/labs/<lab_id>/nodes/<node_id>/interfaces?data=true - Headers:
Authorization: Bearer <token_obtido> - Ação: Na resposta JSON, encontre o
idda interfaceEthernet0/0para R1 e R2.
- Método:
-
Criar o Link:
- Método:
POST - URL:
<ENDEREÇO_IP_DO_SEU_CML2>/api/v0/labs/<lab_id>/links - Headers:
Authorization: Bearer <token_obtido>,Content-Type: application/json - Body (raw/json):
{ "src_int": "<id_r1_interface_e0/0>", "dst_int": "<id_r2_interface_e0/0>" }
- Método:
-
Iniciar o Laboratório:
- Método:
PUT - URL:
<ENDEREÇO_IP_DO_SEU_CML2>/api/v0/labs/<lab_id>/start - Headers:
Authorization: Bearer <token_obtido>
- Método:
Este script Python (cml_script-seguro.py) automatiza toda a sequência de chamadas da API do CML2 de forma autônoma.
-
Localização do Script:
- O script está localizado em:
cml_script-seguro.py
- O script está localizado em:
-
Executar o Script:
- No terminal, execute o script:
python3 cml_script-seguro.py
- Ação: O script irá imprimir o progresso e o ID do laboratório criado. Verifique o CML2 para confirmar a criação e inicialização.
- No terminal, execute o script:
Esta aplicação web permite criar a topologia CML2 através de comandos em linguagem natural, utilizando um chatbot de IA.
-
Configurar o Google AI Studio:
- Acesse o Google AI Studio.
- Crie um novo "Prompt de Chat" ou use um existente.
- Na seção Tools (Ferramentas), ative Function calling (Chamada de Função) e clique em Edit (Editar).
- Cole o conteúdo do arquivo
modelos-gemini.pyna seção de "Function declarations" (Declarações de Função) e salve.
-
Localização dos Arquivos da Aplicação:
- Backend:
app.py - Frontend:
templates/index.html
- Backend:
-
Executar a Aplicação:
- No terminal, inicie o servidor Flask:
python3 app.py
- Ação: O servidor será iniciado e estará acessível via navegador.
- No terminal, inicie o servidor Flask:
-
Acessar e Testar o Chatbot:
- Abra seu navegador e acesse a URL:
http://127.0.0.1:5000 - No campo de chat, digite um comando como:
Crie um laboratório com R3 e R4 - Ação: O chatbot irá processar sua requisição, acionar a automação no CML2 e retornar uma mensagem de sucesso ou erro. Verifique o CML2 para ver a topologia criada.
- Abra seu navegador e acesse a URL: