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:
1 |
# su - |
Pacotes necessários
1 2 3 4 |
# 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
1 2 3 |
# 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.
1 |
# hyperglass --help |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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
1 |
# hyperglass setup |
Vamos definir o diretório de configurações, selecione com a seta para baixo /etc/hyperglass
1 2 3 |
[?] Choose a directory for hyperglass: /etc/hyperglass /root/hyperglass > /etc/hyperglass |
Antes de deixar você chanar no erro webpack:
1 2 3 |
[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,
1 |
# 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
1 |
# vim /etc/hyperglass/hyperglass.yaml |
Ajuste suas informações. Doc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# 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
1 |
# vim /etc/hyperglass/devices.yaml |
Adicione de acordo suas configurações
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# 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
1 |
# 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#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:
1 |
# vim /etc/hyperglass/terms-and-conditions.md |
Descreva de acordo suas políticas.
1 2 3 4 |
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.
1 2 |
# cd /etc/hyperglass/ # hyperglass build-ui |
Aguarde até ter a resposta:
1 2 |
[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.
1 2 |
# mkdir /etc/hyperglass/service/ # vim /etc/hyperglass/service/hyperglass.service |
Agora vamos instruir o que deve ser feito.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[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.
1 2 3 4 5 |
# 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.
1 |
# tail -f /var/log/hyperglass.log |
Quando aparecer a mensagem a baixo você pode acessar em seu navegador:
1 |
...Started hyperglass 1.0.4 on http://SEUIP:PORTA with 6 workers |
Pode verificar também as portas que estão sendo ouvidas.
1 |
# 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
1 |
# 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
1 2 |
listen_address: "127.0.0.1" listen_port: 58000 |
Reinicie o hyperglass
1 |
systemctl restart hyperglass |
Instale o Nxgix
1 2 |
# 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.
1 |
# rm /etc/nginx/sites-enabled/default |
Crie um arquivo de configuração o nginx criar um proxy do nosso hyperglass
1 |
# vim /etc/nginx/sites-available/hyperglass.conf |
Adicione
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
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.
1 2 |
# 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:
1 2 |
# apt install snapd # snap install core |
Instale o certbot via snap, crie um link em nossos binários, em seguida execute ele.
1 2 3 |
# 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.
1 2 |
# 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/
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))
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!!!