networktocode/ntc-templates

Interface name issue - on switches

Closed this issue · 2 comments

ISSUE TYPE
  • Bug Report
TEMPLATE USING

cisco_ios_show_interfaces_status.textfsm
ntc-templates 2.0.0

SAMPLE COMMAND OUTPUT

{'10.10.9.244': [{'port': 'Gi0/0', 'name': '', 'status': 'connected', 'vlan': '1', 'duplex': 'a-full', 'speed': 'auto', 'type': 'RJ45', 'fc_mode': ''}, {'port': 'Gi0/1', 'name': '', 'status': 'connected', 'vlan': 'to', 'duplex': 'FTD7', 'speed': 'connected', 'type': '99 a-full auto RJ45', 'fc_mode': ''}, {'port': 'Gi0/2', 'name': 'MGMT-SYSLOG', 'status': 'connected', 'vlan': 'routed', 'duplex': 'a-full', 'speed': 'auto', 'type': 'RJ45', 'fc_mode': ''}, {'port': 'Gi0/3', 'name': '', 'status': 'disabled', 'vlan': '1', 'duplex': 'auto', 'speed': 'auto', 'type': 'RJ45', 'fc_mode': ''}, {'port': 'Gi1/0', 'name': 'Connected to INTER', 'status': 'connected', 'vlan': '99', 'duplex': 'a-full', 'speed': 'auto', 'type': 'RJ45', 'fc_mode': ''}, {'port': 'Gi1/1', 'name': '', 'status': 'disabled', 'vlan': '1', 'duplex': 'auto', 'speed': 'auto', 'type': 'RJ45', 'fc_mode': ''}, {'port': 'Gi1/2', 'name': '', 'status': 'disabled', 'vlan': '1', 'duplex': 'auto', 'speed': 'auto', 'type': 'RJ45', 'fc_mode': ''}, {'port': 'Gi1/3', 'name': '', 'status': 'disabled', 'vlan': '1', 'duplex': 'auto', 'speed': 'auto', 'type': 'RJ45', 'fc_mode': ''}, {'port': 'Po1', 'name': '', 'status': 'notconnect', 'vlan': '1', 'duplex': 'auto', 'speed': 'auto', 'type': '', 'fc_mode': ''}, {'port': 'Po2', 'name': '', 'status': 'notconnect', 'vlan': 'unassigned', 'duplex': 'auto', 'speed': 'auto', 'type': '', 'fc_mode': ''}]}

When My device have description "connected" - then it taking as status 👍

SUMMARY
STEPS TO REPRODUCE

Python3
output = net_connect.send_command("show interface status", use_textfsm=True)

import getpass
import csv
import netmiko
import paramiko
import pandas as pd
import numpy as np
import os.path
from argparse import ArgumentParser
from datetime import datetime
from netmiko.ssh_exception import AuthenticationException, NetMikoTimeoutException
import multiprocessing

def connect_to_dev(device, mp_queue):
dev_id = device['ip']
return_data = {}
try:
net_connect = netmiko.ConnectHandler(**device)
output = net_connect.send_command("terminal length 0\n")
#output = net_connect.send_command("show interface status", use_textfsm=True, textfsm_template = "cisco_ios_show_interfaces_status.textfsm")
output = net_connect.send_command("show interface status", use_textfsm=True)
return_data[dev_id] = output
except NetMikoTimeoutException:
print('TimeoutException : '+dev_id)
return_data[dev_id] = "error timeout"
mp_queue.put(return_data)
return
except AuthenticationException:
print('Authentication Exception : ' +dev_id)
return_data[dev_id] = "error authentication"
mp_queue.put(return_data)
return
print("Adding the result to the multiprocess queue")
mp_queue.put(return_data)

def main():

parser = ArgumentParser(description='Arguments for running oneLiner.py')
parser.add_argument('-c', '--csv', required=True, action='store', help='Location of CSV file')
args = parser.parse_args()
authenticate= True;

ssh_username = input("SSH username: ")
ssh_password = getpass.getpass('SSH Password: ')
device_map = {}
devices = []
with open(args.csv, 'r') as file:
    reader = csv.DictReader(file)
    for device_row in reader:
        device = {}
        device["ip"] = device_row['DeviceIP']
        device["username"] = ssh_username
        device["password"] = ssh_password
        device["device_type"] = "cisco_ios"
        devices.append(device)
        device_map[device_row['DeviceIP']] = device_row['Name']

mp_queue = multiprocessing.Queue()
processes = []

for device in devices:
    p = multiprocessing.Process(target=connect_to_dev, args=[device, mp_queue])
    print("Adding Process to the list")
    processes.append(p)
    p.start()

for p in processes:
    print("Joining the finished process to the main truck")
    p.join()

results = []
for p in processes:
    print("Moving the result from the queue to the results list")
    results.append(mp_queue.get())
for r in results:
    print(r)

if name == "main":
main()

EXPECTED RESULTS

{'port': 'Gi0/1', 'name': 'connected to FTD7', 'status': 'connected', 'vlan': '99', 'duplex': 'a-full', 'speed': 'auto', 'type': 'RJ45', 'fc_mode': ''},

ACTUAL RESULTS

{'port': 'Gi0/1', **'name': '', 'status': 'connected', 'vlan': 'to', 'duplex': 'FTD7', 'speed': 'connected', 'type': '99 a-full auto RJ45', 'fc_mode': ''},

Because the description has "connected" it taking as status - if the description have Caps "C" it taking as description

Please provide raw output

@hariram32
This was fixed in PR #1449

@jmcgill298