|
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