pyMultiChange rewrite and Netlib

I re-wrote ' pyMultiChange ' around my new library for connecting and managing devices. Before I was using 'pyRouterLib', but now I've deprecated that library with the creation of my new library ' netlib '.

Netlib is super easy to use and is more complete than pyRouterLib was. Utilizing Netlib, allowed me to cut the code in pyMultiChange by almost half and netlib is more flexible and user friendly.

To use netlib, first clone the git repo and install the necessary python libraries:
git clone https://github.com/jtdub/netlib.git
cd netlib
sudo pip install -r requirements.txt
sudo python setup.py install

After that, you're ready to go. Accessing network devices via telnet and ssh are currently supported. Both have a very similar API syntax, that is layed out in the README on github.

Here is an example of how to use the ssh module:
$ python
>>> from netlib.conn_type import SSH
>>> conn = SSH('core1a', username='******', password='******')
>>> conn.connect()
'\r\ncore1a.sat>'
>>> conn.set_enable(enable_password='******')
'\r\ncore1a.sat#'
>>> conn.disable_paging()
>>> print(conn.command('show version'))
show version
Cisco IOS Software, C3750 Software (C3750-IPSERVICESK9-M), Version 12.2(55)SE9, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2014 by Cisco Systems, Inc.
Compiled Mon 03-Mar-14 22:45 by prod_rel_team
Image text-base: 0x01000000, data-base: 0x02F00000

ROM: Bootstrap program is C3750 boot loader
BOOTLDR: C3750 Boot Loader (C3750-HBOOT-M) Version 12.2(44)SE5, RELEASE SOFTWARE (fc1)

core1a.sat uptime is 9 weeks, 5 days, 2 hours, 17 minutes
System returned to ROM by power-on
System restarted at 20:25:45 CST Fri Jun 19 2015
System image file is "flash:c3750-ipservicesk9-mz.122-55.SE9.bin"


This product contains cryptographic features and is subject to United
States and local country laws governing import, export, transfer and
use. Delivery of Cisco cryptographic products does not imply
third-party authority to import, export, distribute or use encryption.
Importers, exporters, distributors and users are responsible for
compliance with U.S. and local country laws. By using this product you
agree to comply with applicable laws and regulations. If you are unable
to comply with U.S. and local laws, return this product immediately.

A summary of U.S. laws governing Cisco cryptographic products may be found at:
http://www.cisco.com/wwl/export/crypto/tool/stqrg.html

If you require further assistance please contact us by sending email to
[email protected]

cisco WS-C3750-24TS (PowerPC405) processor (revision L0) with 131072K bytes of memory.
Processor board ID CAT1042ZGKL
Last reset from power-on
6 Virtual Ethernet interfaces
24 FastEthernet interfaces
2 Gigabit Ethernet interfaces
The password-recovery mechanism is enabled.

512K bytes of flash-simulated non-volatile configuration memory.
Base ethernet MAC Address : 00:19:E7:5F:8F:80
Motherboard assembly number : 73-9677-10
Power supply part number : 341-0034-01
Motherboard serial number : CAT10415NLR
Power supply serial number : DTH1037117A
Model revision number : L0
Motherboard revision number : A0
Model number : WS-C3750-24TS-S
System serial number : CAT1042ZGKL
Top Assembly Part Number : 800-25857-02
Top Assembly Revision Number : D0
Version ID : V05
CLEI Code Number : CNMV100CRE
Hardware Board Revision Number : 0x01


Switch Ports Model SW Version SW Image
------ ----- ----- ---------- ----------
* 1 26 WS-C3750-24TS 12.2(55)SE9 C3750-IPSERVICESK9-M


Configuration register is 0xF

core1a.sat#
>>> conn.close()

How easy is that? I'm stoked about netlib. It should make rapidly creating code for interact with network devices pretty trivial. I'm experimenting with SNMP functionality, though it's not ready for prime time.

I also have a method for storing and reading user credentials, so that they don't have to be stored in the script, called every time a script is run, or entered manually for every device that is accessed.

Let me know what you think, add feature requests, or do a pull request. :)