NSO Lab 4: Configuring Device using NSO CLI Mode

Configuring Device using NSO CLI Mode

In Lab 4: Configuring Device using NSO CLI Mode, participants typically delve into the process of configuring network devices within the Cisco Network Services Orchestrator (NSO) environment using the Command Line Interface (CLI) mode. This lab involves tasks such as accessing the NSO CLI, defining device configurations, and utilizing NSO CLI commands to push configuration changes to the network devices. Participants may explore features like transaction management to ensure consistency and rollback options in case of errors. The lab aims to provide hands-on experience in leveraging NSO's CLI mode for efficient and automated device configuration, showcasing the power of NSO in orchestrating network elements. Successful completion of Lab 4 equips participants with practical skills in configuring devices through the NSO CLI, an essential aspect of network automation and orchestration.

Lab:

Task 1: Use NSO CLI to Configure simple IOS cmd:

This Before beginning this lab on your workstation, install a standard set of development applications, tools, and interfaces.

Introduction

In this task we are going to:

View the data of a device in XML, JSON and XPATH.

Save the data to a file.

Configure a device using CLI commands.

Rollback the change.

Step 1: Login into NSO CLI mode to view device configuration

Type following commands on UNIX terminal:

rst@rst-nso:~$ cd nso-5.3/packages/neds/nso-instance/
rst@rst-nso:~/nso-5.3/packages/neds/nso-instance$ source $HOME/nso-5.3/ncsrc
rst@rst-nso:~/nso-5.3/packages/neds/nso-instance$ ncs\_cli -C -u admin

NSO stores a snapshot of each device configuration, which is updated after each sync-from.

You can view the configuration of a device using the following command

(outside config mode in the NCS CLI)

Step 2: Show running config using NSO CLI:

Type following command in NSO CLI mode:

admin@ncs# show running-config devices device RSTXR-1 config
devices device RSTXR-1
    config
    admin
    username test
    group root-system
    secret 5 $1$9.2E$ZfCsCgp9Rvc9flNvGN1Yc/
    exit
    exit-admin-config
    !
    hostname RSTXR-1
    service timestamps debug datetime msec
    service timestamps log datetime msec
    domain lookup disable
    domain name rstforum.net
    netconf agent tty
    exit
    netconf-yang agent
    ssh
    exit
    telnet vrf default ipv4 server max-servers 10
    username cisco secret 5 $1$erBJ$6XP1BjhA4qXUvV186rlzO1
    exit
    line console
    exec-timeout 0 0
    absolute-timeout 0
    session-timeout 0
    exit
    line default
    exec-timeout 0 0
    absolute-timeout 0
    session-timeout 0
    exit
    line template vty
    timestamp
    exec-timeout 720 0
    exit
    vty-pool default 0 50
    control-plane
    management-plane
    inband
        interface all
        allow all
        exit
    ssh server session-limit 10
    ssh server v2
    ssh server vrf default
    interface MgmtEth 0/0/CPU0/0
    ipv4 address 10.0.0.1 255.255.255.0
    no shutdown
    exit
    interface GigabitEthernet 0/0/0/0
    shutdown       

**Step 3:**Type following commands in NSO CLI mode to view interface configuration:

admin@ncs# show running-config devices device RSTXR-1 config interface
devices device RSTXR-1
 config
  interface MgmtEth 0/0/CPU0/0
   ipv4 address 10.0.0.1 255.255.255.0
   no shutdown
  exit
  interface GigabitEthernet 0/0/0/0
   shutdown
  exit
  interface GigabitEthernet 0/0/0/1
   shutdown
  exit
  interface GigabitEthernet 0/0/0/2
   shutdown
  exit
  interface GigabitEthernet 0/0/0/3
   shutdown
  exit
!

We can view the same information in multiple formats, such as XML, CLI, and others.

Step 4: Type following commands in NSO CLI mode to view interface configuration in XML Format:

admin@ncs# show running-config devices device RSTXR-1 config interface | display xml

<config xmlns="http://tail-f.com/ns/config/1.0">
    <devices xmlns="http://tail-f.com/ns/ncs">
    <device>
    <name>RSTXR-1</name>
        <config>
        <interface xmlns="http://tail-f.com/ned/cisco-ios-xr">
        <MgmtEth>
            <id>0/0/CPU0/0</id>
            <ipv4>
            <address>
                <ip>10.0.0.1</ip>
                <mask>255.255.255.0</mask>
            </address>
            </ipv4>
        </MgmtEth>
        <GigabitEthernet>
            <id>0/0/0/0</id>
            <shutdown/>
        </GigabitEthernet>
        <GigabitEthernet>
            <id>0/0/0/1</id>
            <shutdown/>
        </GigabitEthernet>
        <GigabitEthernet>
            <id>0/0/0/2</id>
            <shutdown/>
        </GigabitEthernet>
        <GigabitEthernet>
            <id>0/0/0/3</id>
            <shutdown/>
        </GigabitEthernet>
        </interface>
        </config>
    </device>
    </devices>
</config>    

Let us now view the same information in JSON formats

Step 5: Type following commands in NSO CLI mode to view interface configuration in json

admin@ncs# show running-config devices device RSTXR-1 config interface | display json

{
    "data": {
    "tailf-ncs:devices": {
        "device": \[
        {
            "name": "RSTXR-1",
            "config": {
            "tailf-ned-cisco-ios-xr:interface": {
                "MgmtEth": \[
                {
                    "id": "0/0/CPU0/0",
                    "ipv4": {
                    "address": {
                        "ip": "10.0.0.1",
                        "mask": "255.255.255.0"
                    }
                    }
                }
                \],
                "GigabitEthernet": \[
                {
                    "id": "0/0/0/0",
                    "shutdown": \[null\]
                },
                {
                    "id": "0/0/0/1",
                    "shutdown": \[null\]
                },
                {
                    "id": "0/0/0/2",
                    "shutdown": \[null\]
                },
                {
                    "id": "0/0/0/3",
                    "shutdown": \[null\]
                },

Let us view the same information with its xpath:

**Step 6:**Type following commands in NSO CLI mode to view interface configuration with xpath

admin@ncs# show running-config devices device RSTXR-1 config interface | display xpath
/devices/device\[name='RSTXR-1'\]/config/cisco-ios-xr:interface/MgmtEth\[id='0/0/CPU0/0'\]/ipv4/address/ip 10.0.0.1
/devices/device\[name='RSTXR-1'\]/config/cisco-ios-xr:interface/MgmtEth\[id='0/0/CPU0/0'\]/ipv4/address/mask 255.255.255.0
/devices/device\[name='RSTXR-1'\]/config/cisco-ios-xr:interface/GigabitEthernet\[id='0/0/0/0'\]/shutdown
/devices/device\[name='RSTXR-1'\]/config/cisco-ios-xr:interface/GigabitEthernet\[id='0/0/0/1'\]/shutdown
/devices/device\[name='RSTXR-1'\]/config/cisco-ios-xr:interface/GigabitEthernet\[id='0/0/0/2'\]/shutdown
/devices/device\[name='RSTXR-1'\]/config/cisco-ios-xr:interface/GigabitEthernet\[id='0/0/0/3'\]/shutdown  

Using the NSO CLI for displaying the running-config of existing CLI devices in a structured way is very useful. Now let us save the output to a file for later reference.

**Step 7:**Type the following commands in NSO CLI mode to Save output to a file:

show running-config devices device RSTXR-1 config interface | display xml | save rstxr1.xml

The file is then saved to the location where you started your NSO CLI. From that working directory, see the rstxr1.xml file in the following Home directory: /home/rst/nso-5.3/package/neds/nso-instance$

rst@rst-nso:~/nso-5.3/packages/neds/nso-instance$ ls rstxr1.xml
rstxr1.xml
rst@rst-nso:~/nso-5.3/packages/neds/nso-instance$

A simple way to view the output of the file is to use the cat rstxr1.xml bash command:

rst@rst-nso:~/nso-5.3/packages/neds/nso-instance$ cat rstxr1.xml

<config xmlns="http://tail-f.com/ns/config/1.0">
    <devices xmlns="http://tail-f.com/ns/ncs">
    <device>
    <name>RSTXR-1</name>
        <config>
        <interface xmlns="http://tail-f.com/ned/cisco-ios-xr">
        <MgmtEth>
            <id>0/0/CPU0/0</id>
            <ipv4>
            <address>
                <ip>10.0.0.1</ip>
                <mask>255.255.255.0</mask>
            </address>
            </ipv4>
        </MgmtEth>
        <GigabitEthernet>
            <id>0/0/0/0</id>
            <shutdown/>
        </GigabitEthernet>
        <GigabitEthernet>
            <id>0/0/0/1</id>
            <shutdown/>
        </GigabitEthernet>
        <GigabitEthernet>
            <id>0/0/0/2</id>
            <shutdown/>
        </GigabitEthernet>
        <GigabitEthernet>
            <id>0/0/0/3</id>
            <shutdown/>
        </interface>
        </config>
    </device>
    </devices>
</config>....    

NSO allows us to configure IOS devices using the CLI in an IOS style. You can use ? to navigate and typeconfiguration commands to devices.

Step 8: Configure IOS devices using the NSO CLI mode:

Note: We have to issue a namespace prefix before configuring the top of a configuration hierarchy. Log into NSO from the Linux Bash terminal, and enter config mode if not already. Make sure your devices are state admin-state unlocked, if for some reason you locked them before. Pick a device and enter into that device tree like below and check out the config options for that device and then configure an interface description.

ncs\_cli -C -u admin 
conf 
devices device RSTXR-1 
config 

Note: We enter the config mode twice: Once to enter the NSO configure mode, and a second time after you have navigated to a device to enter that particular device’s configuration mode.

For example, to configure ip address on an interface, add the namespace prefix for the NED and see the options:

admin@ncs(config-config)# interface ?
Possible completions:
  ATM               ATM Network Interface(s)
  BVI               Bridge-Group Virtual Interface
  Bundle-Ether      Aggregated Ethernet interface(s)
  Bundle-POS        Aggregated POS interface(s)
  CEM               Circuit Emulation interface(s)
  CSI               Cross SDR interface(s) | short name is csi
  FastEthernet      FastEthernet/IEEE 802.3 interface(s)
  FiftyGigE         FiftyGigEthernet
  FortyGigE         FortyGigEthernet
  FourHundredGigE   FourHundredGigEthernet
  GCC0              OTN GCC0 interface(s) | short name is G0
  GigabitEthernet   GigabitEthernet/IEEE 802.3 interface(s)
  HundredGigE       HundredGigEthernet
  Loopback          Loopback interface
  MgmtEth           Ethernet/IEEE 802.3 interface(s)
  Multilink         Multilink network interface(s)
  Null              Null interface | short name is Nu
  POS               Packet over SONET/SDH network interface(s)
  PTP               FastEthernet/IEEE 802.3 interface(s) | short name is PTP
  PW-Ether          Pseudo-Wire Ethernet interface(s)
  Port-channel      Ethernet Channel of interfaces
  SRP               SRP interface(s)
  Serial            Serial network interface(s)
  TenGigE           TenGigabitEthernet/IEEE 802.3 interface(s)
  TwentyFiveGigE    TwentyFiveGigabitEthernet/IEEE 802.3 interface(s) |
                    short name is Tw
  TwoHundredGigE    TwoHundredGigEthernet
  Vlan              Iosxr Vlans
  nve               Network Virtualization Endpoint Interface(s)
  preconfigure      Specify a preconfig
  tunnel-ip         GRE/IPinIP Tunnel Interface(s)
  tunnel-ipsec      IPSec Tunnel interface(s)
  tunnel-mte        MPLS Traffic Engineering P2MP Tunnel interface(s)
  tunnel-te         MPLS Traffic Engineering Tunnel interface(s)
  tunnel-tp         MPLS Transport Protocol Tunnel interface

After exploring the options, make the following change,

admin@ncs(config-config)# interface GigabitEthernet 0/0/0/3
admin@ncs(config-if)# ipv4 address 222.222.222.222 /24
admin@ncs(config-if)# no shutdown
admin@ncs(config-if)# exit

Now we will take a look and see what commands NSO will send, outformating the change into native which is standard Cisco CLI syntax.

Step 9: Commit dry run:

admin@ncs(config-config)# commit dry-run outformat native
native {
    device {
        name RSTXR-1
        data interface GigabitEthernet 0/0/0/3
              ipv4 address 222.222.222.222/24
              no shutdown
             exit
    }
}

To configure the device (sending the commands to the device), you can then send:

commit

note: We can rollback the commit. This process is usually easiest to see in the NSO GUI.