Parse, Audit, Query, Build, and Modify Cisco IOS-style configurations
Project description
==============
ciscoconfparse
==============
.. image:: https://travis-ci.org/mpenning/ciscoconfparse.png?branch=master
:target: https://travis-ci.org/mpenning/ciscoconfparse
:alt: Travis CI Status
.. image:: https://badge.fury.io/py/ciscoconfparse.png
:target: https://pypi.python.org/pypi/ciscoconfparse/
:alt: Version
.. image:: https://pypip.in/license/ciscoconfparse/badge.png
:target: https://pypi.python.org/pypi/ciscoconfparse/
:alt: License
.. image:: https://pypip.in/d/ciscoconfparse/badge.png
:target: https://pypi.python.org/pypi/ciscoconfparse
:alt: Downloads
.. contents::
.. _introduction:
Introduction: What is ciscoconfparse?
=====================================
ciscoconfparse is a Python_ library, which parses through Cisco IOS-style
(and other vendor) configurations. It can:
- Audit existing router / switch / firewall / wlc configurations
- Retrieve portions of the configuration
- Modify existing configurations
- Build new configurations
The library examines an IOS-style config and breaks it into a set of linked
parent / child relationships. You can perform complex queries about these
relationships.
.. image:: https://raw.githubusercontent.com/mpenning/ciscoconfparse/master/sphinx-doc/_static/ciscoconfparse_overview.png
:target: https://raw.githubusercontent.com/mpenning/ciscoconfparse/master/sphinx-doc/_static/ciscoconfparse_overview.png
:alt: CiscoConfParse Parent / Child relationships
Quotes
======
These are a few selected public mentions about CiscoConfParse; I usually try not to share private emails without asking, thus the quotes aren't long at this time.
|br|
|br|
.. raw:: html
<a href="https://github.com/mpenning/ciscoconfparse/issues/13#issuecomment-71340177"><img src="https://raw.githubusercontent.com/mpenning/ciscoconfparse/master/sphinx-doc/_static/crackerjackmack.png" width="800" alt="CiscoConfParse Github issue #13"></a>
|br|
|br|
.. raw:: html
<blockquote class="twitter-tweet" lang="en"><p>Have to audit > 100 catalyst sw configs for misconfiguration/non-standard configs. Perfect job for CiscoConfParse http://is.gd/d13z2 <a href="https://twitter.com/hashtag/python?src=hash">#python</a></p>— Jochen - l0b0 (@verbosemode) <a href="https://twitter.com/verbosemode/status/16878620193">June 23, 2010</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
|br|
|br|
.. raw:: html
<blockquote class="twitter-tweet" data-conversation="none" lang="en"><p><a href="https://twitter.com/fryguy_pa">@fryguy_pa</a> There is a Cisco config parsing library for python that does neat tricks for searching configs</p>— Bob McCouch (@BobMcCouch) <a href="https://twitter.com/BobMcCouch/status/294877521349079041">January 25, 2013</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" data-conversation="none" lang="en"><p>.<a href="https://twitter.com/fryguy_pa">@fryguy_pa</a> Here it is: ciscoconf python library: <a href="http://t.co/oDCWRZer">http://t.co/oDCWRZer</a></p>— Bob McCouch (@BobMcCouch) <a href="https://twitter.com/BobMcCouch/status/294878103199698944">January 25, 2013</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
|br|
|br|
We don't use Cisco
==================
Don't let that stop you. CiscoConfParse parses anything that has a Cisco IOS
style of configuration, which includes:
- Cisco IOS, Cisco Nexus, Cisco IOS-XR, Cisco IOS-XE, Aironet OS, Cisco ASA, Cisco CatOS
- Arista EOS
- Brocade
- HP Switches
- Force 10 Switches
- Dell PowerConnect Switches
- Extreme Networks
- Enterasys
As of CiscoConfParse 1.2.4, you can parse `brace-delimited configurations`_
into a Cisco IOS style (see `Github Issue #17`_), which means that
CiscoConfParse understands these configurations too:
- Juniper Networks Junos, and Screenos
- F5 Networks configurations
Docs
====
The latest copy of the docs are `archived on the web <http://www.pennington.net/py/ciscoconfparse/>`_
.. _Pre-Requisites:
Pre-requisites
==============
ciscoconfparse_ requires Python versions 2.6, 2.7 or 3.2+; the OS should not
matter. If you want to run it under a Python virtualenv_, it's been heavily
tested in that environment as well.
.. _Installation:
Installation and Downloads
==========================
The best way to get ciscoconfparse is with setuptools_ or pip_. If you
already have setuptools_, you can install as usual:
::
# Substitute whatever ciscoconfparse version you like...
easy_install -U ciscoconfparse==1.2.4
Alternatively you can install into Python2.x with pip_:
::
pip install --upgrade ciscoconfparse
Use ``pip3`` for Python3.x...
::
pip3 install --upgrade ciscoconfparse
Otherwise `download it from PyPi <https://pypi.python.org/pypi/ciscoconfparse>`_, extract it and run the ``setup.py`` script:
::
python setup.py install
If you're interested in the source, you can always pull from the `github repo`_
or `bitbucket repo`_:
- From github_:
::
git clone git://github.com//mpenning/ciscoconfparse
- From bitbucket_:
::
hg init
hg clone https://bitbucket.org/mpenning/ciscoconfparse
.. _FAQ:
FAQ
===
#) *QUESTION*: I want to use ciscoconfparse_ with Python3; is that safe? *ANSWER*: As long as you're using Python 3.3 or higher, it's safe. I test every release against Python 3.2+; however, Python 3.2 is currently exposed to a small bug for some configurations (see `Github Issue #14`_).
#) *QUESTION*: Some of the code in the documentation looks different than what I'm used to seeing. Did you change something? *ANSWER*: Yes, starting around ciscoconfparse_ v0.9.10 I introducted more methods directly on ``IOSConfigLine()`` objects; going forward, these methods are the preferred way to use ciscoconfparse_. Please start using the new methods shown in the example, since they're faster, and you type much less code this way.
#) *QUESTION*: ciscoconfparse_ saved me a lot of time, I want to give money. Do you have a donation link? *ANSWER*: I love getting emails like this; helping people get their jobs done is why I wrote the module. However, I'm not accepting donations.
#) *QUESTION*: Is there a way to use this module with perl? *ANSWER*: Yes, I do this myself. Install the python package as you normally would and import it into perl with ``Inline.pm`` and ``Inline::Python`` from CPAN.
#) *QUESTION*: When I use ``find_children("interface GigabitEthernet3/2")``, I'm getting all interfaces beginning with 3/2, including 3/21, 3/22, 3/23 and 3/24. How can I limit my results? *ANSWER*: There are two ways... the simplest is to use the 'exactmatch' option... ``find_children("interface GigabitEthernet3/2", exactmatch=True)``. Another way is to utilize regex expansion that is native to many methods... ``find_children("interface GigabitEthernet3/2$")``
.. _`Other-Resources`:
Other Resources
===============
- `Dive into Python3`_ is a good way to learn Python
- `Team CYMRU`_ has a `Secure IOS Template`_, which is especially useful for external-facing routers / switches
- `Cisco's Guide to hardening IOS devices`_
.. _`Bug-Tracker-and-Support`:
Bug Tracker and Support
=======================
- Please report any suggestions, bug reports, or annoyances with ciscoconfparse_ through the `github bug tracker`_.
- If you're having problems with general python issues, consider searching for a solution on `Stack Overflow`_. If you can't find a solution for your problem or need more help, you can `ask a question`_.
- If you're having problems with your Cisco devices, you can open a case with `Cisco TAC`_; if you prefer crowd-sourcing, you can ask on the Stack Exchange `Network Engineering`_ site.
.. _Contributing:
Contributing
============
ciscoconfparse_ is developed with mercurial_, and pushed to bitbucket_.
`hg-git`_ keeps `github repo`_ and bitbucket_ in sync, so it shouldn't
matter if you just want to fork the `github repo`_.
.. _Unit-Tests:
Unit-Tests
==========
I use the `Travis CI project <https://travis-ci.org>`_ to continuously test ciscoconfparse on Python versions 2.6 through 3.4, as well as pypy_.
Click the image below for details; the current build status is:
.. image:: https://travis-ci.org/mpenning/ciscoconfparse.png?branch=master
:align: center
:target: https://travis-ci.org/mpenning/ciscoconfparse
:alt: Travis CI Status
.. _`License and Copyright`:
License and Copyright
=====================
ciscoconfparse_ is licensed GPLv3_; Copyright `David Michael Pennington`_,
2007-2014.
The `ipaddr`_ module is distributed with ciscoconfparse_ to facilitate unit
tests. `ipaddr`_ uses the `ASF License 2.0`_; `ipaddr`_ is part of the Python
standard library, starting in Python 3.3 (it's called ``ipaddress`` in Python3).
.. _Author:
Author and Thanks
=================
ciscoconfparse_ was written by David Michael Pennington (mike [~at~]
pennington [/dot\] net).
Special thanks:
- Thanks to David Muir Sharnoff for his suggestion about making a special case for IOS banners.
- Thanks to Alan Cownie for his API suggestions.
- Thanks to CrackerJackMack_ for reporting `Github Issue #13`_
- Soli Deo Gloria
.. _ciscoconfparse: https://pypi.python.org/pypi/ciscoconfparse
.. _pypy: http://pypy.org/
.. _CrackerJackMack: https://github.com/CrackerJackMack
.. _`Github Issue #13`: https://github.com/mpenning/ciscoconfparse/issues/13
.. _`Github Issue #14`: https://github.com/mpenning/ciscoconfparse/issues/14
.. _`Github Issue #17`: https://github.com/mpenning/ciscoconfparse/issues/17
.. _`David Michael Pennington`: http://pennington.net/
.. _setuptools: https://pypi.python.org/pypi/setuptools
.. _pip: https://pypi.python.org/pypi/pip
.. _virtualenv: https://pypi.python.org/pypi/virtualenv
.. _`github repo`: https://github.com/mpenning/ciscoconfparse
.. _`bitbucket repo`: https://bitbucket.org/mpenning/ciscoconfparse
.. _bitbucket: https://bitbucket.org/mpenning/ciscoconfparse
.. _github: https://github.com/mpenning/ciscoconfparse
.. _mercurial: http://mercurial.selenic.com/
.. _`github bug tracker`: https://github.com/mpenning/ciscoconfparse/issues
.. _`hg-git`: http://hg-git.github.io/
.. _`regular expressions`: http://docs.python.org/2/howto/regex.html
.. _`docs`: http://www.pennington.net/py/ciscoconfparse/
.. _`ipaddr`: https://code.google.com/p/ipaddr-py/
.. _`GPLv3`: http://www.gnu.org/licenses/gpl-3.0.html
.. _`ASF License 2.0`: http://www.apache.org/licenses/LICENSE-2.0
.. _`Dive into Python3`: http://www.diveintopython3.net/
.. _`Network Engineering`: http://networkengineering.stackexchange.com/
.. _`Stack Overflow`: http://stackoverflow.com/
.. _`ask a question`: http://stackoverflow.com/questions/ask
.. _`Secure IOS Template`: https://www.cymru.com/Documents/secure-ios-template.html
.. _`Team CYMRU`: http://www.team-cymru.org/
.. _`Cisco TAC`: http://cisco.com/go/support
.. _`Juniper networks`: http://www.juniper.net/
.. _`Cisco's Guide to hardening IOS devices`: http://www.cisco.com/c/en/us/support/docs/ip/access-lists/13608-21.html
.. |br| raw:: html
<br>
ciscoconfparse
==============
.. image:: https://travis-ci.org/mpenning/ciscoconfparse.png?branch=master
:target: https://travis-ci.org/mpenning/ciscoconfparse
:alt: Travis CI Status
.. image:: https://badge.fury.io/py/ciscoconfparse.png
:target: https://pypi.python.org/pypi/ciscoconfparse/
:alt: Version
.. image:: https://pypip.in/license/ciscoconfparse/badge.png
:target: https://pypi.python.org/pypi/ciscoconfparse/
:alt: License
.. image:: https://pypip.in/d/ciscoconfparse/badge.png
:target: https://pypi.python.org/pypi/ciscoconfparse
:alt: Downloads
.. contents::
.. _introduction:
Introduction: What is ciscoconfparse?
=====================================
ciscoconfparse is a Python_ library, which parses through Cisco IOS-style
(and other vendor) configurations. It can:
- Audit existing router / switch / firewall / wlc configurations
- Retrieve portions of the configuration
- Modify existing configurations
- Build new configurations
The library examines an IOS-style config and breaks it into a set of linked
parent / child relationships. You can perform complex queries about these
relationships.
.. image:: https://raw.githubusercontent.com/mpenning/ciscoconfparse/master/sphinx-doc/_static/ciscoconfparse_overview.png
:target: https://raw.githubusercontent.com/mpenning/ciscoconfparse/master/sphinx-doc/_static/ciscoconfparse_overview.png
:alt: CiscoConfParse Parent / Child relationships
Quotes
======
These are a few selected public mentions about CiscoConfParse; I usually try not to share private emails without asking, thus the quotes aren't long at this time.
|br|
|br|
.. raw:: html
<a href="https://github.com/mpenning/ciscoconfparse/issues/13#issuecomment-71340177"><img src="https://raw.githubusercontent.com/mpenning/ciscoconfparse/master/sphinx-doc/_static/crackerjackmack.png" width="800" alt="CiscoConfParse Github issue #13"></a>
|br|
|br|
.. raw:: html
<blockquote class="twitter-tweet" lang="en"><p>Have to audit > 100 catalyst sw configs for misconfiguration/non-standard configs. Perfect job for CiscoConfParse http://is.gd/d13z2 <a href="https://twitter.com/hashtag/python?src=hash">#python</a></p>— Jochen - l0b0 (@verbosemode) <a href="https://twitter.com/verbosemode/status/16878620193">June 23, 2010</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
|br|
|br|
.. raw:: html
<blockquote class="twitter-tweet" data-conversation="none" lang="en"><p><a href="https://twitter.com/fryguy_pa">@fryguy_pa</a> There is a Cisco config parsing library for python that does neat tricks for searching configs</p>— Bob McCouch (@BobMcCouch) <a href="https://twitter.com/BobMcCouch/status/294877521349079041">January 25, 2013</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" data-conversation="none" lang="en"><p>.<a href="https://twitter.com/fryguy_pa">@fryguy_pa</a> Here it is: ciscoconf python library: <a href="http://t.co/oDCWRZer">http://t.co/oDCWRZer</a></p>— Bob McCouch (@BobMcCouch) <a href="https://twitter.com/BobMcCouch/status/294878103199698944">January 25, 2013</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
|br|
|br|
We don't use Cisco
==================
Don't let that stop you. CiscoConfParse parses anything that has a Cisco IOS
style of configuration, which includes:
- Cisco IOS, Cisco Nexus, Cisco IOS-XR, Cisco IOS-XE, Aironet OS, Cisco ASA, Cisco CatOS
- Arista EOS
- Brocade
- HP Switches
- Force 10 Switches
- Dell PowerConnect Switches
- Extreme Networks
- Enterasys
As of CiscoConfParse 1.2.4, you can parse `brace-delimited configurations`_
into a Cisco IOS style (see `Github Issue #17`_), which means that
CiscoConfParse understands these configurations too:
- Juniper Networks Junos, and Screenos
- F5 Networks configurations
Docs
====
The latest copy of the docs are `archived on the web <http://www.pennington.net/py/ciscoconfparse/>`_
.. _Pre-Requisites:
Pre-requisites
==============
ciscoconfparse_ requires Python versions 2.6, 2.7 or 3.2+; the OS should not
matter. If you want to run it under a Python virtualenv_, it's been heavily
tested in that environment as well.
.. _Installation:
Installation and Downloads
==========================
The best way to get ciscoconfparse is with setuptools_ or pip_. If you
already have setuptools_, you can install as usual:
::
# Substitute whatever ciscoconfparse version you like...
easy_install -U ciscoconfparse==1.2.4
Alternatively you can install into Python2.x with pip_:
::
pip install --upgrade ciscoconfparse
Use ``pip3`` for Python3.x...
::
pip3 install --upgrade ciscoconfparse
Otherwise `download it from PyPi <https://pypi.python.org/pypi/ciscoconfparse>`_, extract it and run the ``setup.py`` script:
::
python setup.py install
If you're interested in the source, you can always pull from the `github repo`_
or `bitbucket repo`_:
- From github_:
::
git clone git://github.com//mpenning/ciscoconfparse
- From bitbucket_:
::
hg init
hg clone https://bitbucket.org/mpenning/ciscoconfparse
.. _FAQ:
FAQ
===
#) *QUESTION*: I want to use ciscoconfparse_ with Python3; is that safe? *ANSWER*: As long as you're using Python 3.3 or higher, it's safe. I test every release against Python 3.2+; however, Python 3.2 is currently exposed to a small bug for some configurations (see `Github Issue #14`_).
#) *QUESTION*: Some of the code in the documentation looks different than what I'm used to seeing. Did you change something? *ANSWER*: Yes, starting around ciscoconfparse_ v0.9.10 I introducted more methods directly on ``IOSConfigLine()`` objects; going forward, these methods are the preferred way to use ciscoconfparse_. Please start using the new methods shown in the example, since they're faster, and you type much less code this way.
#) *QUESTION*: ciscoconfparse_ saved me a lot of time, I want to give money. Do you have a donation link? *ANSWER*: I love getting emails like this; helping people get their jobs done is why I wrote the module. However, I'm not accepting donations.
#) *QUESTION*: Is there a way to use this module with perl? *ANSWER*: Yes, I do this myself. Install the python package as you normally would and import it into perl with ``Inline.pm`` and ``Inline::Python`` from CPAN.
#) *QUESTION*: When I use ``find_children("interface GigabitEthernet3/2")``, I'm getting all interfaces beginning with 3/2, including 3/21, 3/22, 3/23 and 3/24. How can I limit my results? *ANSWER*: There are two ways... the simplest is to use the 'exactmatch' option... ``find_children("interface GigabitEthernet3/2", exactmatch=True)``. Another way is to utilize regex expansion that is native to many methods... ``find_children("interface GigabitEthernet3/2$")``
.. _`Other-Resources`:
Other Resources
===============
- `Dive into Python3`_ is a good way to learn Python
- `Team CYMRU`_ has a `Secure IOS Template`_, which is especially useful for external-facing routers / switches
- `Cisco's Guide to hardening IOS devices`_
.. _`Bug-Tracker-and-Support`:
Bug Tracker and Support
=======================
- Please report any suggestions, bug reports, or annoyances with ciscoconfparse_ through the `github bug tracker`_.
- If you're having problems with general python issues, consider searching for a solution on `Stack Overflow`_. If you can't find a solution for your problem or need more help, you can `ask a question`_.
- If you're having problems with your Cisco devices, you can open a case with `Cisco TAC`_; if you prefer crowd-sourcing, you can ask on the Stack Exchange `Network Engineering`_ site.
.. _Contributing:
Contributing
============
ciscoconfparse_ is developed with mercurial_, and pushed to bitbucket_.
`hg-git`_ keeps `github repo`_ and bitbucket_ in sync, so it shouldn't
matter if you just want to fork the `github repo`_.
.. _Unit-Tests:
Unit-Tests
==========
I use the `Travis CI project <https://travis-ci.org>`_ to continuously test ciscoconfparse on Python versions 2.6 through 3.4, as well as pypy_.
Click the image below for details; the current build status is:
.. image:: https://travis-ci.org/mpenning/ciscoconfparse.png?branch=master
:align: center
:target: https://travis-ci.org/mpenning/ciscoconfparse
:alt: Travis CI Status
.. _`License and Copyright`:
License and Copyright
=====================
ciscoconfparse_ is licensed GPLv3_; Copyright `David Michael Pennington`_,
2007-2014.
The `ipaddr`_ module is distributed with ciscoconfparse_ to facilitate unit
tests. `ipaddr`_ uses the `ASF License 2.0`_; `ipaddr`_ is part of the Python
standard library, starting in Python 3.3 (it's called ``ipaddress`` in Python3).
.. _Author:
Author and Thanks
=================
ciscoconfparse_ was written by David Michael Pennington (mike [~at~]
pennington [/dot\] net).
Special thanks:
- Thanks to David Muir Sharnoff for his suggestion about making a special case for IOS banners.
- Thanks to Alan Cownie for his API suggestions.
- Thanks to CrackerJackMack_ for reporting `Github Issue #13`_
- Soli Deo Gloria
.. _ciscoconfparse: https://pypi.python.org/pypi/ciscoconfparse
.. _pypy: http://pypy.org/
.. _CrackerJackMack: https://github.com/CrackerJackMack
.. _`Github Issue #13`: https://github.com/mpenning/ciscoconfparse/issues/13
.. _`Github Issue #14`: https://github.com/mpenning/ciscoconfparse/issues/14
.. _`Github Issue #17`: https://github.com/mpenning/ciscoconfparse/issues/17
.. _`David Michael Pennington`: http://pennington.net/
.. _setuptools: https://pypi.python.org/pypi/setuptools
.. _pip: https://pypi.python.org/pypi/pip
.. _virtualenv: https://pypi.python.org/pypi/virtualenv
.. _`github repo`: https://github.com/mpenning/ciscoconfparse
.. _`bitbucket repo`: https://bitbucket.org/mpenning/ciscoconfparse
.. _bitbucket: https://bitbucket.org/mpenning/ciscoconfparse
.. _github: https://github.com/mpenning/ciscoconfparse
.. _mercurial: http://mercurial.selenic.com/
.. _`github bug tracker`: https://github.com/mpenning/ciscoconfparse/issues
.. _`hg-git`: http://hg-git.github.io/
.. _`regular expressions`: http://docs.python.org/2/howto/regex.html
.. _`docs`: http://www.pennington.net/py/ciscoconfparse/
.. _`ipaddr`: https://code.google.com/p/ipaddr-py/
.. _`GPLv3`: http://www.gnu.org/licenses/gpl-3.0.html
.. _`ASF License 2.0`: http://www.apache.org/licenses/LICENSE-2.0
.. _`Dive into Python3`: http://www.diveintopython3.net/
.. _`Network Engineering`: http://networkengineering.stackexchange.com/
.. _`Stack Overflow`: http://stackoverflow.com/
.. _`ask a question`: http://stackoverflow.com/questions/ask
.. _`Secure IOS Template`: https://www.cymru.com/Documents/secure-ios-template.html
.. _`Team CYMRU`: http://www.team-cymru.org/
.. _`Cisco TAC`: http://cisco.com/go/support
.. _`Juniper networks`: http://www.juniper.net/
.. _`Cisco's Guide to hardening IOS devices`: http://www.cisco.com/c/en/us/support/docs/ip/access-lists/13608-21.html
.. |br| raw:: html
<br>
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
ciscoconfparse-1.2.5.tar.gz
(368.7 kB
view hashes)