Files
awx/awx/network_ui/client/networking_visualization_client.py
Ben Thomasson 00a9283e32 Adds an API for network UI, action plugins, and API client
* Adds a simple DRF API for network-ui
* Moves network_ui api to v1_api
* Uses BaseSerializer for networking v1 api
* Adds v2 of the network API
* Uses standard AWX base classes for the network UI API
* Adds canvas prefix to network UI api URL names
* Adds ansible action plugins for automating network UI workflows
* Adds python client for the networking visualization API
2018-03-23 17:00:22 -04:00

95 lines
3.3 KiB
Python
Executable File

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Usage:
networking_visualization_client.py [options] (create|list|get|update|delete) [device|topology|interface|link] [<filter>...]
Options:
-h, --help Show this page
--user=<u> User
--password-file=<f>|-p=<f> Password file
--debug Show debug logging
--verbose Show verbose logging
"""
from docopt import docopt
import logging
import sys
from getpass import getpass
from conf import settings
import json
import os
import v2_api_client
logger = logging.getLogger('networking_visualization_client')
def main(args=None):
try:
if args is None:
args = sys.argv[1:]
parsed_args = docopt(__doc__, args)
if parsed_args['--debug']:
logging.basicConfig(level=logging.DEBUG)
elif parsed_args['--verbose']:
logging.basicConfig(level=logging.INFO)
else:
logging.basicConfig(level=logging.WARNING)
settings.user = parsed_args['--user']
if parsed_args['--password-file'] and os.path.exists(os.path.abspath(parsed_args['--password-file'])):
with open(os.path.abspath(parsed_args['--password-file'])) as f:
settings.password = f.read().strip()
else:
settings.password = getpass()
query_filter = {}
if parsed_args['<filter>']:
for key_value in parsed_args['<filter>']:
if "=" in key_value:
key, _, value = key_value.partition("=")
if value.lower() in ["true", "yes"]:
query_filter[key] = True
elif value.lower() in ["false", "no"]:
query_filter[key] = False
else:
try:
query_filter[key] = int(value)
except ValueError:
try:
query_filter[key] = float(value)
except ValueError:
query_filter[key] = value
else:
raise Exception("Filters should be in the form of 'key=value'")
operation = ('get' if parsed_args['get'] else
'list' if parsed_args['list'] else
'create' if parsed_args['create'] else
'delete' if parsed_args['delete'] else
'update' if parsed_args['update'] else None)
if (parsed_args['topology']):
result = v2_api_client.__dict__[operation + "_topology"](**query_filter)
elif (parsed_args['device']):
result = v2_api_client.__dict__[operation + "_device"](**query_filter)
elif (parsed_args['interface']):
result = v2_api_client.__dict__[operation + "_interface"](**query_filter)
elif (parsed_args['link']):
result = v2_api_client.__dict__[operation + "_link"](**query_filter)
if isinstance(result, dict) or isinstance(result, list):
print json.dumps(result, sort_keys=True, indent=4)
except BaseException, e:
print ("Error: {0}".format(e))
raise
return 1
return 0
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))