Este material é uma adaptação do original publicado pela Cisco em https://developer.cisco.com/learning/lab/learn-nso-the-easy-way/step/1.
O curso original é composto por 10 capítulos.
Este curso adapata as etapas 1, 2, 3, 6, 9 e 10 para um cenário de dispositivo ConfD Padtec.
Os textos originais foram traduzidos de EN-US para PT-BR via https://translate.google.com com pouca ou nenhuma revisão manual.
Recursos utilizados:
Resumo do conteúdo:
Durante a execução do tutorial, você poderá querer acompanhar as modificações via web-ui: http://172.31.0.212:8080
Visualizadores online de arquivos .md:
https://dillinger.io
https://pandao.github.io/editor.md/en.html
Visite:
https://www.cisco.com/c/en/us/products/cloud-systems-management/network-services-orchestrator/index.html
https://developer.cisco.com/site/nso/
O NSO coleta, analisa e armazena o estado de configuração dos dispositivos de rede que gerencia em um banco de dados de configuração (CDB). Os usuários e outros aplicativos podem pedir ao NSO para criar, ler, atualizar ou excluir a configuração de forma programática, seja ad hoc ou por meio de serviços de rede personalizáveis.
A NSO usa pacotes de software chamados Network Element Drivers (NEDs) para facilitar as interações de telnet, SSH ou API com os dispositivos que gerencia. O NED fornece uma camada de abstração que lê a configuração de execução do dispositivo e a analisa em um instantâneo validado por modelo de dados no CDB.
Os NEDs também permitem o inverso, criando configuração de rede a partir de entradas de dados CDB e, em seguida, enviando as configurações aos dispositivos de rede. Existem centenas de NEDs cobrindo todas as plataformas Cisco (incluindo IOS-XE, IOS-XR, NX-OS e ASA) e também todas as principais plataformas não Cisco.
Ao concluir este laboratório, você será capaz de:
Pré-requisitos
A System Install é usada ao instalar o NSO para uma finalidade de nível de produção centralizada e "sempre ativa". Ele é configurado como um daemon do sistema que iniciaria e terminaria com o sistema operacional subjacente. As credenciais padrão e os locais de instalação do aplicativo se alinham com uma função típica de aplicativo Linux.
A Local Install é usada para fins de desenvolvimento, laboratório e avaliação. Ele descompacta todos os componentes do aplicativo, incluindo documentação e exemplos, e permite ao usuário instanciar e iniciar instâncias do NSO sob demanda. Uma instalação local em uma única estação de trabalho pode ser usada por um engenheiro para executar várias instâncias não relacionadas de NSO para diferentes laboratórios e demonstrações. Esta instalação inclui credenciais padrão para facilidade de uso e normalmente é instalada em uma pasta facilmente acessível.
Este laboratório se concentrará na instalação local do NSO, pois é mais fácil para os novos usuários navegar e executar localmente em seus laptops.
https://linuxconfig.org/install-python-2-on-ubuntu-20-04-focal-fossa-linux
https://linuxize.com/post/how-to-install-pip-on-ubuntu-20.04/
https://stackoverflow.com/questions/4340873/how-do-you-switch-between-python-2-and-3-and-vice-versa
Uma instalação local do NSO descompacta e prepara seu sistema para executar o NSO, mas na verdade não o inicializa. Uma instalação local permite que o engenheiro crie uma "instância" NSO vinculada a um projeto, o que ainda não foi feito.
Um dos scripts incluídos na instalação do NSO é o ncs-setup, que torna muito fácil criar instâncias do NSO a partir de uma instalação local. Você pode consultar o –help para obter todos os detalhes, mas as duas opções que precisamos saber são:
–dest define o diretório onde você deseja configurar o NSO (se o diretório não existir, ele será criado)
–package define os NEDs que você deseja que esta instância NSO tenha instalado. Você pode especificar essa opção várias vezes.
1. Vá em frente e execute este comando para configurar uma instância NSO no diretório atual com o NED padtec-spvlhb-nc.
Neste ponto, os requisitos são:
Ter acesso aos modelos do device ConfD e disponibilizá-los no ambiente do NSO
http://172.16.1.150/artifactory/build/sandbox.erlang.superviser/<BUILD-ID>/models-<DATE>-<BUILD-ID>*.tar.gz
Ter um device ConfD ativo (exemplo SPVL 172.30.0.175)
Execute os seguintes passos para rodar manualmente a aplicação e o ConfD.
superviser-<DATE>-<BUILD-ID>*.tar.gz
versão 7.4
Você desejará usar o nome da pasta NED em **${NCS_DIR}/packages/neds ** para a versão mais recente do NED instalada para a plataforma de destino. Você pode usar a guia completa depois de começar a digitar um caminho (ou apenas copiar e colar, embora verifique se os números da versão NED abaixo correspondem aos que estão atualmente na sandbox para evitar um erro de sintaxe):
Verifique o xml de metadados. O ned-id gerado é padtec-spvlhb-nc-1.0 e estará disponível para instanciar devices quando o NSO for iniciado.
2. Se você verificar o diretório nso-instance agora, verá que vários novos arquivos e pastas foram criados. Não vamos passar por todos eles em detalhes agora, mas alguns são úteis para conhecer.
ncs.conf é o arquivo de configuração do aplicativo NSO. Usado para personalizar aspectos da instância NSO (alterar portas, habilitar / desabilitar recursos, etc.). Os padrões geralmente são perfeitos para projetos como este.
packages/ é o diretório que possui links simbólicos para os NEDs que referenciamos nos argumentos –package na configuração.
logs/ é o diretório que contém todos os logs do NSO. Este diretório é útil para solucionar problemas.
3. Agora você precisa "iniciar" sua instância NSO. Navegue até o diretório nso-instance e digite o comando ncs. A execução levará alguns segundos e você não obterá nenhuma saída explícita, a menos que haja um problema.
4. Você pode verificar se o NSO está sendo executado usando o comando ncs –status | grep status, que tem uma grande quantidade de informações, então usamos grep apenas para pesquisar o status:
Agora que você tem uma instância local do NSO criada e em execução, precisa de mais algumas coisas antes de começar a automatizar:
Com o NSO em execução, agora você precisa adicionar seus dispositivos ao seu inventário. Isso permite que o NSO leia e grave dados. NSO usa grupos de autenticação para configurar credenciais de acesso ao dispositivo. Você configurará um grupo de autenticação simples para sua rede.
1. Insira sua instância NSO com o comando admin ncs_cli -C -u. Este comando possui várias opções. Este exemplo usa -C para especificar uma interface de linha de comando "estilo Cisco" (o padrão é um estilo Juniper) e -u admin para fazer login como o usuário "admin".
Nota:
Você pode emitir o comando ncs_cli -C -u admin de qualquer lugar no devbox quando o NSO estiver em execução, não apenas no diretório nso-instance. Este é o comando mais comumente usado que você usará com o NSO.
2. Entre no "modo de configuração" com o comando config.
3. Você configurará um novo grupo de autenticação chamado labadmin. Este grupo usará uma combinação de nome de usuário/senha padrão para dispositivos, com uma senha secundária de Padtec. Use os seguintes comandos:
4. Inserir esta configuração no NSO a "prepara", mas a configuração não é enviada ao sistema até que você use o comando commit. Antes de fazer isso, volte ao início do modo de configuração e revise a configuração atualmente preparada com show config.
Esta é uma maneira conveniente de ver qual configuração está pronta para ser confirmada antes de finalizá-la. Observe que o NSO usa um modelo de criptografia local para armazenar as credenciais em seu banco de dados.
Agora commit a configuração para efetuar as alterações.
Com o seu authgroup configurado (ou não), vamos prosseguir e adicionar seus dispositivos ao inventário. Para adicionar um dispositivo, você precisará das seguintes informações:
Neste exercício, você percorrerá a adição do primeiro dispositivo passo a passo e, em seguida, adicionará em massa o restante deles.
1. Permaneça no modo de configuração em NSO dentro do ncs_cli.
2. Adicione my-device-175 usando esta informação:
Você desativará a verificação da chave do host SSH (em sistemas de produção, você pode configurar a chave do host ou apenas "pesquise" para aprender)
3. Insira a seguinte configuração no NSO. Sinta-se à vontade para copiar e colar ou usar o preenchimento de tabulação:
4. Agora commit a configuração para o NSO.
5. Verifique se você ainda está no contexto CLI para o dispositivo. Você saberá disso pelo prompt (my-device-175) ou verificando com pwd:
6. Use o comando de conexão para determinar se você pode se conectar ao dispositivo com NSO.
A saída mostra que você está bloqueado no momento. O modo padrão do NSO para dispositivos é um estado bloqueado que impede o NSO de manipular um dispositivo antes que o administrador da rede esteja pronto. Essa habilidade também pode ser usada para desativar um dispositivo que está atualmente em manutenção para evitar que o NSO atue sobre ele.
7. Desbloqueie o dispositivo alterando seu estado de administrador e confirme a alteração.
8. Agora tente se conectar novamente.
Agora o NSO pode se conectar com sucesso à rede, mas não "aprendeu" a configuração de rede atual implantada nos dispositivos. Vamos consertar isso.
1. Verifique se não há nenhuma configuração de nível de dispositivo real dentro do NSO ainda olhando para um dispositivo com o comando show:
2. O comando NSO sync-from permite que os dispositivos de rede "aprendam" a configuração atual.
Certifique-se de NÃO inserir device sync-to por engano. O NSO tentará sobrescrever a configuração nos dispositivos com a configuração "em branco" que o NSO tem atualmente para os dispositivos. Isso seria ruim aqui (embora haja situações em que você pode querer fazer isso).
3. Verifique a configuração de execução do NSO dos dispositivos novamente.
https://developer.cisco.com/learning/lab/learn-nso-the-easy-way/step/1
https://developer.cisco.com/learning/lab/learn-nso-the-easy-way/step/2
https://developer.cisco.com/learning/lab/learn-nso-the-easy-way/step/3
https://developer.cisco.com/learning/lab/learn-nso-the-easy-way/step/6
Exercício: device-groups
https://developer.cisco.com/learning/lab/learn-nso-the-easy-way/step/9
O "S" em NSO significa serviços. O Network Services Orchestrator tem um mecanismo de configuração de serviço muito poderoso. Os serviços NSO são usados para criar instâncias de serviços para implantar em sua rede. Você pode definir qualquer conjunto arbitrário de modelos de configuração e um conjunto de variáveis para conectar a esses modelos que são aplicados a um ou mais dispositivos de rede. A NSO também controla esses serviços, de modo que, se você remover essas instâncias de serviço, ele apenas removerá ou atualizará a configuração relacionada ao serviço e não qualquer coisa extra. Uma instância de serviço pode ser um cliente, um locatário, um id de site ou qualquer coisa que você quiser.
Os serviços também permitem que você exponha a funcionalidade da rede de uma forma abstrata para outras equipes de rede ou outras partes interessadas.
Vamos vê-lo em ação e depois voltar um pouco à teoria.
NSO usa um sistema de gerenciamento de pacote embutido para lidar com NEDs e pacotes personalizados, como pacotes de serviço. Os pacotes de serviço são uma coleção de arquivos e pastas estruturados que o NSO carrega no aplicativo para estender o NSO com novas funcionalidades.
Uma ferramenta CLI bash integrada chamada ncs-make-package gera automaticamente uma estrutura de esqueleto de arquivos e pastas para a criação de um pacote de serviço. Você vai começar com isso.
1. Não inicie o NSO CLI ainda. Em vez disso, mude para o diretório nso-instance/packages (é onde o NSO procura por novos pacotes.) E primeiro olhe todas as opções disponíveis usando o comando ncs-make-package -h. Em seguida, crie um esqueleto de serviço usando o comando ncs-make-package –service-skeleton template loopback-service.
2. Use o comando tree para ver a estrutura da pasta.
Os principais arquivos que você editará são loopback-service/src/yang/loopback-service.yang e loopback-service/templates/loopback-service-template.xml. Os serviços também podem codificar a lógica, mas neste exemplo simples, você usará apenas os recursos mais básicos.
OUTPUT:
3. Visualize o conteúdo de loopback-service/src/yang/loopback-service.yang e loopback-service/templates/loopback-service-template.xml.
Os arquivos criados já possuem alguns detalhes preenchidos a título de sugestão.
O arquivo XML é a configuração que o NSO usará para aplicar aos seus dispositivos de rede. Você conecta os nomes das variáveis de seu arquivo Yang aqui para ter uma configuração dinâmica. Você também pode usar vários arquivos Yang (mais frequentemente com lógica de código Python ou Java extra).
A parte importante do arquivo XML que você usará está entre as tags <config> e </config>, que agora tem um comentário XML.
NSO usa Yang para definir os nomes de variáveis e restrições nessas variáveis (como a variável é um inteiro, endereço IP ou string). Isso pode ser confuso para alguns novos usuários, já que muitas pessoas costumam associar Yang a NETCONF ou RESTCONF. Neste caso, Yang está sendo usado para modelar os dados que estão sendo inseridos no serviço, e não está sendo usado especificamente em conjunto com NETCONF ou RESTCONF
A NSO usa XML nos bastidores para representar a configuração de cada dispositivo. Se você não está familiarizado com XML, não se preocupe, o NSO permite que você exiba a configuração nativa em XML usando ncs_cli, que você pode copiar e colar.
Agora você precisa obter algum XML para conectar a esse arquivo de modelo.
1. Abra o NSO CLI e entre no modo de configuração. Vamos obter a configuração do device my-device-175 primeiro. Crie um loopback com os seguintes comandos, mas não confirme:
2. Agora visualize a configuração pendente e, em seguida, visualize a saída de simulação em formato XML:
OUTPUT:
3. Agora que você tem a saída XML, deseja copiar e colar apenas os snippet entre as tags de configuração (apenas a parte da interface):
4. Fora do NSO, em um editor de texto, edite loopback-service/templates/loopback-service-template.xml e adicione o snippet XML nas tags <config>
:
Edite:
5. Agora adicione as variáveis ao modelo de configuração, respeitando os os tipos:
6. Salve o arquivo e saia da sessão de configuração, descartando as alterações.
7. Em seu terminal bash, navegue até o diretório loopback-service/src/ e emita o comando make para compilar o modelo de dados Yang.
Edite o Makefile para informar o path dos modelos:
Editar o Makefile:
Compilar:
8. Agora que o XML está atualizado e o Yang compilado, você pode carregar o novo pacote de serviço. Volte para a NSO CLI e emita os seguintes comandos:
| packages reload is used for reloading all the packages when there is a NED update or a new service package. There also is an optional argument force which sometimes is needed to migrate data models. |
https://developer.cisco.com/learning/lab/learn-nso-the-easy-way/step/10
1. No NSO CLI, entre no modo de configuração e use o ponto de interrogação para descobrir a nova opção CLI do pacote recém-carregado:
2. Use o novo comando loopback-service para criar uma instância de serviço com um nome chamado test e preencher:
Brinque com o '?' para ver as opções disponíveis. Observe também que, como o NSO conhece os tipos de dados para as variáveis do modelo Yang, ele irá sugerir que tipo de entrada fornecer e validar se está em conformidade com esses tipos de dados antes de salvar os valores. Já que você vinculou a variável de device ao CDB, ele irá sugerir automaticamente a partir de '?' da lista de dispositivos.
3. Visualize a configuração do serviço a ser enviada ao dispositivo e confirme a alteração com os seguintes comandos:
OUTPUT:
Verifique.
Vamos supor que alguém vá até seu dispositivo de rede e faça uma alteração. Essa alteração é uma alteração out-of-band que a NSO desconhece e que está em conflito com o seu serviço. O que você faz?
1. Saia do NSO e volte para o terminal bash.
2. Verifique a config de loopback no device:
Neste passo, vamos utilizar o netconf-console para ler e modificar a config corrente de loopback diretamente no dispositivo.
Nota: foi necessário instalar libxml2-utils e a lib python-paramiko. Pule os passos se o ambiente já estiver configurado.
Se não estiver no virtualenv:
Verificando a config de loopback:
OUTPUT:
3. Crie um arquivo de config para modificar o valor de loopback-mode:
Adicione e salve o arquivo loopback-mode-none.xml:
Agora, use o netconf-console para modificar o valor do loopback-mode:
OUTPUT:
Verifique utilizando o netconf-console.
Saia do virtualenv.
4. Entre novamente no NSO CLI e veja o entendimento do NSO sobre o dispositivo. Ele ainda não está ciente da mudança; o Loopback ainda está presente no CDB do dispositivo:
5. Visualize e execute sync-from para que o NSO possa reaprender a configuração do dispositivo atualizado.
OUTPUT:
6. Entre no modo de configuração e veja uma simulação do serviço sendo reimplantado para ver o Loopback ser adicionado novamente. Em seguida, reimplante-o.
OUTPUT:
7. Saia do NSO CLI e verifique se o loopback está presente agora, usando o netconf-console para ler a config do device.
Os serviços geralmente incluem muita lógica extra, incluindo (incluindo código Java/Python):
Parabéns! Você concluiu "Learn NSO the Easy Way by Padtec"!