Projeto de automação de rede demonstrando um pipeline completo desde o Git até o deployment em roteadores, apresentado no GTER54.
Este projeto demonstra práticas modernas de NetDevOps integrando:
- NetBox como Network Source of Truth (NSOT)
- Git para controle de versão e triggers de CI/CD
- Gitea Actions para automação de pipeline
- ContainerLab com dispositivos Nokia SR Linux para digital twin
- NUTS (Network Unit Testing System) para validação automatizada
NetBox → feature → development → main
↓ ↓ ↓
Commit CI Validation CD - Deploy
(Digital Twin) (Production)
- 3 dispositivos PE (Provider Edge) Nokia SR Linux
- Topologia OSPF
- Testes automatizados de interfaces, conectividade ICMP e neighbors OSPF
- Sistema operacional: Linux (recomendado Ubuntu/Debian)
- Docker e Docker Compose
- Acesso root ou sudo para ContainerLab
NetBox serve como a fonte da verdade (Network Source of Truth) para o projeto. A forma mais simples de instalar é usando o netbox-docker.
# Clonar o repositório netbox-docker
git clone -b release https://github.com/netbox-community/netbox-docker.git
cd netbox-docker
# Criar arquivo de configuração
tee docker-compose.override.yml <<EOF
version: '3.4'
services:
netbox:
ports:
- 8000:8080
EOF
# Iniciar o NetBox
docker compose pull
docker compose up -d
# Criar superusuário (após containers iniciarem)
docker compose exec netbox /opt/netbox/netbox/manage.py createsuperuserAcesse o NetBox em: http://localhost:8000
Documentação oficial: https://github.com/netbox-community/netbox-docker
ContainerLab é necessário para criar e gerenciar o ambiente de digital twin com dispositivos de rede.
# Download e instalação do ContainerLab
bash -c "$(curl -sL https://get.containerlab.dev)"
# Verificar instalação
containerlab versionDocumentação oficial: https://containerlab.dev/install/
UV é um gerenciador de pacotes Python moderno e rápido, usado para gerenciar as dependências do projeto.
# Instalação via curl
curl -LsSf https://astral.sh/uv/install.sh | sh
# Ou via pip
pip install uv
# Verificar instalação
uv --versionDocumentação oficial: https://docs.astral.sh/uv/
git clone https://github.com/wsdoprado/gter54.git
cd gter54# Criar ambiente virtual e instalar dependências
uv venv .venv
source .venv/bin/activate
uv sync
- Configure o NetBox com os dispositivos PE1, PE2, PE3
- Configure os templates de configuração para SR Linux
- Configure as interfaces e endereços IP conforme a topologia
- Adicione o Script Python do data-source e adicione os dados do GITEA no generate_intended.py
- Configure o repositório no Gitea
- Configure o Gitea Actions runner com acesso privilegiado ao Docker
Exemplo de configuração para o runner com acesso ao ContainerLab:
services:
runner:
image: gitea/act_runner:latest
privileged: true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/data
environment:
- GITEA_INSTANCE_URL=http://gitea:3000
- GITEA_RUNNER_REGISTRATION_TOKEN=${REGISTRATION_TOKEN}# Deploy da topologia ContainerLab
sudo containerlab deploy -t topology.yml
# Executar testes NUTS
uv run pytest tests/
# Destruir a topologia
sudo containerlab destroy -t topology.ymlO pipeline é acionado automaticamente:
- feature → development: Pull Request aciona pipeline de validação
- development → main: Merge aciona pipeline de deploy
gter54/
├── .gitea/
│ └── workflows/
│ └── ci.yml # Pipeline CI/CD
├── configs/ # Configurações geradas do NetBox
│ ├── pe1.conf
│ ├── pe2.conf
│ └── pe3.conf
├── tests/ # Testes NUTS
│ ├── test_interfaces.yml
│ ├── test_icmp.yml
│ └── test_ospf.yml
├── topology.yml # Topologia ContainerLab
├── pyproject.toml # Dependências Python
└── README.md
- Feature Branch: NetBox gera configurações e cria commit na branch feature
- Pull Request: Abre PR de feature → development
- Validação: Pipeline executa testes no digital twin (ContainerLab)
- Merge to Development: Após validação, merge para development
- Deploy: Merge de development → main aciona deploy para produção
Framework de testes para dispositivos de rede que valida:
- Configuração de interfaces
- Conectividade ICMP
- Adjacências OSPF
- Estado operacional dos dispositivos
Cria ambientes de laboratório usando containers Docker para:
- Simular topologias de rede completas
- Testar configurações antes do deploy
- Validar mudanças em ambiente controlado
Fonte da verdade (NSOT) que mantém:
- Inventário de dispositivos
- Configuração de interfaces
- Endereçamento IP
- Templates de configuração
# Verificar se o Docker está rodando
sudo systemctl status docker
# Verificar permissões
sudo usermod -aG docker $USER# Verificar conectividade com os dispositivos
sudo containerlab inspect -t topology.yml
# Verificar logs dos containers
docker logs <container-id># Verificar logs do runner
docker logs gitea-runner
# Verificar permissões do runner para acessar Docker socket
ls -la /var/run/docker.sock- ContainerLab Documentation
- Nokia SR Linux Documentation
- NetBox Documentation
- NUTS Framework
- Gitea Actions
[Especificar licença do projeto]
William - [informações de contato]
Apresentação GTER54: "Do Git ao Router - Automação de Rede com NetDevOps"