Adding new VLANs to multiple switches

Enter username and password to use with Telnet. Loop for range of IP addresses and inside loop again and create new VLAN and name the VLAN. This script connects to two switches using Telnet and adds new configuration.

#!usr/bin/env python

import getpass
import sys
import telnetlib
import time

user = raw_input(“Enter your telnet username: “)
password = getpass.getpass()

print (user, password)

for i in range (1,3):
HOST = ‘192.168.1.’ + str(i)
print (HOST)
tn = telnetlib.Telnet(HOST)

tn.read_until(‘Login: ‘)
tn.write(user + ‘\n’)
if password:
tn.read_until(‘Password: ‘)
tn.write(password + ‘\n’)

time.sleep(5)
tn.write(‘enable’ + ‘\n’)
tn.write(‘conf t’ + ‘\n’)

for v in range (400,404):
print (‘vlan create ‘ + str(v) + ‘ type port-mstprstp 0’ + ‘\n’)
tn.write(‘vlan create ‘ + str(v) + ‘ type port-mstprstp 0’ + ‘\n’)
time.sleep(2)
print (‘vlan name ‘ + str(v) + ‘ VLAN_’ +str(v) + ‘\n’)
tn.write(‘vlan name ‘ + str(v) + ‘ VLAN_’ +str(v) + ‘\n’)

tn.write(‘end’ + ‘\n’)
tn.write(‘exit’ + ‘\n’)

print (“Good bye!”)

Collecting Troubleshooting Logs

Using a list of switch IP addresses, prompt for username and password and capture troubleshooting information for each switch:

import paramiko
import time
import getpass

username = raw_input(‘Enter your username: ‘)
password = getpass.getpass()

f = open (‘myswitches.txt’)

for line in f:
ip_address = line.strip()
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip_address,username=username,password=password)

print ‘Successful connection’, ip_address

remote_connection = ssh_client.invoke_shell()

print ‘Collecting troubeshooting log file of ‘ + ip_address

remote_connection.send(‘show clock\n’)
remote_connection.send(‘enable\n’)
remote_connection.send(‘terminal more disable\n’)
remote_connection.send(‘show run\n’)
remote_connection.send(‘terminal more enable\n’)

time.sleep(20)
readoutput = remote_connection.recv(655350)
saveoutput = open(‘Log file of ‘ + ip_address, ‘w’)

print ‘Saving to file called Log file of ‘ + ip_address + ‘\n’

saveoutput.write(readoutput)
saveoutput.write(‘\n’)
saveoutput.close

ssh_client.close()

Shell output..

$ python sshclient.py

Enter your username: rwa

Password:

Successful connection 192.168.1.1

Collecting troubeshooting log file of 192.168.1.1

Saving to file called Log file of 192.168.1.1

Successful connection 192.168.1.2

Collecting troubeshooting log file of 192.168.1.2

Saving to file called Log file of 192.168.1.2

Sample of Log file of 192.168.1.1…

core1:1>enable

core1:1#terminal more disable

core1:1#show run

Preparing to Display Configuration…
#
# Fri Apr 20 18:40:19 2018 UTC
# box type             : VSP-8284XSQ
# software version     : 7.0.0.0_B885
# cli mode             : ECLI
#

Content of myswitches.txt:

192.168.1.1
192.168.1.2

 

Telnet Python

Script which will telnet to a switch and create a new VLAN:

import getpass
import sys
import telnetlib

HOST = ‘192.168.1.1’
user = raw_input(‘Enter your telnet username: ‘)
password = getpass.getpass()

tn = telnetlib.Telnet(HOST)

tn.read_until(‘Login: ‘)
tn.write(user + ‘\n’)
if password:
tn.read_until(‘Password: ‘)
tn.write(password + ‘\n’)

tn.write(‘enable\n’)
tn.write(‘conf t\n’)
tn.write(‘vlan create 101 type port-mstprstp 0\n’)
tn.write(‘exit\n’)
tn.write(‘exit\n’)

 

Paramiko (SSHv2) Python

Login to a switch with SSHv2 and run a command ‘show clock’:

Paramiko SSHv2 Login

>>> import paramiko
>>> import time
>>> ip_address = ‘192.168.1.1’
>>> username = ‘rwa’
>>> password = ‘rwa’
>>> ssh_client = paramiko.SSHClient()
>>> ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh_client.connect(hostname=ip_address,username=username,password=password)
>>> print “Successful connection”, ip_address
Successful connection 192.168.1.1
>>> remote_connection = ssh_client.invoke_shell()
>>> remote_connection.send(“show clock\n”)
11
>>> output = remote_connection.recv(65535)
>>> print output

>>> ssh_client.close()

 

EXTREME NETWORKS VOSS COMMAND LINE INTERFACE

core1:1>show clock

Fri Apr 20 11:24:39 2018 UTC

Note: This could be adapted to SSH to a remote switch and capture the running configuration and store in a filename by redirecting the output of the python script to a local file eg python showrun.py > showrun.cfg.

remote_connection.send(‘terminal more disable\n’)
remote_connection.send(‘enable\n’)
remote_connection.send(‘show run\n’)
remote_connection.send(‘terminal more enable\n’)

Found problems with capturing the output to a file so I changed the code and works better…

import paramiko
import time
import sys
ip_address = ‘192.168.1.1’
username = ‘rwa’
password = ‘rwa’
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip_address,username=username,password=password)
remote_connection = ssh_client.invoke_shell()
remote_connection.send(‘show clock\n’)
remote_connection.send(‘enable\n’)
remote_connection.send(‘terminal more disable\n’)
remote_connection.send(‘show run\n’)
remote_connection.send(‘terminal more enable\n’)

time.sleep(20)
readoutput = remote_connection.recv(655350)
saveoutput = open(‘Log file’, ‘w’)
print ‘Saving to file called “Log file”…’

saveoutput.write(readoutput)
saveoutput.write(‘\n’)
saveoutput.close

ssh_client.close()

Enabling interfaces

Create a .yml data file (data.yml) with variables and lists:


host_ports:
– 1/1
– 1/2
– 1/3
Create a .j2 file (noshut.j2) which will reference the data from the data file:

{%- for iface in host_ports %}
interface gigabitethernet {{ iface }}
no shutdown
exit
{%- endfor %}

Merge data and template together and output to a file:

python render.py > output.conf

Render.py:

from jinja2 import Template
import yaml
import sys
from glob import glob

data_fname = sys.argv[1:1] or glob(‘*.yml’)[0]
template_fname = sys.argv[2:2] or glob(‘*.j2’)[0]

data = yaml.load(open(data_fname).read())
template = Template(open(template_fname).read())
print template.render(data)

Adding data to a variable called myvars (native python structure aka dictionary):

import yaml

myvars = yaml.load(open(‘data.yml’).read())

from pprint import pprint

pprint(myvars)

{‘host_ports’: [‘1/1’, ‘1/2’, ‘1/3’]}

 

https://neckercube.com/index.php/2018/04/

 

Jinja2 Templates

Template (filename port_vlan.j2):

interface vlan {{ vlan_name }}
ip address {{ ip }} {{ mask }}
exit

Python code to build configuration which adds an IP address to a VLAN…

python

import jinja2
import os
loader = jinja2.FileSystemLoader(os.getcwd())
loader
jenv = jinja2.Environment(loader=loader, trim_blocks=True, lstrip_blocks=True)
template = jenv.get_template(‘port_vlan.j2′)
template
print (template.render(vlan_name=10, ip=’10.10.10.1′, mask=’255.255.255.0’))

Output:

interface vlan 10
ip address 10.10.10.1 255.255.255.0
exit

 

Extreme Networks GTAC

Extreme Networks GTAC Knowledge Videos:

https://www.youtube.com/channel/UCi7dH5JchA6JrDVzqEfckqA

https://extremeportal.force.com/ExtrSearch?q=#q=emc&t=Youtube&sort=relevancy&f:@extremesource=%5BCommunity%5D

GTAC Knowledge Home:

https://gtacknowledge.extremenetworks.com/

https://gtacknowledge.extremenetworks.com/articles/How_To/How-to-contact-Extreme-Networks-Global-Technical-Assistance-Center-GTAC

 

Initial VMWare configuration of EMC

After the VM has been installed login with the username of root and a password of password in the VM console screen.

Issue the commands dnetconfig in order to configure EMC setup information.

Enter the hostname for the appliance [ExtremeManagement]:

Enter the IP address for ExtremeManagement:

Enter the IP netmask [255.255.255.0]:

Enter the gateway address:

Enter the IP address of the name server (Optional):

Enter the IP address of an alternate name server (Optional):

Enter the domain name for ExtremeManagement (Required):

Do you want to use NIS (y/n) [n]?

Issue the command dateconfig to configure an NTP server for use with ExtremeManagement.

Do you want to use NTP (y/n) [n]? y

Please enter an NTP Server IP Address (Required):

Would you like to add another server (y/n) [n]?

Restart the server with the command reboot.

Connect to the Extreme Management Center web client with http port 8080 or https port 8443.

Enter command passwd if you wish to change the root password at any time.