#!/usr/bin/env python # # Copyright (c) 2017 Jason Frazier # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # This script retrieves entire configuration from a network element via NETCONF # prints it out in a "pretty" XML tree. import sys from argparse import ArgumentParser from ncclient import manager import xml.dom.minidom if __name__ == '__main__': parser = ArgumentParser(description='Select options.') # Input parameters parser.add_argument('--host', type=str, required=True, help="The device IP or DN") parser.add_argument('-u', '--username', type=str, default='cisco', help="Go on, guess!") parser.add_argument('-p', '--password', type=str, default='cisco', help="Yep, this one too! ;-)") parser.add_argument('--port', type=int, default=830, help="Specify this if you want a non-default port") args = parser.parse_args() m = manager.connect(host=args.host, port=args.port, username=args.username, password=args.password, device_params={'name':"csr"}) hostname_filter = ''' ''' # Pretty print the XML reply xmlDom = xml.dom.minidom.parseString( str( m.get_config('running', hostname_filter))) print(xmlDom.toprettyxml( indent = " " ))