Tive um outono muito agitado este ano e agora não consigo acreditar já se passaram três meses desde meu último weblog, “Trazendo alguma fonte de verdade para o seu playground NetAI Agentic.” Isso é muito mais tempo do que eu havia planejado quando fiz minha “declaração de responsabilidade pública” sobre minha próxima postagem no weblog ser sobre o trabalho que fiz para trazer o NetBox para minhas simulações de CML de uma forma fácil e contínua.
Mas hoje estou de volta. E ansioso para revelar duas novas contribuições à comunidade Cisco Modeling Labs (CML) para seu uso imediato:
- Um nó CML e uma definição de imagem para um servidor NetBox
- CML2NetBoxum utilitário Python que preenche automaticamente o NetBox com base em um laboratório CML
Vamos mergulhar em cada uma dessas opções e ver como elas funcionam!
Nó de servidor NetBox para Cisco Modeling Labs
Nem toda rede CML que construo precisa de um servidor NetBox, mas sempre que estou trabalhando em um novo projeto de automação de rede, ou em algo que envolva a criação de uma réplica (ou réplica próxima) de nossa rede de produção – um “primo digital”, por assim dizer – vou querer ter uma fonte de verdade preenchida com dados da simulação de rede.
No passado, preenchi manualmente o NetBox com dados usando APIs, scripts ou importações de CSV. No entanto, essas opções não são ótimas e não faziam parte do laboratório em si. É aí que este novo definição de nó entra.
Agora posso simplesmente arrastar o nó “NetBox” para a topologia e configurá-lo para preencher automaticamente a partir da própria definição do laboratório CML.


Depois disso, basta iniciar o laboratório e o nó lerá as informações do laboratório CML e criará automaticamente websites, dispositivos, endereços IP e até mesmo cabos conectando interfaces em todos os nós da topologia.


Muito authorized, certo? Para aqueles que estão interessados em alguns detalhes técnicos, vamos nos aprofundar um pouco mais.
Primeiro, a definição do nó, ou mais precisamente, o definição de imagem que foi construído e compartilhado, é baseado na imagem Alpine 3.21 incluída na plataforma de referência CML 2.9. O projeto NetBox-Docker foi então usado para implantar o NetBox Group v4.4.5.
Este servidor NetBox foi projetado para ser executado em CML como parte de topologias de laboratório e eu queria que fosse muito fácil de usar nesses laboratórios. Então fiz algumas escolhas “opinativas” em sua configuração.
Para alinhar com outras credenciais padrão para nós no CML, o usuário administrador do NetBox foi pré-criado com um nome de usuário e senha de Cisco.
Também criei um token de API “0123456789012345678901234567890123456789” para este usuário. (Você pode alterar essas credenciais padrão depois de iniciar o nó, mas ter uma conta de administrador e acesso à API disponível na inicialização do nó permite que você comece seu trabalho de automação de rede imediatamente, sem precisar configurar o NetBox você mesmo.)
Além disso, eu pré-preenchi um Fabricante chamado “CML” junto com Tipos de dispositivos para cada um dos tipos de nós CML na plataforma de referência, bem como várias definições de nós adicionais da comunidade cml e meu uso pessoal. Tê-los pré-criados acelera a adição de dispositivos ao NetBox. No entanto, se você tiver uma definição de nó que NÃO esteja incluída na imagem base, não se preocupe. O código que preenche o NetBox criará dinamicamente novos Tipos de dispositivos conforme necessário.
Embora eu tenha trabalhado para tornar o uso do nó NetBox o mais fácil possível, há requisitos para adicioná-lo a um laboratório para que ele possa acessar os detalhes do laboratório CML para preencher o NetBox. Forneci detalhes completos no README da comunidade CML para o nó, e recomendo que você os leia ao configurar o novo nó em seu próprio servidor CML. Abordarei os destaques aqui também.
Para começar, o nó NetBox precisará de conectividade com a API REST do servidor CML por meio de um nó “conector externo”. Pode ser uma ponte ou um conector externo baseado em NAT; no entanto, para um conector baseado em NAT, você precisa primeiro atualizar uma regra de firewall na interface do CML Cockpit. Detalhes completos sobre a alteração necessária e o motivo estão documentados no README.
Em seguida, você precisará atualizar o CONFIG padrão do nó com detalhes do servidor CML e do laboratório com o qual deseja sincronizar. O configuração padrão do dia 0 fornecido com o nó inclui comentários detalhados que deixei para ajudar os usuários a entender as opções e como usar o nó. Você encontrará blocos opcionais para personalizar a configuração de rede do servidor, mas para preencher automaticamente o NetBox a partir do CML, você precisará descomentar e fornecer detalhes para um conjunto de variáveis de ambiente.
# export VIRL2_URL=https://192.168.255.1 # export VIRL2_USER=admin # export VIRL2_PASS=1234QWer # export VIRL2_VERIFY_SSL=False # export LAB_NAME="My CML Lab"
Esses valores são necessários porque, embora o servidor NetBox seja executado no servidor CML, não há como o nó “conhecer” automaticamente esses detalhes sobre o servidor. Portanto, nós os fornecemos como ENVs para que os scripts que se conectam ao CML saibam o endereço, as credenciais e com qual laboratório no servidor CML sincronizar. Espero que você sincronize o mesmo laboratório em que o nó NetBox está sendo executado, mas não é necessário. Você pode sincronizar qualquer laboratório do servidor CML.
Falando em scripts, você verá referências a dois scripts no ultimate da configuração. Esses scripts primeiro garantem que o NetBox esteja funcionando e, em seguida, conecte-se e sincronize a partir do CML. A saída de ambos os scripts é salva no nó em dois arquivos de log que você pode revisar após a conclusão da inicialização do nó. Basta conectar-se ao console do servidor NetBox e revisar o conteúdo dos arquivos.
((.venv) ) netbox-server:~$ cat startup_log.txt Checking if NetBox (http://localhost) is responding... Web site not responding, ready 5 seconds... (try 1/48) . Web site not responding, ready 5 seconds... (try 14/48) Web site is responding! (try 15) Checking if CML Controller (https://192.168.255.1) is reachable... Web site is responding! (try 1) Writing VIRL2 atmosphere variables to /house/cisco/.profile... Making an attempt to sync topology to NetBox... 🔄 Beginning lab topology synchronization... 📡 CML Server: https://192.168.255.1 🗄️ NetBox Server: http://localhost 🧪 Lab Identify: Instance NetBox Server Topology Starting lab synchronization now. Including 6 nodes from CML lab 'Instance NetBox Server Topology' to NetBox 📊 Processed 5/6 units... Including cables for six nodes from CML lab 'Instance NetBox Server Topology' to NetBox 📊 Processed cables for five/6 units... Topology synced efficiently.
Enquanto estiver no console, você pode executar novamente a sincronização desta forma.
((.venv) ) netbox-server:~$ cml2netbox sync lab 🔄 Beginning lab topology synchronization... 📡 CML Server: https://192.168.255.1 🗄️ NetBox Server: http://localhost 🧪 Lab Identify: Instance NetBox Server Topology Starting lab synchronization now. Including 7 nodes from CML lab 'Instance NetBox Server Topology' to NetBox 📊 Processed 5/7 units... Including cables for 7 nodes from CML lab 'Instance NetBox Server Topology' to NetBox 📊 Processed cables for five/7 units...
Você pode estar se perguntando por que deseja executar novamente a sincronização? Se você adicionar mais nós à topologia CML após seu início ou adicionar hyperlinks entre dispositivos, essas alterações serão adicionadas automaticamente ao NetBox. Se você excluiu nós ou cabos, o script não os limpará; você precisará excluí-los manualmente.
E você também pode se perguntar o que cml2netbox é? Bem, essa é a “mágica” subjacente que faz este nó funcionar. E é sobre o assunto que falaremos a seguir!
CML2NetBox: Um utilitário Python para TODOS!
Sei que alguns de vocês podem querer seus dados de laboratório CML no NetBox, mas não em uma instância do NetBox em execução no laboratório CML; em vez disso, em um servidor NetBox que você já possui em execução. Se isso soa como você, então não se preocupe, apenas pip instalar cml2netbox e divirta-se!
A verdade é que o nó do servidor NetBox usa cml2netbox sob o capô; ele é empacotado diretamente na definição de nó/imagem e automaticamente configurado e executado durante inicialização do nó. Mas agora vamos ver como podemos usar o utilitário diretamente.
Semelhante à configuração do nó, você precisará fornecer valores para o servidor CML do qual estará sincronizando e também precisará configurar os detalhes do servidor NetBox com o qual estará sincronizando. Um exemplo de arquivo .env é fornecido com o código no GitHub.
# CML2NetBox Configuration Instance # Copy this file to .env and fill in your values # CML Lab Particulars LAB_NAME="Your CML Lab" LAB_ID="your-lab-id-uuid-if-needed" # CML Server Configuration # Can even use VIRL2_* variants for backward compatibility CML2_URL=https://your-cml-server.instance.com CML2_USER=your-username CML2_PASS=your-password CML2_VERIFY_SSL=True # NetBox Server Configuration NETBOX_URL=https://your-netbox-server.instance.com NETBOX_API_TOKEN=your-api-token-here NETBOX_VERIFY_SSL=True
Basta copiar este arquivo e fornecer os dados para seus próprios servidores.
Para completar, você também pode fornecer todos esses dados como opções de linha de comando ao executar cml2netboxmas acho que configurá-los em um arquivo é mais simples do que digitá-los toda vez que execute o comando.
Vamos ver quais opções existem para a ferramenta.
cml2netbox sync --help Utilization: cml2netbox sync (OPTIONS) COMMAND (ARGS)... Synchronization instructions for CML and NetBox integration. Choices: --help Present this message and exit. Instructions: device-types Sync CML system varieties with NetBox system varieties. lab Sync CML lab topology with NetBox.
Existem duas opções. Authorized.
Você pode “preparar” um servidor NetBox criando o fabricante CML e os tipos de dispositivos para todas as definições de nó com tipos de dispositivos de sincronização cml2netbox. No entanto, isso não é obrigatório. Se você correr laboratório de sincronização cml2netbox antes de sincronizar os tipos de dispositivos, a ferramenta criará tipos de dispositivos para cada nó do laboratório. Isso levará um pouco mais de tempo na primeira vez, à medida que novos tipos de dispositivos forem criados. Mas isso significa que apenas os tipos de dispositivos necessários serão criados.
Mas a verdadeira diversão surge quando você sincroniza um laboratório como este.
cml2netbox sync lab 🔄 Beginning lab topology synchronization... 📡 CML Server: https://100.75.36.232 🗄️ NetBox Server: http://100.75.36.232:6999 🧪 Lab Identify: CCNA Prep 2025 S3E3 Superior ACL Exploration Starting lab synchronization now. Including 8 nodes from CML lab 'CCNA Prep 2025 S3E3 Superior ACL Exploration' to NetBox 📊 Processed 5/8 units... Including cables for 8 nodes from CML lab 'CCNA Prep 2025 S3E3 Superior ACL Exploration' to NetBox
Neste exemplo, sincronizei um segundo laboratório CML da topologia acima no servidor NetBox para demonstrar o que acontece quando você sincroniza vários laboratórios CML no mesmo servidor NetBox e como eles são diferenciados.


CML2NetBox criará um novo NetBox Web site para cada laboratório CML sincronizado. Isso significa que você pode usar um único servidor NetBox para armazenar dados de 1, 10 ou até 100 topologias CML!
E uma última observação… cml2netbox criará um arquivo .log para cada execução da ferramenta. Por padrão, o nível de registro é INFO, mas se você executar no modo “detalhado”, obterá o registro no nível DEBUG no arquivo. Isso pode ser útil se/quando algo der errado em um trabalho de sincronização, para que você possa descobrir o que aconteceu. Em meus testes, isso acontece com mais frequência quando você tem vários laboratórios em um único servidor NetBox e encontra objetos duplicados ou conflitantes.
cml2netbox -v sync lab tail -n 10 ./20251202-140246-cml2netbox.log 2025-12-02 14:03:13 - httpcore.http11 - DEBUG - response_closed.began 2025-12-02 14:03:13 - httpcore.http11 - DEBUG - response_closed.full 2025-12-02 14:03:13 - urllib3.connectionpool - DEBUG - http://100.75.36.232:6999 "GET /api/dcim/units/?title=server-sw&site_id=2&restrict=0 HTTP/1.1" 200 1924 2025-12-02 14:03:13 - urllib3.connectionpool - DEBUG - http://100.75.36.232:6999 "GET /api/dcim/interfaces/?device_id=14&title=port0&restrict=0 HTTP/1.1" 200 2333 2025-12-02 14:03:13 - cml2netbox_pkg.netbox_helpers - INFO - Interface port0 already has a cable: 11 2025-12-02 14:03:13 - cml2netbox_pkg.netbox_helpers - INFO - No cables created for node server-sw 2025-12-02 14:03:13 - cml2netbox_pkg.netbox_helpers - INFO - Connecting cables for CML node setup-installation 2025-12-02 14:03:13 - cml2netbox_pkg.netbox_helpers - DEBUG - Skipping hyperlink the place present node isn't interface_a 2025-12-02 14:03:13 - cml2netbox_pkg.netbox_helpers - INFO - No cables created for node setup-installation 2025-12-02 14:03:13 - cml2netbox_pkg.cli - INFO - Accomplished synchronization of 8 nodes to NetBox
E pronto!
Não se diga que Hank não cumpre suas promessas… só posso levar 3 meses para conseguir isso 😉
De qualquer forma, espero que você tenha gostado deste put up do weblog e, mais ainda, que aproveite uma ou ambas as opções que compartilhei.
Se você é novo no CML, confira Introdução às simulações de rede com Cisco Modeling Labs | CMLLAB Caminho de aprendizagem no Cisco U. Você também pode começar com Laboratórios de modelagem Cisco – edição gratuita rápido e fácil.
Até a próxima!
Inscreva-se para Cisco U. | Junte-se aoRede de aprendizagem Cisco hoje de graça.
Aprenda com a Cisco
X|Tópicos| Fb|LinkedIn|Instagram|YouTube
Usar #CiscoU e#CiscoCertpara participar da conversa.
Dê vida ao seu laboratório com Cisco Modeling Labs e MCP orientados por IA
Usando pipelines de CI/CD para configuração e gerenciamento de infraestrutura