Aprenda a instalar um dos melhores Looking Glasses de código aberto: o Hyperglass
O que é o Hyperglass
O hyperglass é um espelho de rede de código aberto escrito por um engenheiro de rede para outros engenheiros de rede. O objetivo de um espelho é fornecer aos clientes, colegas e completos estranhos uma visibilidade autônoma da rede de uma operadora. A hyperglass foi criada com o grande objetivo de beneficiar a comunidade da Internet em geral, fornecendo uma maneira mais rápida, fácil e segura para as operadoras fornecerem serviços de espelhos a seus clientes, colegas e outras operadoras de rede.
Recursos:
– Rota BGP
– BGP Community
– BGP AS Path
– Ping
– Traceroute
Suporte para:
– Arista EOS
– BIRD
– Cisco IOS-XR
– Cisco IOS/IOS-XE
– Cisco NX-OS
– FRRouting
– Huawei
– Juniper JunOS
– Mikrotik
– Nokia SR OS
– TNSR
– VyOS
Personalização recursos, tema, texto da UI/API, mensagens de erro e comandos.
Ao decorrer do tutorial irei deixar todos os links com referencia a documentação https://hyperglass.dev/docs/, pois o mesmo tem muita possibilidades.
Notas e agradecimento
O hyperglass é tem sua principal base desenvolvida em Python e está disponível no github.com por thatmattlove, no entanto conta com um grupo no telegram onde encontrei algumas soluções para huawei, meu conhecimento em Python é limitado (ainda), mas criei meu próprio fork do projeto, e realizei algumas alterações. Deixar aqui uma agradecimento a eaitelecomunicacoes onde encontrei uma contribuição que me ajudou muito. Contamos com ajuda de todos para tornar o projeto algo ainda melhor! Se tiver melhorias nao deixe de realizar um Pull requests.
Distribuição Linux
Todos meus testes foram realizando em cima do Debian 11
– Instalação do Debian 11 Bullseye limpa passo-a-passo
Acesse seu servidor e se torne root da forma correta:
# su -
Pacotes necessários
# apt install -y python3-dev python3-pip python3-pil python3-pil.imagetk\ python3-libtiff python3-glymur libtiff-dev libfreetype-dev liblcms2-2\ liblcms2-utils libwebp-dev libboost-dev libimagequant-dev libraqm-dev\ libjpeg-dev wget unzip zip git curl gnupg2
Script de instalação
# cd /tmp # wget https://raw.githubusercontent.com/remontti/hyperglass/main/install.sh # bash install.sh
Ao finalize execute o comando hyperglass –help para ver se a instalação esta funcionando.
# hyperglass --help
Usage: hyperglass [OPTIONS] COMMAND [ARGS]... hyperglass Command Line Interface Options: -v, --version 🔢 hyperglass version -h, --help 🙏 Show this help message Commands: build-ui 🦋 Create a new UI build clear-cache 🧼 Clear the Redis cache secret 🔒 Generate agent secret setup 🧰 Run the setup wizard start 🚀 Start web server system-info 🌡 Get system information for a bug report
Configurando hyperglass
# hyperglass setup
Vamos definir o diretório de configurações, selecione com a seta para baixo /etc/hyperglass
[?] Choose a directory for hyperglass: /etc/hyperglass /root/hyperglass > /etc/hyperglass
Antes de deixar você chanar no erro webpack:
[ERROR] 20230330 10:02:32 | hyperglass.util.frontend:401 | build_frontend → Messages: info - Using webpack 5. Reason: future.webpack5 option enabled https://nextjs.org/docs/messages/webpack5
Vamos a solução localize `webpack5: true,` e altere para `webpack5: false,`
# sed -i 's/webpack5: true,/webpack5: false,/g' /usr/local/lib/python3.9/dist-packages/hyperglass/ui/next.config.js
Parâmetros de configuração
Crie o arquivo /etc/hyperglass/hyperglass.yaml
# vim /etc/hyperglass/hyperglass.yaml
Ajuste suas informações. Doc.
# https://hyperglass.dev/docs/parameters debug: false developer_mode: false org_name: Remontti Telecom primary_asn: 12345 site_title: Looking Glass Remontti site_description: "{org_name} Network Looking Glass" site_keywords: [hyperglass, looking glass, routing, bgp] request_timeout: 30 listen_address: "172.18.18.79" # IP que ira startar o serviço listen_port: 80 # Porta do servico # # https://hyperglass.dev/docs/response-caching cache: database: 0 host: localhost port: 6379 show_text: true timeout: 120 # # https://hyperglass.dev/docs/messages/ messages: acl_denied: "{target} is a member of {denied_network}, which is not allowed." acl_not_allowed: "{target} is not allowed." authentication_error: Authentication error occurred. connection_error: "Error connecting to {device_name}: {error}" feature_not_enabled: "{feature} is not enabled for {device_name}." general: Something went wrong. invalid_field: "{input} is an invalid {field}." invalid_input: "{target} is not a valid {query_type} target." no_input: "{field} must be specified." no_output: The query completed, but no matching results were found. no_response: No response. parsing_error: An error occurred while parsing the query output. request_timeout: Request timed out. vrf_not_associated: VRF {vrf_name} is not associated with {device_name}. vrf_not_found: VRF {vrf_name} is not defined. # # https://hyperglass.dev/docs/logging/ (/var/log/hyperglass.log) logging: directory: /var/log format: text max_size: 50 MB # # https://hyperglass.dev/docs/query-settings/ queries: bgp_route: display_name: BGP Route enable: true bgp_community: #Huwei modo structured não fuciona display_name: BGP Community enable: false mode: select communities: - community: 12345:666 display_name: Blackhole description: 12345:666 bgp_aspath: #Huwei modo structured não fuciona display_name: BGP AS Path enable: false pattern: asdot: '^(\^|^\_)((\d+\.\d+)\_|(\d+\.\d+)$|(\d+\.\d+)\(\_\.\+\_\))+$' asplain: '^(\^|^\_)(\d+\_|\d+$|\d+\(\_\.\+\_\))+$' mode: asplain ping: display_name: Ping enable: true traceroute: display_name: Traceroute enable: true # # https://hyperglass.dev/docs/table-output/ structured: rpki: mode: external # communities: # #Para não exibir nenhuma communities # mode: deny # communities: # # Para permitir apenas... # mode: permit # items: # - '65000:\d+' # - '65[1-4]00:\d+' # https://hyperglass.dev/docs/ui/configuration/ web: links: - title: PeeringDB url: https://www.peeringdb.com/asn/12345 side: left order: 1 - title: Qrator url: https://radar.qrator.net/AS12345 side: left order: 2 - title: RADb url: https://www.radb.net/query?advanced_query=&keywords=AS12345 side: left order: 3 - title: IRR Explorer url: https://irrexplorer.nlnog.net/asn/AS12345 side: left order: 4 - title: RDAP url: https://rdap.registro.br/autnum/12345 side: left order: 5 - title: Remontti url: https://www.remontti.com.br side: right order: 0 menus: - title: Contato content: "Please contact [noc@remontti.com.br](mailto:noc@remontti.com.br) to get support." side: right - title: Termos e Condições content: /etc/hyperglass/terms-and-conditions.md side: right # https://hyperglass.dev/docs/ui/logo logo: dark: /etc/hyperglass/static/images/hyperglass-dark.svg light: /etc/hyperglass/static/images/hyperglass-light.svg favicon: /etc/hyperglass/static/images/hyperglass-icon.svg height: null width: 100% # https://hyperglass.dev/docs/ui/text text: cache_icon: Cached from {time} UTC cache_prefix: "Results cached for " complete_time: Completed in {seconds} fqdn_error: Unable to resolve {fqdn} fqdn_error_button: Try Again fqdn_message: Your browser has resolved {fqdn} to fqdn_tooltip: Use {protocol} no_communities: No Communities query_location: Location query_target: Target query_type: Query Type query_vrf: Routing Table rpki_invalid: Invalid rpki_unknown: No ROAs Exist rpki_unverified: Not Verified rpki_valid: Valid subtitle: Network Looking Glass title: hyperglass title_mode: logo_subtitle # https://hyperglass.dev/docs/ui/theme # https://hyperglass.dev/docs/ui/example
Adicionando Dispositivos
Para adicionar seus dispositivos para cunsultas LG, crie o arquivo /etc/hyperglass/devices.yaml. Vou deixar um exemplo básico para Huawei, Mikrotik e comando personalizados com Linux. Docs
# vim /etc/hyperglass/devices.yaml
Adicione de acordo suas configurações
# https://hyperglass.dev/docs/adding-devices routers: - name: AS12345 Remontti address: 10.50.50.25 network: name: as12345 display_name: Huawei credential: username: lookingglass password: supersenha port: 22 nos: huawei vrfs: - name: global default: true ipv4: source_address: 200.200.200.200 access_list: - network: 10.0.0.0/8 action: deny - network: 192.168.0.0/16 action: deny - network: 100.64.0.0/10 action: deny - network: 172.16.0.0/12 action: deny - network: 0.0.0.0/0 action: permit ge: 8 le: 32 ipv6: source_address: 2000:2000:1::1 access_list: - network: ::/0 action: permit ge: 32 le: 128 - name: Mkzao Remontti address: 172.18.18.1 network: name: routerosrr display_name: Mikrotik credential: username: usuario password: senha port: 22 nos: mikrotik_routeros vrfs: - name: global default: true ipv4: source_address: 172.18.18.1 ipv6: source_address: 2001:db8::2 - name: Localhost Hyperglass address: 127.0.0.1 network: name: test1 display_name: Linux credential: username: usuario password: senha nos: linux commands: linux_comando_personlizado vrfs: - name: global default: true ipv4: source_address: 192.168.0.5 ipv6: source_address: 2001:db8:bebe:cafe:5
Comandos personalizados
# vim /etc/hyperglass/commands.yaml
Acima adicionei um device linux, qual temos comandos personalizado, segue um exemplo de como seria. Crie o arquivo /etc/hyperglass/commands.yaml
#https://hyperglass.dev/docs/commands linux_comando_personlizado: ipv4_default: bgp_route: 'echo bgp_route "{target}"' bgp_aspath: 'echo bgp_aspath "{target}"' bgp_community: 'echo bgp_community "{target}"' ping: 'ping -c 4 "{target}"' traceroute: 'traceroute -n "{target}"' ipv6_default: bgp_route: 'echo "{target}"' bgp_aspath: 'echo "{target}"' bgp_community: 'echo "{target}"' ping: 'echo "{target}"' traceroute: 'echo "{target}"' ipv4_vpn: bgp_route: 'echo "{vrf} {target}"' bgp_aspath: 'echo "{vrf} {target}"' bgp_community: 'echo "{vrf} {target}"' ping: 'echo "{vrf} {target}"' traceroute: 'echo "{vrf} {target}"' ipv6_vpn: bgp_route: 'echo "{vrf} {target}"' bgp_aspath: 'echo "{vrf} {target}"' bgp_community: 'echo "{vrf} {target}"' ping: 'echo "{vrf} {target}"' traceroute: 'echo "{vrf} {target}"'
Crie um arquivo para seis termos:
# vim /etc/hyperglass/terms-and-conditions.md
Descreva de acordo suas políticas.
Ao usar {site_title}, você concorda em cumprir os seguintes termos de uso: Todas as consultas executadas nesta página são registradas para análise e solução de problemas. Os usuários estão proibidos de automatizar consultas ou tentar processar consultas em massa. Este serviço é fornecido com base no melhor esforço, e {org_name} não oferece garantias ou garantias de disponibilidade ou desempenho.
Agora vamos a construção da interface do usuário. o Comando a baixo pode levar uns minutinho.
# cd /etc/hyperglass/ # hyperglass build-ui
Aguarde até ter a resposta:
[SUCCESS] 20230329 21:36:48 | hyperglass.util.frontend:386 | build_frontend → Completed UI build ✅ Completed UI build in production mode
Iniciando o serviço
Poderíamos iniciar com o comando `hyperglass start`, mas vamos criar um serviço no linux para fazer esse trabalho, para deixar até mesmo automatizado durante o boot. para isso irei criar uma pasta /etc/hyperglass/service/ onde irei criar nosso serviço.
# mkdir /etc/hyperglass/service/ # vim /etc/hyperglass/service/hyperglass.service
Agora vamos instruir o que deve ser feito.
[Unit] Description=hyperglass After=network.target Requires=redis-server.service [Service] User=root Group=root ExecStart=/usr/local/bin/hyperglass start ExecStop=/usr/bin/pkill -f hyperglass TimeoutStartSec=120 TimeoutStopSec=300 [Install] WantedBy=multi-user.target
Vamos cria um apontamento, recarecar nosso daemon, dar um enable para deixar iniciando com o boot, em seguida vamos iniciar o serviço.
# ln -s /etc/hyperglass/service/hyperglass.service /etc/systemd/system/hyperglass.service # systemctl daemon-reload # systemctl enable hyperglass # systemctl start hyperglass # systemctl status hyperglass
Pode levar um minutinho até iniciar, você pode acompanhar os logs.
# tail -f /var/log/hyperglass.log
Quando aparecer a mensagem a baixo você pode acessar em seu navegador:
...Started hyperglass 1.0.4 on http://SEUIP:PORTA with 6 workers
Pode verificar também as portas que estão sendo ouvidas.
# ss -putan | grep LISTEN | grep hyperglass
Acesse me seu navegador http://SEUIP:PORTA
Bonus: Proxy Nginx + Https
É bem comum querer executar o hyperglass em outra porta e somente para localhost, e criar um proxy para acesso web bem como ativar suporte https para sua página, pois em alguns casos ele pode esta rodando junto com outros serviços sem problema algum. Não é necessário ter uma “VM” só para isso. Vamos ao exemplo
# vim /etc/hyperglass/hyperglass.yaml
Altere o IP em listen_address para nosso endereço da loopback 127.0.0.1 e defina outra porta listen_port que ira rodar o serviço, no meu caso vou usar 58000
listen_address: "127.0.0.1" listen_port: 58000
Reinicie o hyperglass
systemctl restart hyperglass
Instale o Nxgix
# apt install nginx # sed -i 's/# server_tokens/server_tokens/' /etc/nginx/nginx.conf
Em alguns caso recomendo deletar as conf padrões, caso tiver problemas.
# rm /etc/nginx/sites-enabled/default
Crie um arquivo de configuração o nginx criar um proxy do nosso hyperglass
# vim /etc/nginx/sites-available/hyperglass.conf
Adicione
server { listen 80; listen [::]:80; server_name lg.remontti.com.br; #server_name _; # Descomente para deixar restrito apenas para determinados prefixos ou IPs. #allow 192.168.87.0/24; #allow 127.0.0.1; #allow 2001:0db8::/32; #allow ::1; #deny all; #error_page 403 http://www.remontti.com.br; client_max_body_size 2M; root /etc/hyperglass/static; location / { try_files $uri $uri/ /ui /ui/$uri =404; index /ui/index.html; } location /openapi.json { try_files $uri @proxy_to_app; } location /custom/ { try_files $uri $uri/ /custom; } location /images/ { try_files $uri $uri/ /images; } location /api { try_files $uri @proxy_to_app; } location @proxy_to_app { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://127.0.0.1:58000; } }
Link o arquivo no diretório /etc/nginx/sites-enabled qual será carregado ao iniciar o nginx, em seguira reinicie o serviço do nginx.
# ln -s /etc/nginx/sites-available/hyperglass.conf /etc/nginx/sites-enabled/hyperglass.conf # systemctl restart nginx
Agora você já pode acessar seu hyperglass através do nginx.
Criando certificado
Ao executar o Certbot instalado via apt tive alguns erros do python, acredito que conflitou alguma coisa com o hyperglass, (como meu tempo é bem curto inclusive para esta escrevendo aqui) realizei a instalação via snap qual resolveu meu problema.
Segue a instalação do snap:
# apt install snapd # snap install core
Instale o certbot via snap, crie um link em nossos binários, em seguida execute ele.
# snap install --classic certbot # ln -s /snap/bin/certbot /usr/bin/certbot # certbot
Informe os dados, ao finalizar o mesmo irá já ajustar seu arquivo do nginx, e basta acessar seu domínio.
Não esqueça que a cada 90 dias o certificado expira, então crie uma rotina para renovação, você pode adicionar ao cron agendando por exemplo para todo dia primeiro tentar renovar.
# echo '00 00 1 * * root certbot renew -q' >> /etc/crontab # systemctl restart cron
Parabéns você finalizou! Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!
Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.
Prints
Abraço!
Fontes:
https://hyperglass.dev/
https://hyperglass.dev/docs/
O meu não está aparecendo a table de BGP Route, está aparecendo o resultado do equipamento
Olá ,
Vejo seu site http://www.remontti.com.br e é impressionante. Gostaria de saber se opções de publicidade como guest post, conteúdo de anúncios estão disponíveis em seu site?
Qual é o preço se quisermos anunciar em seu site?
Observação: o artigo não deve ter nenhuma marca como patrocinado ou anunciado ou parecido e só podemos pagar por paypal.
Felicidades
Gael Kerdanet
Ola!
No huawei F1A não consegue realizar as consultas retornar o erro Something went wrong! Porém nos logs mosrta a consutla feita e retornando resultados do rotador
Ola, rodando porém ao tentar consultar rotas bgp com huaiwe sempre retorna o erro Something went wrong.
Boa noite,
Fiz a instalação e integração com um NE40, MX10003 e um Cisco IOSXR. Em todos tenho o erro de Forbidden quando tento usar a função de traceroute. Já rota BGP e Ping funcionam perfeitamente. Alguém passou por esse problema?
No arquivo de logs nem aparece nada quando executo a ação de tracert. Já bgp route e ping loga sem problemas.
Fiz toda a instalação e as consultar ipv4 está perfeitas, porem a ipv6 sempre me da uma mensagem dessa IPv6 is not enabled e não consigo fazer funcionar.
No meu apareceu o seguinte erro:
[WARNING] 20230407 17:22:11 | hyperglass.models.config.vrf:239 | set_dynamic → You have set the VRF name to ‘default’. This is no longer the way to
designate a VRF as the default (or global routing table) VRF. Instead,
add ‘default: true’ to the VRF definition.
[INFO] 20230407 17:22:11 | hyperglass.configuration.main:39 | → Configuration directory: /etc/hyperglass
Traceback (most recent call last):
File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/main.py”, line 105, in _config_optional
[ERROR] 20230407 17:22:11 | hyperglass.exceptions:38 | __init__ → [WARNING]
config = yaml.safe_load(cf) or {}
File “/usr/local/lib/python3.9/dist-packages/yaml/__init__.py”, line 125, in safe_load
return load(stream, SafeLoader)
File “/usr/local/lib/python3.9/dist-packages/yaml/__init__.py”, line 81, in load
return loader.get_single_data()
File “/usr/local/lib/python3.9/dist-packages/yaml/constructor.py”, line 49, in get_single_data
node = self.get_single_node()
File “/usr/local/lib/python3.9/dist-packages/yaml/composer.py”, line 36, in get_single_node
document = self.compose_document()
File “/usr/local/lib/python3.9/dist-packages/yaml/composer.py”, line 58, in compose_document
self.get_event()
File “/usr/local/lib/python3.9/dist-packages/yaml/parser.py”, line 118, in get_event
self.current_event = self.state()
File “/usr/local/lib/python3.9/dist-packages/yaml/parser.py”, line 193, in parse_document_end
token = self.peek_token()
File “/usr/local/lib/python3.9/dist-packages/yaml/scanner.py”, line 129, in peek_token
self.fetch_more_tokens()
File “/usr/local/lib/python3.9/dist-packages/yaml/scanner.py”, line 223, in fetch_more_tokens
return self.fetch_value()
File “/usr/local/lib/python3.9/dist-packages/yaml/scanner.py”, line 577, in fetch_value
raise ScannerError(None, None,
yaml.scanner.ScannerError: mapping values are not allowed here
in “/etc/hyperglass/commands.yaml”, line 2, column 15
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “/usr/local/bin/hyperglass”, line 8, in
sys.exit(CLI())
File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1130, in __call__
return self.main(*args, **kwargs)
File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1055, in main
rv = self.invoke(ctx)
File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 760, in invoke
return __callback(*args, **kwargs)
File “/usr/local/lib/python3.9/dist-packages/hyperglass/cli/commands.py”, line 70, in build_frontend
return build_ui(timeout)
File “/usr/local/lib/python3.9/dist-packages/hyperglass/cli/util.py”, line 68, in build_ui
from hyperglass.configuration import CONFIG_PATH, params, frontend_params
File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/__init__.py”, line 4, in
from .main import (
File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/main.py”, line 131, in
_user_commands = _config_optional(CONFIG_COMMANDS)
File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/main.py”, line 108, in _config_optional
raise ConfigError(error_msg=str(yaml_error))
Você conseguiu resolver?? o meu também só da esses erros.
Excelente material como sempre, parabéns pelo conteúdo, espero colocar um desses pra rodar em breve.
Show de bola, esse conteúdo já está com suporte a consulta por ipv6?
Muito bom o conteudo, está de parabens!!!
Mas se puderem ajudar, fiz o procedimento, mas apresenta o erro:
root@hyperglass:/etc/hyperglass# hyperglass build-ui
[WARNING] 20230401 09:08:12 | hyperglass.models.config.vrf:239 | set_dynamic → You have set the VRF name to ‘default’. This is no longer the way to
designate a VRF as the default (or global routing table) VRF. Instead,
add ‘default: true’ to the VRF definition.
[INFO] 20230401 09:08:12 | hyperglass.configuration.main:39 | → Configuration directory: /etc/hyperglass
[ERROR] 20230401 09:08:12 | hyperglass.configuration.validation:47 | validate_config → 1 validation error for Device
vrfs -> ipv6 -> source_address
value is not a valid IPv6 address (type=value_error.ipv6address)
[ERROR] 20230401 09:08:12 | hyperglass.exceptions:38 | __init__ → [WARNING]
Field: vrfs → ipv6 → source_address
Error: value is not a valid IPv6 address
Traceback (most recent call last):
File “/usr/local/bin/hyperglass”, line 8, in
sys.exit(CLI())
File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1130, in __call__
return self.main(*args, **kwargs)
File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1055, in main
rv = self.invoke(ctx)
File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 760, in invoke
return __callback(*args, **kwargs)
File “/usr/local/lib/python3.9/dist-packages/hyperglass/cli/commands.py”, line 70, in build_frontend
return build_ui(timeout)
File “/usr/local/lib/python3.9/dist-packages/hyperglass/cli/util.py”, line 68, in build_ui
from hyperglass.configuration import CONFIG_PATH, params, frontend_params
File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/__init__.py”, line 4, in
from .main import (
File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/main.py”, line 138, in
devices = validate_config(config=_user_devices.get(“routers”, []), importer=Devices)
File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/validation.py”, line 48, in validate_config
raise ConfigInvalid(err.errors()) from None
hyperglass.exceptions.ConfigInvalid:
Field: vrfs → ipv6 → source_address
Error: value is not a valid IPv6 address
mesmo problema aqui
Respeitem as linhas nos arquivos de configurações a um espaçamentoentre as linhas nos tres arquivos de configurações, que o Python pede para respeitar. aperta este botão ao lado em cima “”, que ira ver o espaçamento.
Muito bom!, obrigado por compartilhar mais uma vez!!!