============== ciscoconfparse ============== .. image:: :target: :alt: Travis CI Status .. image:: :target: :alt: Version .. image:: :target: :alt: License .. image:: :target: :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:: :target: :alt: CiscoConfParse Parent / Child relationships User Testimony ============== 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. .. image:: :target: :alt: CiscoConfParse Github Issue #17 .. image:: :target: :alt: Reddit comment .. image:: :target: :alt: Netnea testimony .. image:: :target: :alt: Twitter mentions What if we don't use Cisco? =========================== Don't let that stop you. 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: - Juniper Networks Junos, and Screenos - F5 Networks configurations CiscoConfParse also handles 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 Docs ==== - The latest copy of the docs are `archived on the web <>`_ - There is also a `CiscoConfParse Tutorial <>`_ .. _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.38 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 <>`_, extract it and run the ```` script: :: python install If you're interested in the source, you can always pull from the `github repo`_ or `bitbucket repo`_: - From github_: :: git clone git:// - From bitbucket_: :: hg init hg clone .. _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 ```` 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. .. _Unit-Tests: Unit-Tests ========== `Travis CI project <>`_ tests ciscoconfparse on Python versions 2.6 through 3.4, as well as a `pypy JIT`_ executable. Click the image below for details; the current build status is: .. image:: :align: center :target: :alt: Travis CI Status .. _`License and Copyright`: License and Copyright ===================== ciscoconfparse_ is licensed GPLv3_; Copyright `David Michael Pennington`_, 2007-2015. .. _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: .. _Python: .. _`pypy JIT`: .. _`Github Issue #13`: .. _`Github Issue #14`: .. _`Github Issue #17`: .. _`brace-delimited configurations`: .. _CrackerJackMack: .. _`David Michael Pennington`: .. _setuptools: .. _pip: .. _virtualenv: .. _`github repo`: .. _`bitbucket repo`: .. _bitbucket: .. _github: .. _mercurial: .. _`github bug tracker`: .. _`hg-git`: .. _`regular expressions`: .. _`docs`: .. _`ipaddr`: .. _`GPLv3`: .. _`ASF License 2.0`: .. _`Dive into Python3`: .. _`Network Engineering`: .. _`Stack Overflow`: .. _`ask a question`: .. _`Secure IOS Template`: .. _`Team CYMRU`: .. _`Cisco TAC`: .. _`Juniper networks`: .. _`Cisco's Guide to hardening IOS devices`: