|
24 | 24 | # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
25 | 25 | # SUCH DAMAGE.
|
26 | 26 | #
|
27 |
| -# This script retrieves entire configuration from a network element via NETCONF |
28 |
| -# prints it out in a "pretty" XML tree. |
| 27 | +# This script retrieves entire configuration from a network element via RESTCONF |
| 28 | +# and prints it out in a "pretty" JSON tree. |
29 | 29 |
|
30 | 30 | from argparse import ArgumentParser
|
31 | 31 | import requests
|
| 32 | +import urllib3 |
| 33 | +import json |
| 34 | +import sys |
| 35 | +import os |
| 36 | +from getpass import getpass |
| 37 | +from pprint import pprint |
32 | 38 |
|
33 | 39 | if __name__ == '__main__':
|
34 | 40 |
|
| 41 | + # Disable SSL Warnings |
| 42 | + urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) |
| 43 | + |
35 | 44 | parser = ArgumentParser(description='Select options.')
|
36 | 45 |
|
37 | 46 | # Input parameters
|
38 | 47 | parser.add_argument('-host', '--host', type=str, required=True,
|
39 | 48 | help="The device IP or DN")
|
40 | 49 | parser.add_argument('-user', '--username', type=str, default='cisco',
|
41 | 50 | help="User credentials for the request")
|
42 |
| - parser.add_argument('-passwd', '--password', type=str, default='cisco', |
43 |
| - help="It's the password") |
44 | 51 | parser.add_argument('-port', '--port', type=int, default=443,
|
45 | 52 | help="Specify this if you want a non-default port")
|
46 | 53 |
|
47 | 54 | args = parser.parse_args()
|
48 | 55 |
|
49 | 56 | username = args.username
|
50 |
| - password = args.password |
| 57 | + password = os.getenv('DEVNET_RESTCONF_PASSWORD') |
| 58 | + if password is None: |
| 59 | + password = getpass() |
51 | 60 | host = args.host
|
52 | 61 | port = str(args.port)
|
53 | 62 |
|
54 |
| - url = "https://" + host + ":" + port + "/restconf/api/running/" |
| 63 | + url = "https://" + host + ":" + port + "/restconf/data/Cisco-IOS-XE-native:native" |
55 | 64 |
|
56 | 65 | headers = {
|
57 |
| - "Content-Type": "application/vnd.yang.datastore+json", |
58 |
| - "Accept": "application/vnd.yang.datastore+json", |
| 66 | + "Content-Type": "application/yang-data+json", |
| 67 | + "Accept": "application/yang-data+json", |
59 | 68 | }
|
60 |
| - response = requests.request("GET", url, headers=headers, auth=(username,password), verify=False) |
| 69 | + |
| 70 | + try: |
| 71 | + response = requests.request("GET", url, headers=headers, auth=(username,password), verify=False) |
| 72 | + response.raise_for_status() |
| 73 | + except Exception as e: |
| 74 | + print(e, file=sys.stderr) |
| 75 | + sys.exit(1) |
61 | 76 |
|
62 |
| - print(response.text) |
| 77 | + pprint(response.json()) |
0 commit comments