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
This commit is contained in:
Ben Thomasson 2018-03-16 11:21:08 -04:00
parent 2736aecfb2
commit 00a9283e32
No known key found for this signature in database
GPG Key ID: 5818EF4CC895D5F5
153 changed files with 6729 additions and 22 deletions

View File

@ -1,8 +1,12 @@
.PHONY: all models admin
.PHONY: all models admin v1_api_serializers v1_api_views v1_api_urls v2_api_serializers v2_api_views v1_api_client v2_api_urls v2_api_access v2_api_client
all: models admin
all: tuples models admin v1_api_serializers v1_api_views v1_api_urls v2_api_serializers v2_api_views v1_api_client action_plugins v2_api_urls v2_api_access v2_api_client
tuples:
jinja2 templates/tuples.pyt designs/models.yml > tuples.py
autopep8 -i tuples.py --ignore-local-config --max-line-length 160
models:
jinja2 templates/models.pyt designs/models.yml > models.py
@ -11,3 +15,106 @@ models:
admin:
jinja2 templates/admin.pyt designs/models.yml > admin.py
autopep8 -i admin.py --ignore-local-config --max-line-length 160
v1_api_serializers:
jinja2 templates/v1_api_serializers.pyt designs/models.yml > v1_api_serializers.py
autopep8 -i v1_api_serializers.py --ignore-local-config --max-line-length 160
v1_api_views:
jinja2 templates/v1_api_views.pyt designs/models.yml > v1_api_views.py
autopep8 -i v1_api_views.py --ignore-local-config --max-line-length 80
v1_api_urls:
jinja2 templates/v1_api_urls.pyt designs/models.yml > v1_api_urls.py
autopep8 -i v1_api_urls.py --ignore-local-config --max-line-length 160
v2_api_urls:
jinja2 templates/v2_api_urls.pyt designs/models.yml > v2_api_urls.py
autopep8 -i v2_api_urls.py --ignore-local-config --max-line-length 160
v2_api_access:
jinja2 templates/v2_api_access.pyt designs/models.yml > v2_api_access.py
autopep8 -i v2_api_access.py --ignore-local-config --max-line-length 160
v2_api_serializers:
jinja2 templates/v2_api_serializers.pyt designs/models.yml > v2_api_serializers.py
autopep8 -i v2_api_serializers.py --ignore-local-config --max-line-length 160
v2_api_views:
jinja2 templates/v2_api_views.pyt designs/models.yml > v2_api_views.py
autopep8 -i v2_api_views.py --ignore-local-config --max-line-length 160
v1_api_client:
jinja2 templates/v1_api_client.pyt designs/models.yml > client/v1_api_client.py
autopep8 -i client/v1_api_client.py --ignore-local-config --max-line-length 160
v2_api_client:
jinja2 templates/v2_api_client.pyt designs/models.yml > client/v2_api_client.py
autopep8 -i client/v2_api_client.py --ignore-local-config --max-line-length 160
action_plugins: ap_create_model ap_get_model ap_delete_model ap_update_model ap_list_model
ap_create_model:
jinja2 templates/action_plugins/create_model.pyt designs/models.yml > action_plugins/create_model.py
cd action_plugins; csplit -k -f create_ create_model.py '/#----/' '{*}'
rm action_plugins/create_model.py
./tools/fix_action_plugin_names.py action_plugins/create_*
autopep8 -i action_plugins/create_*.py --ignore-local-config --max-line-length 160
jinja2 templates/library/create_model.pyt designs/models.yml > library/create_model.py
cd library; csplit -k -f create_ create_model.py '/#----/' '{*}'
rm library/create_model.py
./tools/fix_action_plugin_names.py library/create_*
autopep8 -i library/create_*.py --ignore-local-config --max-line-length 160
ap_update_model:
jinja2 templates/action_plugins/update_model.pyt designs/models.yml > action_plugins/update_model.py
cd action_plugins; csplit -k -f update_ update_model.py '/#----/' '{*}'
rm action_plugins/update_model.py
./tools/fix_action_plugin_names.py action_plugins/update_*
autopep8 -i action_plugins/update_*.py --ignore-local-config --max-line-length 160
jinja2 templates/library/update_model.pyt designs/models.yml > library/update_model.py
cd library; csplit -k -f update_ update_model.py '/#----/' '{*}'
rm library/update_model.py
./tools/fix_action_plugin_names.py library/update_*
autopep8 -i library/update_*.py --ignore-local-config --max-line-length 160
ap_get_model:
jinja2 templates/action_plugins/get_model.pyt designs/models.yml > action_plugins/get_model.py
cd action_plugins; csplit -k -f get_ get_model.py '/#----/' '{*}'
rm action_plugins/get_model.py
./tools/fix_action_plugin_names.py action_plugins/get_*
autopep8 -i action_plugins/get_*.py --ignore-local-config --max-line-length 160
jinja2 templates/library/get_model.pyt designs/models.yml > library/get_model.py
cd library; csplit -k -f get_ get_model.py '/#----/' '{*}'
rm library/get_model.py
./tools/fix_action_plugin_names.py library/get_*
autopep8 -i library/get_*.py --ignore-local-config --max-line-length 160
ap_delete_model:
jinja2 templates/action_plugins/delete_model.pyt designs/models.yml > action_plugins/delete_model.py
cd action_plugins; csplit -k -f delete_ delete_model.py '/#----/' '{*}'
rm action_plugins/delete_model.py
./tools/fix_action_plugin_names.py action_plugins/delete_*
autopep8 -i action_plugins/delete_*.py --ignore-local-config --max-line-length 160
jinja2 templates/library/delete_model.pyt designs/models.yml > library/delete_model.py
cd library; csplit -k -f delete_ delete_model.py '/#----/' '{*}'
rm library/delete_model.py
./tools/fix_action_plugin_names.py library/delete_*
autopep8 -i library/delete_*.py --ignore-local-config --max-line-length 160
ap_list_model:
jinja2 templates/action_plugins/list_model.pyt designs/models.yml > action_plugins/list_model.py
cd action_plugins; csplit -k -f list_ list_model.py '/#----/' '{*}'
rm action_plugins/list_model.py
./tools/fix_action_plugin_names.py action_plugins/list_*
autopep8 -i action_plugins/list_*.py --ignore-local-config --max-line-length 160
jinja2 templates/library/list_model.pyt designs/models.yml > library/list_model.py
cd library; csplit -k -f list_ list_model.py '/#----/' '{*}'
rm library/list_model.py
./tools/fix_action_plugin_names.py library/list_*
autopep8 -i library/list_*.py --ignore-local-config --max-line-length 160

View File

@ -0,0 +1,61 @@
#---- create_device
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
the_list = self._task.args.get('list', None)
list_var = self._task.args.get('list_var', None)
topology = self._task.args.get('topology', None)
name = self._task.args.get('name', None)
x = self._task.args.get('x', None)
y = self._task.args.get('y', None)
id = self._task.args.get('id', None)
type = self._task.args.get('type', None)
interface_id_seq = self._task.args.get('interface_id_seq', 0)
process_id_seq = self._task.args.get('process_id_seq', 0)
host_id = self._task.args.get('host_id', 0)
url = server + '/api/v2/canvas/device/'
headers = {'content-type': 'application/json'}
response = requests.post(url, data=json.dumps(dict(topology=topology,
name=name,
x=x,
y=y,
id=id,
type=type,
interface_id_seq=interface_id_seq,
process_id_seq=process_id_seq,
host_id=host_id,
)),
verify=False,
auth=(user, password),
headers=headers)
if var is not None:
result['ansible_facts'] = {var: response.json()}
elif list_var is not None:
if the_list is None:
the_list = []
the_list.append(response.json())
result['ansible_facts'] = {list_var: the_list}
return result

View File

@ -0,0 +1,58 @@
#---- create_group
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
the_list = self._task.args.get('list', None)
list_var = self._task.args.get('list_var', None)
id = self._task.args.get('id', None)
name = self._task.args.get('name', None)
x1 = self._task.args.get('x1', None)
y1 = self._task.args.get('y1', None)
x2 = self._task.args.get('x2', None)
y2 = self._task.args.get('y2', None)
topology = self._task.args.get('topology', None)
type = self._task.args.get('type', None)
url = server + '/api/v2/canvas/group/'
headers = {'content-type': 'application/json'}
response = requests.post(url, data=json.dumps(dict(id=id,
name=name,
x1=x1,
y1=y1,
x2=x2,
y2=y2,
topology=topology,
type=type,
)),
verify=False,
auth=(user, password),
headers=headers)
if var is not None:
result['ansible_facts'] = {var: response.json()}
elif list_var is not None:
if the_list is None:
the_list = []
the_list.append(response.json())
result['ansible_facts'] = {list_var: the_list}
return result

View File

@ -0,0 +1,46 @@
#---- create_groupdevice
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
the_list = self._task.args.get('list', None)
list_var = self._task.args.get('list_var', None)
group = self._task.args.get('group', None)
device = self._task.args.get('device', None)
url = server + '/api/v2/canvas/groupdevice/'
headers = {'content-type': 'application/json'}
response = requests.post(url, data=json.dumps(dict(group=group,
device=device,
)),
verify=False,
auth=(user, password),
headers=headers)
if var is not None:
result['ansible_facts'] = {var: response.json()}
elif list_var is not None:
if the_list is None:
the_list = []
the_list.append(response.json())
result['ansible_facts'] = {list_var: the_list}
return result

View File

@ -0,0 +1,48 @@
#---- create_interface
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
the_list = self._task.args.get('list', None)
list_var = self._task.args.get('list_var', None)
device = self._task.args.get('device', None)
name = self._task.args.get('name', None)
id = self._task.args.get('id', None)
url = server + '/api/v2/canvas/interface/'
headers = {'content-type': 'application/json'}
response = requests.post(url, data=json.dumps(dict(device=device,
name=name,
id=id,
)),
verify=False,
auth=(user, password),
headers=headers)
if var is not None:
result['ansible_facts'] = {var: response.json()}
elif list_var is not None:
if the_list is None:
the_list = []
the_list.append(response.json())
result['ansible_facts'] = {list_var: the_list}
return result

View File

@ -0,0 +1,54 @@
#---- create_link
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
the_list = self._task.args.get('list', None)
list_var = self._task.args.get('list_var', None)
from_device = self._task.args.get('from_device', None)
to_device = self._task.args.get('to_device', None)
from_interface = self._task.args.get('from_interface', None)
to_interface = self._task.args.get('to_interface', None)
id = self._task.args.get('id', None)
name = self._task.args.get('name', None)
url = server + '/api/v2/canvas/link/'
headers = {'content-type': 'application/json'}
response = requests.post(url, data=json.dumps(dict(from_device=from_device,
to_device=to_device,
from_interface=from_interface,
to_interface=to_interface,
id=id,
name=name,
)),
verify=False,
auth=(user, password),
headers=headers)
if var is not None:
result['ansible_facts'] = {var: response.json()}
elif list_var is not None:
if the_list is None:
the_list = []
the_list.append(response.json())
result['ansible_facts'] = {list_var: the_list}
return result

View File

@ -0,0 +1,51 @@
#---- create_process
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
the_list = self._task.args.get('list', None)
list_var = self._task.args.get('list_var', None)
device = self._task.args.get('device', None)
name = self._task.args.get('name', None)
type = self._task.args.get('type', None)
id = self._task.args.get('id', 0)
url = server + '/api/v2/canvas/process/'
headers = {'content-type': 'application/json'}
response = requests.post(url, data=json.dumps(dict(device=device,
name=name,
type=type,
id=id,
)),
verify=False,
auth=(user, password),
headers=headers)
if var is not None:
result['ansible_facts'] = {var: response.json()}
elif list_var is not None:
if the_list is None:
the_list = []
the_list.append(response.json())
result['ansible_facts'] = {list_var: the_list}
return result

View File

@ -0,0 +1,51 @@
#---- create_stream
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
the_list = self._task.args.get('list', None)
list_var = self._task.args.get('list_var', None)
from_device = self._task.args.get('from_device', None)
to_device = self._task.args.get('to_device', None)
label = self._task.args.get('label', None)
id = self._task.args.get('id', 0)
url = server + '/api/v2/canvas/stream/'
headers = {'content-type': 'application/json'}
response = requests.post(url, data=json.dumps(dict(from_device=from_device,
to_device=to_device,
label=label,
id=id,
)),
verify=False,
auth=(user, password),
headers=headers)
if var is not None:
result['ansible_facts'] = {var: response.json()}
elif list_var is not None:
if the_list is None:
the_list = []
the_list.append(response.json())
result['ansible_facts'] = {list_var: the_list}
return result

View File

@ -0,0 +1,44 @@
#---- create_toolbox
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
the_list = self._task.args.get('list', None)
list_var = self._task.args.get('list_var', None)
name = self._task.args.get('name', None)
url = server + '/api/v2/canvas/toolbox/'
headers = {'content-type': 'application/json'}
response = requests.post(url, data=json.dumps(dict(name=name,
)),
verify=False,
auth=(user, password),
headers=headers)
if var is not None:
result['ansible_facts'] = {var: response.json()}
elif list_var is not None:
if the_list is None:
the_list = []
the_list.append(response.json())
result['ansible_facts'] = {list_var: the_list}
return result

View File

@ -0,0 +1,46 @@
#---- create_toolboxitem
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
the_list = self._task.args.get('list', None)
list_var = self._task.args.get('list_var', None)
toolbox = self._task.args.get('toolbox', None)
data = self._task.args.get('data', None)
url = server + '/api/v2/canvas/toolboxitem/'
headers = {'content-type': 'application/json'}
response = requests.post(url, data=json.dumps(dict(toolbox=toolbox,
data=data,
)),
verify=False,
auth=(user, password),
headers=headers)
if var is not None:
result['ansible_facts'] = {var: response.json()}
elif list_var is not None:
if the_list is None:
the_list = []
the_list.append(response.json())
result['ansible_facts'] = {list_var: the_list}
return result

View File

@ -0,0 +1,59 @@
#---- create_topology
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
the_list = self._task.args.get('list', None)
list_var = self._task.args.get('list_var', None)
name = self._task.args.get('name', None)
scale = self._task.args.get('scale', None)
panX = self._task.args.get('panX', None)
panY = self._task.args.get('panY', None)
device_id_seq = self._task.args.get('device_id_seq', 0)
link_id_seq = self._task.args.get('link_id_seq', 0)
group_id_seq = self._task.args.get('group_id_seq', 0)
stream_id_seq = self._task.args.get('stream_id_seq', 0)
url = server + '/api/v2/canvas/topology/'
headers = {'content-type': 'application/json'}
response = requests.post(url, data=json.dumps(dict(name=name,
scale=scale,
panX=panX,
panY=panY,
device_id_seq=device_id_seq,
link_id_seq=link_id_seq,
group_id_seq=group_id_seq,
stream_id_seq=stream_id_seq,
)),
verify=False,
auth=(user, password),
headers=headers)
if var is not None:
result['ansible_facts'] = {var: response.json()}
elif list_var is not None:
if the_list is None:
the_list = []
the_list.append(response.json())
result['ansible_facts'] = {list_var: the_list}
return result

View File

@ -0,0 +1,46 @@
#---- create_topologyinventory
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
the_list = self._task.args.get('list', None)
list_var = self._task.args.get('list_var', None)
topology = self._task.args.get('topology', None)
inventory_id = self._task.args.get('inventory_id', None)
url = server + '/api/v2/canvas/topologyinventory/'
headers = {'content-type': 'application/json'}
response = requests.post(url, data=json.dumps(dict(topology=topology,
inventory_id=inventory_id,
)),
verify=False,
auth=(user, password),
headers=headers)
if var is not None:
result['ansible_facts'] = {var: response.json()}
elif list_var is not None:
if the_list is None:
the_list = []
the_list.append(response.json())
result['ansible_facts'] = {list_var: the_list}
return result

View File

@ -0,0 +1,29 @@
#---- delete_device
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
device_id = self._task.args.get('device_id', None)
url = server + '/api/v2/canvas/device/' + str(device_id) + '/'
requests.delete(url,
verify=False,
auth=(user, password))
return result

View File

@ -0,0 +1,29 @@
#---- delete_group
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
group_id = self._task.args.get('group_id', None)
url = server + '/api/v2/canvas/group/' + str(group_id) + '/'
requests.delete(url,
verify=False,
auth=(user, password))
return result

View File

@ -0,0 +1,29 @@
#---- delete_groupdevice
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
group_device_id = self._task.args.get('group_device_id', None)
url = server + '/api/v2/canvas/groupdevice/' + str(group_device_id) + '/'
requests.delete(url,
verify=False,
auth=(user, password))
return result

View File

@ -0,0 +1,29 @@
#---- delete_interface
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
interface_id = self._task.args.get('interface_id', None)
url = server + '/api/v2/canvas/interface/' + str(interface_id) + '/'
requests.delete(url,
verify=False,
auth=(user, password))
return result

View File

@ -0,0 +1,29 @@
#---- delete_link
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
link_id = self._task.args.get('link_id', None)
url = server + '/api/v2/canvas/link/' + str(link_id) + '/'
requests.delete(url,
verify=False,
auth=(user, password))
return result

View File

@ -0,0 +1,29 @@
#---- delete_process
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
process_id = self._task.args.get('process_id', None)
url = server + '/api/v2/canvas/process/' + str(process_id) + '/'
requests.delete(url,
verify=False,
auth=(user, password))
return result

View File

@ -0,0 +1,29 @@
#---- delete_stream
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
stream_id = self._task.args.get('stream_id', None)
url = server + '/api/v2/canvas/stream/' + str(stream_id) + '/'
requests.delete(url,
verify=False,
auth=(user, password))
return result

View File

@ -0,0 +1,29 @@
#---- delete_toolbox
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
toolbox_id = self._task.args.get('toolbox_id', None)
url = server + '/api/v2/canvas/toolbox/' + str(toolbox_id) + '/'
requests.delete(url,
verify=False,
auth=(user, password))
return result

View File

@ -0,0 +1,29 @@
#---- delete_toolboxitem
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
toolbox_item_id = self._task.args.get('toolbox_item_id', None)
url = server + '/api/v2/canvas/toolboxitem/' + str(toolbox_item_id) + '/'
requests.delete(url,
verify=False,
auth=(user, password))
return result

View File

@ -0,0 +1,29 @@
#---- delete_topology
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
topology_id = self._task.args.get('topology_id', None)
url = server + '/api/v2/canvas/topology/' + str(topology_id) + '/'
requests.delete(url,
verify=False,
auth=(user, password))
return result

View File

@ -0,0 +1,29 @@
#---- delete_topologyinventory
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
topology_inventory_id = self._task.args.get('topology_inventory_id', None)
url = server + '/api/v2/canvas/topologyinventory/' + str(topology_inventory_id) + '/'
requests.delete(url,
verify=False,
auth=(user, password))
return result

View File

@ -0,0 +1,32 @@
#---- get_device
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
device_id = self._task.args.get('device_id', None)
url = server + '/api/v2/canvas/device/' + str(device_id) + '/'
response = requests.get(url,
verify=False,
auth=(user, password))
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,32 @@
#---- get_group
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
group_id = self._task.args.get('group_id', None)
url = server + '/api/v2/canvas/group/' + str(group_id) + '/'
response = requests.get(url,
verify=False,
auth=(user, password))
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,32 @@
#---- get_groupdevice
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
group_device_id = self._task.args.get('group_device_id', None)
url = server + '/api/v2/canvas/groupdevice/' + str(group_device_id) + '/'
response = requests.get(url,
verify=False,
auth=(user, password))
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,32 @@
#---- get_interface
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
interface_id = self._task.args.get('interface_id', None)
url = server + '/api/v2/canvas/interface/' + str(interface_id) + '/'
response = requests.get(url,
verify=False,
auth=(user, password))
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,32 @@
#---- get_link
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
link_id = self._task.args.get('link_id', None)
url = server + '/api/v2/canvas/link/' + str(link_id) + '/'
response = requests.get(url,
verify=False,
auth=(user, password))
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,32 @@
#---- get_process
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
process_id = self._task.args.get('process_id', None)
url = server + '/api/v2/canvas/process/' + str(process_id) + '/'
response = requests.get(url,
verify=False,
auth=(user, password))
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,32 @@
#---- get_stream
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
stream_id = self._task.args.get('stream_id', None)
url = server + '/api/v2/canvas/stream/' + str(stream_id) + '/'
response = requests.get(url,
verify=False,
auth=(user, password))
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,32 @@
#---- get_toolbox
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
toolbox_id = self._task.args.get('toolbox_id', None)
url = server + '/api/v2/canvas/toolbox/' + str(toolbox_id) + '/'
response = requests.get(url,
verify=False,
auth=(user, password))
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,32 @@
#---- get_toolboxitem
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
toolbox_item_id = self._task.args.get('toolbox_item_id', None)
url = server + '/api/v2/canvas/toolboxitem/' + str(toolbox_item_id) + '/'
response = requests.get(url,
verify=False,
auth=(user, password))
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,32 @@
#---- get_topology
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
topology_id = self._task.args.get('topology_id', None)
url = server + '/api/v2/canvas/topology/' + str(topology_id) + '/'
response = requests.get(url,
verify=False,
auth=(user, password))
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,32 @@
#---- get_topologyinventory
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
topology_inventory_id = self._task.args.get('topology_inventory_id', None)
url = server + '/api/v2/canvas/topologyinventory/' + str(topology_inventory_id) + '/'
response = requests.get(url,
verify=False,
auth=(user, password))
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,57 @@
#---- list_device
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
device_id = self._task.args.get('device_id', None)
topology = self._task.args.get('topology', None)
name = self._task.args.get('name', None)
x = self._task.args.get('x', None)
y = self._task.args.get('y', None)
id = self._task.args.get('id', None)
type = self._task.args.get('type', None)
interface_id_seq = self._task.args.get('interface_id_seq', None)
process_id_seq = self._task.args.get('process_id_seq', None)
host_id = self._task.args.get('host_id', None)
filter_data = dict(device_id=device_id,
topology=topology,
name=name,
x=x,
y=y,
id=id,
type=type,
interface_id_seq=interface_id_seq,
process_id_seq=process_id_seq,
host_id=host_id,
)
filter_data = {x: y for x, y in filter_data.iteritems() if y is not None}
url = '/api/v2/canvas/device/'
results = []
while url is not None:
url = server + url
data = requests.get(url, verify=False, auth=(user, password), params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
result['ansible_facts'] = {var: results}
return result

View File

@ -0,0 +1,55 @@
#---- list_group
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
group_id = self._task.args.get('group_id', None)
id = self._task.args.get('id', None)
name = self._task.args.get('name', None)
x1 = self._task.args.get('x1', None)
y1 = self._task.args.get('y1', None)
x2 = self._task.args.get('x2', None)
y2 = self._task.args.get('y2', None)
topology = self._task.args.get('topology', None)
type = self._task.args.get('type', None)
filter_data = dict(group_id=group_id,
id=id,
name=name,
x1=x1,
y1=y1,
x2=x2,
y2=y2,
topology=topology,
type=type,
)
filter_data = {x: y for x, y in filter_data.iteritems() if y is not None}
url = '/api/v2/canvas/group/'
results = []
while url is not None:
url = server + url
data = requests.get(url, verify=False, auth=(user, password), params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
result['ansible_facts'] = {var: results}
return result

View File

@ -0,0 +1,43 @@
#---- list_groupdevice
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
group_device_id = self._task.args.get('group_device_id', None)
group = self._task.args.get('group', None)
device = self._task.args.get('device', None)
filter_data = dict(group_device_id=group_device_id,
group=group,
device=device,
)
filter_data = {x: y for x, y in filter_data.iteritems() if y is not None}
url = '/api/v2/canvas/groupdevice/'
results = []
while url is not None:
url = server + url
data = requests.get(url, verify=False, auth=(user, password), params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
result['ansible_facts'] = {var: results}
return result

View File

@ -0,0 +1,45 @@
#---- list_interface
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
interface_id = self._task.args.get('interface_id', None)
device = self._task.args.get('device', None)
name = self._task.args.get('name', None)
id = self._task.args.get('id', None)
filter_data = dict(interface_id=interface_id,
device=device,
name=name,
id=id,
)
filter_data = {x: y for x, y in filter_data.iteritems() if y is not None}
url = '/api/v2/canvas/interface/'
results = []
while url is not None:
url = server + url
data = requests.get(url, verify=False, auth=(user, password), params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
result['ansible_facts'] = {var: results}
return result

View File

@ -0,0 +1,51 @@
#---- list_link
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
link_id = self._task.args.get('link_id', None)
from_device = self._task.args.get('from_device', None)
to_device = self._task.args.get('to_device', None)
from_interface = self._task.args.get('from_interface', None)
to_interface = self._task.args.get('to_interface', None)
id = self._task.args.get('id', None)
name = self._task.args.get('name', None)
filter_data = dict(link_id=link_id,
from_device=from_device,
to_device=to_device,
from_interface=from_interface,
to_interface=to_interface,
id=id,
name=name,
)
filter_data = {x: y for x, y in filter_data.iteritems() if y is not None}
url = '/api/v2/canvas/link/'
results = []
while url is not None:
url = server + url
data = requests.get(url, verify=False, auth=(user, password), params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
result['ansible_facts'] = {var: results}
return result

View File

@ -0,0 +1,47 @@
#---- list_process
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
process_id = self._task.args.get('process_id', None)
device = self._task.args.get('device', None)
name = self._task.args.get('name', None)
type = self._task.args.get('type', None)
id = self._task.args.get('id', None)
filter_data = dict(process_id=process_id,
device=device,
name=name,
type=type,
id=id,
)
filter_data = {x: y for x, y in filter_data.iteritems() if y is not None}
url = '/api/v2/canvas/process/'
results = []
while url is not None:
url = server + url
data = requests.get(url, verify=False, auth=(user, password), params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
result['ansible_facts'] = {var: results}
return result

View File

@ -0,0 +1,47 @@
#---- list_stream
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
stream_id = self._task.args.get('stream_id', None)
from_device = self._task.args.get('from_device', None)
to_device = self._task.args.get('to_device', None)
label = self._task.args.get('label', None)
id = self._task.args.get('id', None)
filter_data = dict(stream_id=stream_id,
from_device=from_device,
to_device=to_device,
label=label,
id=id,
)
filter_data = {x: y for x, y in filter_data.iteritems() if y is not None}
url = '/api/v2/canvas/stream/'
results = []
while url is not None:
url = server + url
data = requests.get(url, verify=False, auth=(user, password), params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
result['ansible_facts'] = {var: results}
return result

View File

@ -0,0 +1,41 @@
#---- list_toolbox
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
toolbox_id = self._task.args.get('toolbox_id', None)
name = self._task.args.get('name', None)
filter_data = dict(toolbox_id=toolbox_id,
name=name,
)
filter_data = {x: y for x, y in filter_data.iteritems() if y is not None}
url = '/api/v2/canvas/toolbox/'
results = []
while url is not None:
url = server + url
data = requests.get(url, verify=False, auth=(user, password), params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
result['ansible_facts'] = {var: results}
return result

View File

@ -0,0 +1,43 @@
#---- list_toolboxitem
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
toolbox_item_id = self._task.args.get('toolbox_item_id', None)
toolbox = self._task.args.get('toolbox', None)
data = self._task.args.get('data', None)
filter_data = dict(toolbox_item_id=toolbox_item_id,
toolbox=toolbox,
data=data,
)
filter_data = {x: y for x, y in filter_data.iteritems() if y is not None}
url = '/api/v2/canvas/toolboxitem/'
results = []
while url is not None:
url = server + url
data = requests.get(url, verify=False, auth=(user, password), params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
result['ansible_facts'] = {var: results}
return result

View File

@ -0,0 +1,55 @@
#---- list_topology
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
topology_id = self._task.args.get('topology_id', None)
name = self._task.args.get('name', None)
scale = self._task.args.get('scale', None)
panX = self._task.args.get('panX', None)
panY = self._task.args.get('panY', None)
device_id_seq = self._task.args.get('device_id_seq', None)
link_id_seq = self._task.args.get('link_id_seq', None)
group_id_seq = self._task.args.get('group_id_seq', None)
stream_id_seq = self._task.args.get('stream_id_seq', None)
filter_data = dict(topology_id=topology_id,
name=name,
scale=scale,
panX=panX,
panY=panY,
device_id_seq=device_id_seq,
link_id_seq=link_id_seq,
group_id_seq=group_id_seq,
stream_id_seq=stream_id_seq,
)
filter_data = {x: y for x, y in filter_data.iteritems() if y is not None}
url = '/api/v2/canvas/topology/'
results = []
while url is not None:
url = server + url
data = requests.get(url, verify=False, auth=(user, password), params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
result['ansible_facts'] = {var: results}
return result

View File

@ -0,0 +1,43 @@
#---- list_topologyinventory
from ansible.plugins.action import ActionBase
import requests
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
topology_inventory_id = self._task.args.get('topology_inventory_id', None)
topology = self._task.args.get('topology', None)
inventory_id = self._task.args.get('inventory_id', None)
filter_data = dict(topology_inventory_id=topology_inventory_id,
topology=topology,
inventory_id=inventory_id,
)
filter_data = {x: y for x, y in filter_data.iteritems() if y is not None}
url = '/api/v2/canvas/topologyinventory/'
results = []
while url is not None:
url = server + url
data = requests.get(url, verify=False, auth=(user, password), params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
result['ansible_facts'] = {var: results}
return result

View File

@ -0,0 +1,56 @@
#---- update_device
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
device_id = self._task.args.get('device_id', None)
topology = self._task.args.get('topology', None)
name = self._task.args.get('name', None)
x = self._task.args.get('x', None)
y = self._task.args.get('y', None)
id = self._task.args.get('id', None)
type = self._task.args.get('type', None)
interface_id_seq = self._task.args.get('interface_id_seq', None)
process_id_seq = self._task.args.get('process_id_seq', None)
host_id = self._task.args.get('host_id', None)
url = server + '/api/v2/canvas/device/' + str(device_id) + '/'
headers = {'content-type': 'application/json'}
data = dict(topology=topology,
name=name,
x=x,
y=y,
id=id,
type=type,
interface_id_seq=interface_id_seq,
process_id_seq=process_id_seq,
host_id=host_id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(url,
data=json.dumps(data),
verify=False,
auth=(user, password),
headers=headers)
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,54 @@
#---- update_group
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
group_id = self._task.args.get('group_id', None)
id = self._task.args.get('id', None)
name = self._task.args.get('name', None)
x1 = self._task.args.get('x1', None)
y1 = self._task.args.get('y1', None)
x2 = self._task.args.get('x2', None)
y2 = self._task.args.get('y2', None)
topology = self._task.args.get('topology', None)
type = self._task.args.get('type', None)
url = server + '/api/v2/canvas/group/' + str(group_id) + '/'
headers = {'content-type': 'application/json'}
data = dict(id=id,
name=name,
x1=x1,
y1=y1,
x2=x2,
y2=y2,
topology=topology,
type=type,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(url,
data=json.dumps(data),
verify=False,
auth=(user, password),
headers=headers)
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,42 @@
#---- update_groupdevice
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
group_device_id = self._task.args.get('group_device_id', None)
group = self._task.args.get('group', None)
device = self._task.args.get('device', None)
url = server + '/api/v2/canvas/groupdevice/' + str(group_device_id) + '/'
headers = {'content-type': 'application/json'}
data = dict(group=group,
device=device,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(url,
data=json.dumps(data),
verify=False,
auth=(user, password),
headers=headers)
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,44 @@
#---- update_interface
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
interface_id = self._task.args.get('interface_id', None)
device = self._task.args.get('device', None)
name = self._task.args.get('name', None)
id = self._task.args.get('id', None)
url = server + '/api/v2/canvas/interface/' + str(interface_id) + '/'
headers = {'content-type': 'application/json'}
data = dict(device=device,
name=name,
id=id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(url,
data=json.dumps(data),
verify=False,
auth=(user, password),
headers=headers)
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,50 @@
#---- update_link
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
link_id = self._task.args.get('link_id', None)
from_device = self._task.args.get('from_device', None)
to_device = self._task.args.get('to_device', None)
from_interface = self._task.args.get('from_interface', None)
to_interface = self._task.args.get('to_interface', None)
id = self._task.args.get('id', None)
name = self._task.args.get('name', None)
url = server + '/api/v2/canvas/link/' + str(link_id) + '/'
headers = {'content-type': 'application/json'}
data = dict(from_device=from_device,
to_device=to_device,
from_interface=from_interface,
to_interface=to_interface,
id=id,
name=name,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(url,
data=json.dumps(data),
verify=False,
auth=(user, password),
headers=headers)
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,46 @@
#---- update_process
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
process_id = self._task.args.get('process_id', None)
device = self._task.args.get('device', None)
name = self._task.args.get('name', None)
type = self._task.args.get('type', None)
id = self._task.args.get('id', None)
url = server + '/api/v2/canvas/process/' + str(process_id) + '/'
headers = {'content-type': 'application/json'}
data = dict(device=device,
name=name,
type=type,
id=id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(url,
data=json.dumps(data),
verify=False,
auth=(user, password),
headers=headers)
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,46 @@
#---- update_stream
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
stream_id = self._task.args.get('stream_id', None)
from_device = self._task.args.get('from_device', None)
to_device = self._task.args.get('to_device', None)
label = self._task.args.get('label', None)
id = self._task.args.get('id', None)
url = server + '/api/v2/canvas/stream/' + str(stream_id) + '/'
headers = {'content-type': 'application/json'}
data = dict(from_device=from_device,
to_device=to_device,
label=label,
id=id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(url,
data=json.dumps(data),
verify=False,
auth=(user, password),
headers=headers)
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,40 @@
#---- update_toolbox
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
toolbox_id = self._task.args.get('toolbox_id', None)
name = self._task.args.get('name', None)
url = server + '/api/v2/canvas/toolbox/' + str(toolbox_id) + '/'
headers = {'content-type': 'application/json'}
data = dict(name=name,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(url,
data=json.dumps(data),
verify=False,
auth=(user, password),
headers=headers)
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,42 @@
#---- update_toolboxitem
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
toolbox_item_id = self._task.args.get('toolbox_item_id', None)
toolbox = self._task.args.get('toolbox', None)
data = self._task.args.get('data', None)
url = server + '/api/v2/canvas/toolboxitem/' + str(toolbox_item_id) + '/'
headers = {'content-type': 'application/json'}
data = dict(toolbox=toolbox,
data=data,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(url,
data=json.dumps(data),
verify=False,
auth=(user, password),
headers=headers)
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,54 @@
#---- update_topology
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
topology_id = self._task.args.get('topology_id', None)
name = self._task.args.get('name', None)
scale = self._task.args.get('scale', None)
panX = self._task.args.get('panX', None)
panY = self._task.args.get('panY', None)
device_id_seq = self._task.args.get('device_id_seq', None)
link_id_seq = self._task.args.get('link_id_seq', None)
group_id_seq = self._task.args.get('group_id_seq', None)
stream_id_seq = self._task.args.get('stream_id_seq', None)
url = server + '/api/v2/canvas/topology/' + str(topology_id) + '/'
headers = {'content-type': 'application/json'}
data = dict(name=name,
scale=scale,
panX=panX,
panY=panY,
device_id_seq=device_id_seq,
link_id_seq=link_id_seq,
group_id_seq=group_id_seq,
stream_id_seq=stream_id_seq,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(url,
data=json.dumps(data),
verify=False,
auth=(user, password),
headers=headers)
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -0,0 +1,42 @@
#---- update_topologyinventory
from ansible.plugins.action import ActionBase
import requests
import json
class ActionModule(ActionBase):
BYPASS_HOST_LOOP = True
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = dict()
result = super(ActionModule, self).run(tmp, task_vars)
server = self._task.args.get('server',
"{0}:{1}".format(self._play_context.remote_addr,
self._play_context.port))
user = self._task.args.get('user', self._play_context.remote_user)
password = self._task.args.get('password', self._play_context.password)
var = self._task.args.get('var', None)
topology_inventory_id = self._task.args.get('topology_inventory_id', None)
topology = self._task.args.get('topology', None)
inventory_id = self._task.args.get('inventory_id', None)
url = server + '/api/v2/canvas/topologyinventory/' + str(topology_inventory_id) + '/'
headers = {'content-type': 'application/json'}
data = dict(topology=topology,
inventory_id=inventory_id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(url,
data=json.dumps(data),
verify=False,
auth=(user, password),
headers=headers)
result['ansible_facts'] = {var: response.json()}
return result

View File

@ -69,7 +69,7 @@ admin.site.register(Link, LinkAdmin)
class TopologyAdmin(admin.ModelAdmin):
fields = ('name', 'scale', 'panX', 'panY', 'device_id_seq', 'link_id_seq', 'group_id_seq', 'stream_id_seq',)
raw_id_fields = ('group_id_seq',)
raw_id_fields = ()
admin.site.register(Topology, TopologyAdmin)

View File

@ -0,0 +1,3 @@
API client for the networking visualization.

View File

@ -0,0 +1,11 @@
class _Settings(object):
def __init__(self):
self.SERVER = 'https://meganuke:8043'
self.SSL_VERIFY = False
self.user = None
self.password = None
settings = _Settings()

View File

@ -0,0 +1,94 @@
#!/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:]))

View File

@ -0,0 +1,3 @@
docopt
requests
pyyaml

View File

@ -0,0 +1,27 @@
import requests
from conf import settings
def get_url():
return settings.SERVER
def get_auth():
return (settings.user, settings.password)
def get_verify():
return settings.SSL_VERIFY
def unpaginate(server, url, verify, auth, filter_data):
results = []
while url is not None:
url = "{0}{1}".format(server, url)
data = requests.get(url, verify=verify, auth=auth, params=filter_data).json()
results.extend(data.get('results', []))
url = data.get('next', None)
return results

View File

@ -0,0 +1,586 @@
import requests
import util
import json
from collections import namedtuple
Device = namedtuple('Device', ['device_id',
'topology',
'name',
'x',
'y',
'id',
'type',
'interface_id_seq',
'process_id_seq',
'host_id',
])
Link = namedtuple('Link', ['link_id',
'from_device',
'to_device',
'from_interface',
'to_interface',
'id',
'name',
])
Topology = namedtuple('Topology', ['topology_id',
'name',
'scale',
'panX',
'panY',
'device_id_seq',
'link_id_seq',
'group_id_seq',
'stream_id_seq',
])
Interface = namedtuple('Interface', ['interface_id',
'device',
'name',
'id',
])
Group = namedtuple('Group', ['group_id',
'id',
'name',
'x1',
'y1',
'x2',
'y2',
'topology',
'type',
'inventory_group_id',
])
GroupDevice = namedtuple('GroupDevice', ['group_device_id',
'group',
'device',
])
Stream = namedtuple('Stream', ['stream_id',
'from_device',
'to_device',
'label',
'id',
])
Process = namedtuple('Process', ['process_id',
'device',
'name',
'type',
'id',
])
Toolbox = namedtuple('Toolbox', ['toolbox_id',
'name',
])
ToolboxItem = namedtuple('ToolboxItem', ['toolbox_item_id',
'toolbox',
'data',
])
TopologyInventory = namedtuple('TopologyInventory', ['topology_inventory_id',
'topology',
'inventory_id',
])
def list_device(**kwargs):
response = util.unpaginate(util.get_url(), '/network_ui/api/v1/device/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_device(device_id):
response = requests.get(util.get_url() + "/network_ui/api/v1/device/" + str(device_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_device(topology, name, x, y, id, type, interface_id_seq=0, process_id_seq=0, host_id=0,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/network_ui/api/v1/device/", data=json.dumps(dict(topology=topology,
name=name,
x=x,
y=y,
id=id,
type=type,
interface_id_seq=interface_id_seq,
process_id_seq=process_id_seq,
host_id=host_id,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_device(device_id, topology=None, name=None, x=None, y=None, id=None, type=None, interface_id_seq=None, process_id_seq=None, host_id=None,):
headers = {'content-type': 'application/json'}
data = dict(topology=topology,
name=name,
x=x,
y=y,
id=id,
type=type,
interface_id_seq=interface_id_seq,
process_id_seq=process_id_seq,
host_id=host_id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/network_ui/api/v1/device/" + str(device_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_device(device_id):
response = requests.delete(util.get_url() + "/network_ui/api/v1/device/" + str(device_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_link(**kwargs):
response = util.unpaginate(util.get_url(), '/network_ui/api/v1/link/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_link(link_id):
response = requests.get(util.get_url() + "/network_ui/api/v1/link/" + str(link_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_link(from_device, to_device, from_interface, to_interface, id, name,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/network_ui/api/v1/link/", data=json.dumps(dict(from_device=from_device,
to_device=to_device,
from_interface=from_interface,
to_interface=to_interface,
id=id,
name=name,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_link(link_id, from_device=None, to_device=None, from_interface=None, to_interface=None, id=None, name=None,):
headers = {'content-type': 'application/json'}
data = dict(from_device=from_device,
to_device=to_device,
from_interface=from_interface,
to_interface=to_interface,
id=id,
name=name,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/network_ui/api/v1/link/" + str(link_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_link(link_id):
response = requests.delete(util.get_url() + "/network_ui/api/v1/link/" + str(link_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_topology(**kwargs):
response = util.unpaginate(util.get_url(), '/network_ui/api/v1/topology/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_topology(topology_id):
response = requests.get(util.get_url() + "/network_ui/api/v1/topology/" + str(topology_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_topology(name, scale, panX, panY, device_id_seq=0, link_id_seq=0, group_id_seq=0, stream_id_seq=0,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/network_ui/api/v1/topology/", data=json.dumps(dict(name=name,
scale=scale,
panX=panX,
panY=panY,
device_id_seq=device_id_seq,
link_id_seq=link_id_seq,
group_id_seq=group_id_seq,
stream_id_seq=stream_id_seq,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_topology(topology_id, name=None, scale=None, panX=None, panY=None, device_id_seq=None, link_id_seq=None, group_id_seq=None, stream_id_seq=None,):
headers = {'content-type': 'application/json'}
data = dict(name=name,
scale=scale,
panX=panX,
panY=panY,
device_id_seq=device_id_seq,
link_id_seq=link_id_seq,
group_id_seq=group_id_seq,
stream_id_seq=stream_id_seq,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/network_ui/api/v1/topology/" + str(topology_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_topology(topology_id):
response = requests.delete(util.get_url() + "/network_ui/api/v1/topology/" + str(topology_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_interface(**kwargs):
response = util.unpaginate(util.get_url(), '/network_ui/api/v1/interface/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_interface(interface_id):
response = requests.get(util.get_url() + "/network_ui/api/v1/interface/" + str(interface_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_interface(device, name, id,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/network_ui/api/v1/interface/", data=json.dumps(dict(device=device,
name=name,
id=id,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_interface(interface_id, device=None, name=None, id=None,):
headers = {'content-type': 'application/json'}
data = dict(device=device,
name=name,
id=id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/network_ui/api/v1/interface/" + str(interface_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_interface(interface_id):
response = requests.delete(util.get_url() + "/network_ui/api/v1/interface/" + str(interface_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_group(**kwargs):
response = util.unpaginate(util.get_url(), '/network_ui/api/v1/group/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_group(group_id):
response = requests.get(util.get_url() + "/network_ui/api/v1/group/" + str(group_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_group(id, name, x1, y1, x2, y2, topology, type,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/network_ui/api/v1/group/", data=json.dumps(dict(id=id,
name=name,
x1=x1,
y1=y1,
x2=x2,
y2=y2,
topology=topology,
type=type,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_group(group_id, id=None, name=None, x1=None, y1=None, x2=None, y2=None, topology=None, type=None,):
headers = {'content-type': 'application/json'}
data = dict(id=id,
name=name,
x1=x1,
y1=y1,
x2=x2,
y2=y2,
topology=topology,
type=type,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/network_ui/api/v1/group/" + str(group_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_group(group_id):
response = requests.delete(util.get_url() + "/network_ui/api/v1/group/" + str(group_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_groupdevice(**kwargs):
response = util.unpaginate(util.get_url(), '/network_ui/api/v1/groupdevice/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_groupdevice(group_device_id):
response = requests.get(util.get_url() + "/network_ui/api/v1/groupdevice/" + str(group_device_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_groupdevice(group, device,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/network_ui/api/v1/groupdevice/", data=json.dumps(dict(group=group,
device=device,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_groupdevice(group_device_id, group=None, device=None,):
headers = {'content-type': 'application/json'}
data = dict(group=group,
device=device,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/network_ui/api/v1/groupdevice/" + str(group_device_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_groupdevice(group_device_id):
response = requests.delete(util.get_url() + "/network_ui/api/v1/groupdevice/" + str(group_device_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_stream(**kwargs):
response = util.unpaginate(util.get_url(), '/network_ui/api/v1/stream/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_stream(stream_id):
response = requests.get(util.get_url() + "/network_ui/api/v1/stream/" + str(stream_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_stream(from_device, to_device, label, id=0,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/network_ui/api/v1/stream/", data=json.dumps(dict(from_device=from_device,
to_device=to_device,
label=label,
id=id,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_stream(stream_id, from_device=None, to_device=None, label=None, id=None,):
headers = {'content-type': 'application/json'}
data = dict(from_device=from_device,
to_device=to_device,
label=label,
id=id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/network_ui/api/v1/stream/" + str(stream_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_stream(stream_id):
response = requests.delete(util.get_url() + "/network_ui/api/v1/stream/" + str(stream_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_process(**kwargs):
response = util.unpaginate(util.get_url(), '/network_ui/api/v1/process/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_process(process_id):
response = requests.get(util.get_url() + "/network_ui/api/v1/process/" + str(process_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_process(device, name, type, id=0,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/network_ui/api/v1/process/", data=json.dumps(dict(device=device,
name=name,
type=type,
id=id,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_process(process_id, device=None, name=None, type=None, id=None,):
headers = {'content-type': 'application/json'}
data = dict(device=device,
name=name,
type=type,
id=id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/network_ui/api/v1/process/" + str(process_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_process(process_id):
response = requests.delete(util.get_url() + "/network_ui/api/v1/process/" + str(process_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_toolbox(**kwargs):
response = util.unpaginate(util.get_url(), '/network_ui/api/v1/toolbox/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_toolbox(toolbox_id):
response = requests.get(util.get_url() + "/network_ui/api/v1/toolbox/" + str(toolbox_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_toolbox(name,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/network_ui/api/v1/toolbox/", data=json.dumps(dict(name=name,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_toolbox(toolbox_id, name=None,):
headers = {'content-type': 'application/json'}
data = dict(name=name,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/network_ui/api/v1/toolbox/" + str(toolbox_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_toolbox(toolbox_id):
response = requests.delete(util.get_url() + "/network_ui/api/v1/toolbox/" + str(toolbox_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_toolboxitem(**kwargs):
response = util.unpaginate(util.get_url(), '/network_ui/api/v1/toolboxitem/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_toolboxitem(toolbox_item_id):
response = requests.get(util.get_url() + "/network_ui/api/v1/toolboxitem/" + str(toolbox_item_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_toolboxitem(toolbox, data,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/network_ui/api/v1/toolboxitem/", data=json.dumps(dict(toolbox=toolbox,
data=data,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_toolboxitem(toolbox_item_id, toolbox=None, data=None,):
headers = {'content-type': 'application/json'}
data = dict(toolbox=toolbox,
data=data,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/network_ui/api/v1/toolboxitem/" + str(toolbox_item_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_toolboxitem(toolbox_item_id):
response = requests.delete(util.get_url() + "/network_ui/api/v1/toolboxitem/" + str(toolbox_item_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_topologyinventory(**kwargs):
response = util.unpaginate(util.get_url(), '/network_ui/api/v1/topologyinventory/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_topologyinventory(topology_inventory_id):
response = requests.get(util.get_url() + "/network_ui/api/v1/topologyinventory/" +
str(topology_inventory_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_topologyinventory(topology, inventory_id,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/network_ui/api/v1/topologyinventory/", data=json.dumps(dict(topology=topology,
inventory_id=inventory_id,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_topologyinventory(topology_inventory_id, topology=None, inventory_id=None,):
headers = {'content-type': 'application/json'}
data = dict(topology=topology,
inventory_id=inventory_id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/network_ui/api/v1/topologyinventory/" + str(topology_inventory_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_topologyinventory(topology_inventory_id):
response = requests.delete(util.get_url() + "/network_ui/api/v1/topologyinventory/" +
str(topology_inventory_id), verify=util.get_verify(), auth=util.get_auth())
return response

View File

@ -0,0 +1,500 @@
import requests
import util
import json
def list_device(**kwargs):
response = util.unpaginate(util.get_url(), '/api/v2/canvas/device/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_device(device_id):
response = requests.get(util.get_url() + "/api/v2/canvas/device/" + str(device_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_device(topology, name, x, y, id, type, interface_id_seq=0, process_id_seq=0, host_id=0,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/api/v2/canvas/device/", data=json.dumps(dict(topology=topology,
name=name,
x=x,
y=y,
id=id,
type=type,
interface_id_seq=interface_id_seq,
process_id_seq=process_id_seq,
host_id=host_id,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_device(device_id, topology=None, name=None, x=None, y=None, id=None, type=None, interface_id_seq=None, process_id_seq=None, host_id=None,):
headers = {'content-type': 'application/json'}
data = dict(topology=topology,
name=name,
x=x,
y=y,
id=id,
type=type,
interface_id_seq=interface_id_seq,
process_id_seq=process_id_seq,
host_id=host_id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/api/v2/canvas/device/" + str(device_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_device(device_id):
response = requests.delete(util.get_url() + "/api/v2/canvas/device/" + str(device_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_link(**kwargs):
response = util.unpaginate(util.get_url(), '/api/v2/canvas/link/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_link(link_id):
response = requests.get(util.get_url() + "/api/v2/canvas/link/" + str(link_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_link(from_device, to_device, from_interface, to_interface, id, name,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/api/v2/canvas/link/", data=json.dumps(dict(from_device=from_device,
to_device=to_device,
from_interface=from_interface,
to_interface=to_interface,
id=id,
name=name,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_link(link_id, from_device=None, to_device=None, from_interface=None, to_interface=None, id=None, name=None,):
headers = {'content-type': 'application/json'}
data = dict(from_device=from_device,
to_device=to_device,
from_interface=from_interface,
to_interface=to_interface,
id=id,
name=name,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/api/v2/canvas/link/" + str(link_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_link(link_id):
response = requests.delete(util.get_url() + "/api/v2/canvas/link/" + str(link_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_topology(**kwargs):
response = util.unpaginate(util.get_url(), '/api/v2/canvas/topology/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_topology(topology_id):
response = requests.get(util.get_url() + "/api/v2/canvas/topology/" + str(topology_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_topology(name, scale, panX, panY, device_id_seq=0, link_id_seq=0, group_id_seq=0, stream_id_seq=0,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/api/v2/canvas/topology/", data=json.dumps(dict(name=name,
scale=scale,
panX=panX,
panY=panY,
device_id_seq=device_id_seq,
link_id_seq=link_id_seq,
group_id_seq=group_id_seq,
stream_id_seq=stream_id_seq,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_topology(topology_id, name=None, scale=None, panX=None, panY=None, device_id_seq=None, link_id_seq=None, group_id_seq=None, stream_id_seq=None,):
headers = {'content-type': 'application/json'}
data = dict(name=name,
scale=scale,
panX=panX,
panY=panY,
device_id_seq=device_id_seq,
link_id_seq=link_id_seq,
group_id_seq=group_id_seq,
stream_id_seq=stream_id_seq,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/api/v2/canvas/topology/" + str(topology_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_topology(topology_id):
response = requests.delete(util.get_url() + "/api/v2/canvas/topology/" + str(topology_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_interface(**kwargs):
response = util.unpaginate(util.get_url(), '/api/v2/canvas/interface/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_interface(interface_id):
response = requests.get(util.get_url() + "/api/v2/canvas/interface/" + str(interface_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_interface(device, name, id,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/api/v2/canvas/interface/", data=json.dumps(dict(device=device,
name=name,
id=id,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_interface(interface_id, device=None, name=None, id=None,):
headers = {'content-type': 'application/json'}
data = dict(device=device,
name=name,
id=id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/api/v2/canvas/interface/" + str(interface_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_interface(interface_id):
response = requests.delete(util.get_url() + "/api/v2/canvas/interface/" + str(interface_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_group(**kwargs):
response = util.unpaginate(util.get_url(), '/api/v2/canvas/group/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_group(group_id):
response = requests.get(util.get_url() + "/api/v2/canvas/group/" + str(group_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_group(id, name, x1, y1, x2, y2, topology, type,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/api/v2/canvas/group/", data=json.dumps(dict(id=id,
name=name,
x1=x1,
y1=y1,
x2=x2,
y2=y2,
topology=topology,
type=type,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_group(group_id, id=None, name=None, x1=None, y1=None, x2=None, y2=None, topology=None, type=None,):
headers = {'content-type': 'application/json'}
data = dict(id=id,
name=name,
x1=x1,
y1=y1,
x2=x2,
y2=y2,
topology=topology,
type=type,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/api/v2/canvas/group/" + str(group_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_group(group_id):
response = requests.delete(util.get_url() + "/api/v2/canvas/group/" + str(group_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_groupdevice(**kwargs):
response = util.unpaginate(util.get_url(), '/api/v2/canvas/groupdevice/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_groupdevice(group_device_id):
response = requests.get(util.get_url() + "/api/v2/canvas/groupdevice/" + str(group_device_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_groupdevice(group, device,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/api/v2/canvas/groupdevice/", data=json.dumps(dict(group=group,
device=device,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_groupdevice(group_device_id, group=None, device=None,):
headers = {'content-type': 'application/json'}
data = dict(group=group,
device=device,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/api/v2/canvas/groupdevice/" + str(group_device_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_groupdevice(group_device_id):
response = requests.delete(util.get_url() + "/api/v2/canvas/groupdevice/" + str(group_device_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_stream(**kwargs):
response = util.unpaginate(util.get_url(), '/api/v2/canvas/stream/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_stream(stream_id):
response = requests.get(util.get_url() + "/api/v2/canvas/stream/" + str(stream_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_stream(from_device, to_device, label, id=0,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/api/v2/canvas/stream/", data=json.dumps(dict(from_device=from_device,
to_device=to_device,
label=label,
id=id,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_stream(stream_id, from_device=None, to_device=None, label=None, id=None,):
headers = {'content-type': 'application/json'}
data = dict(from_device=from_device,
to_device=to_device,
label=label,
id=id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/api/v2/canvas/stream/" + str(stream_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_stream(stream_id):
response = requests.delete(util.get_url() + "/api/v2/canvas/stream/" + str(stream_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_process(**kwargs):
response = util.unpaginate(util.get_url(), '/api/v2/canvas/process/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_process(process_id):
response = requests.get(util.get_url() + "/api/v2/canvas/process/" + str(process_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_process(device, name, type, id=0,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/api/v2/canvas/process/", data=json.dumps(dict(device=device,
name=name,
type=type,
id=id,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_process(process_id, device=None, name=None, type=None, id=None,):
headers = {'content-type': 'application/json'}
data = dict(device=device,
name=name,
type=type,
id=id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/api/v2/canvas/process/" + str(process_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_process(process_id):
response = requests.delete(util.get_url() + "/api/v2/canvas/process/" + str(process_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_toolbox(**kwargs):
response = util.unpaginate(util.get_url(), '/api/v2/canvas/toolbox/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_toolbox(toolbox_id):
response = requests.get(util.get_url() + "/api/v2/canvas/toolbox/" + str(toolbox_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_toolbox(name,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/api/v2/canvas/toolbox/", data=json.dumps(dict(name=name,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_toolbox(toolbox_id, name=None,):
headers = {'content-type': 'application/json'}
data = dict(name=name,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/api/v2/canvas/toolbox/" + str(toolbox_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_toolbox(toolbox_id):
response = requests.delete(util.get_url() + "/api/v2/canvas/toolbox/" + str(toolbox_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_toolboxitem(**kwargs):
response = util.unpaginate(util.get_url(), '/api/v2/canvas/toolboxitem/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_toolboxitem(toolbox_item_id):
response = requests.get(util.get_url() + "/api/v2/canvas/toolboxitem/" + str(toolbox_item_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_toolboxitem(toolbox, data,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/api/v2/canvas/toolboxitem/", data=json.dumps(dict(toolbox=toolbox,
data=data,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_toolboxitem(toolbox_item_id, toolbox=None, data=None,):
headers = {'content-type': 'application/json'}
data = dict(toolbox=toolbox,
data=data,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/api/v2/canvas/toolboxitem/" + str(toolbox_item_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_toolboxitem(toolbox_item_id):
response = requests.delete(util.get_url() + "/api/v2/canvas/toolboxitem/" + str(toolbox_item_id), verify=util.get_verify(), auth=util.get_auth())
return response
def list_topologyinventory(**kwargs):
response = util.unpaginate(util.get_url(), '/api/v2/canvas/topologyinventory/', util.get_verify(), util.get_auth(), kwargs)
return response
def get_topologyinventory(topology_inventory_id):
response = requests.get(util.get_url() + "/api/v2/canvas/topologyinventory/" + str(topology_inventory_id), verify=util.get_verify(), auth=util.get_auth())
return response.json()
def create_topologyinventory(topology, inventory_id,):
headers = {'content-type': 'application/json'}
response = requests.post(util.get_url() + "/api/v2/canvas/topologyinventory/", data=json.dumps(dict(topology=topology,
inventory_id=inventory_id,
)),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response.json()
def update_topologyinventory(topology_inventory_id, topology=None, inventory_id=None,):
headers = {'content-type': 'application/json'}
data = dict(topology=topology,
inventory_id=inventory_id,
)
data = {x: y for x, y in data.iteritems() if y is not None}
response = requests.patch(util.get_url() + "/api/v2/canvas/topologyinventory/" + str(topology_inventory_id) + "/",
data=json.dumps(data),
verify=util.get_verify(),
auth=util.get_auth(),
headers=headers)
return response
def delete_topologyinventory(topology_inventory_id):
response = requests.delete(util.get_url() + "/api/v2/canvas/topologyinventory/" +
str(topology_inventory_id), verify=util.get_verify(), auth=util.get_auth())
return response

View File

@ -0,0 +1,66 @@
models:
- name: Device
api: true
v1_end_point: /network_ui/api/v1/device/
v2_end_point: /api/v2/canvas/device/
topology_id_query: topology_id
v2_lookup_field: host_id
- name: Link
api: true
v1_end_point: /network_ui/api/v1/link/
v2_end_point: /api/v2/canvas/link/
topology_id_query: from_device__topology_id
create_transform:
id: id
name: name
from_device__id: from_device_id
from_interface__id: from_interface_id
to_device__id: to_device_id
to_interface__id: to_interface_id
- name: Interface
api: true
v1_end_point: /network_ui/api/v1/interface/
v2_end_point: /api/v2/canvas/interface/
topology_id_query: device__topology_id
create_transform:
id: id
name: name
device__id: device_id
- name: Group
api: true
v1_end_point: /network_ui/api/v1/group/
v2_end_point: /api/v2/canvas/group/
topology_id_query: topology_id
- name: GroupDevice
api: true
v1_end_point: /network_ui/api/v1/groupdevice/
v2_end_point: /api/v2/canvas/groupdevice/
topology_id_query: group__topology_id
- name: Topology
api: true
v1_end_point: /network_ui/api/v1/topology/
v2_end_point: /api/v2/canvas/topology/
topology_id_query: topology_id
- name: TopologyInventory
api: true
v1_end_point: /network_ui/api/v1/topologyinventory/
v2_end_point: /api/v2/canvas/topologyinventory/
topology_id_query: topology_id
- name: Toolbox
api: true
v1_end_point: /network_ui/api/v1/toolbox/
v2_end_point: /api/v2/canvas/toolbox/
- name: ToolboxItem
api: true
v1_end_point: /network_ui/api/v1/toolboxitem/
v2_end_point: /api/v2/canvas/toolboxitem/
- name: Stream
api: true
v1_end_point: /network_ui/api/v1/stream/
v2_end_point: /api/v2/canvas/stream/
topology_id_query: from_device__topology_id
- name: Process
api: true
v1_end_point: /network_ui/api/v1/process/
v2_end_point: /api/v2/canvas/process/
topology_id_query: device__topology_id

View File

@ -0,0 +1,49 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Usage:
merge_yaml [options] <a> <b>
Options:
-h, --help Show this page
--debug Show debug logging
--verbose Show verbose logging
"""
from docopt import docopt
import logging
import sys
import yaml
logger = logging.getLogger('merge_yaml')
def main(args=None):
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)
with open(parsed_args['<a>']) as f:
a = yaml.load(f.read())
with open(parsed_args['<b>']) as f:
b = yaml.load(f.read())
a_models = {x['name']: x for x in a.get('models', [])}
for model in b.get('models', []):
for key, value in model.iteritems():
a_models[model['name']][key] = value
print (yaml.safe_dump(a, default_flow_style=False))
return 0
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))

View File

@ -1,7 +1,9 @@
app: awx.network_ui
external_models: []
models:
- display: name
- api: true
display: name
end_point: /network_ui/api/v1/device/
fields:
- name: device_id
pk: true
@ -32,9 +34,21 @@ models:
name: host_id
type: IntegerField
name: Device
topology_id_query: topology_id
v1_end_point: /network_ui/api/v1/device/
v2_end_point: /api/v2/canvas/device/
v2_lookup_field: host_id
x: 348
y: 124
- fields:
- api: true
create_transform:
from_device__id: from_device_id
from_interface__id: from_interface_id
id: id
name: name
to_device__id: to_device_id
to_interface__id: to_interface_id
fields:
- name: link_id
pk: true
type: AutoField
@ -64,9 +78,14 @@ models:
name: name
type: CharField
name: Link
topology_id_query: from_device__topology_id
v1_end_point: /network_ui/api/v1/link/
v2_end_point: /api/v2/canvas/link/
x: 837
y: 10
- display: name
- api: true
display: name
end_point: /network_ui/api/v1/topology/
fields:
- name: topology_id
pk: true
@ -88,13 +107,14 @@ models:
type: IntegerField
- default: 0
name: group_id_seq
ref: Topology
ref_field: group_id_seq
type: IntegerField
- default: 0
name: stream_id_seq
type: IntegerField
name: Topology
topology_id_query: topology_id
v1_end_point: /network_ui/api/v1/topology/
v2_end_point: /api/v2/canvas/topology/
x: 111
y: 127
- fields:
@ -141,7 +161,13 @@ models:
name: MessageType
x: -501
y: 428
- display: name
- api: true
create_transform:
device__id: device_id
id: id
name: name
display: name
end_point: /network_ui/api/v1/interface/
fields:
- name: interface_id
pk: true
@ -156,9 +182,14 @@ models:
- name: id
type: IntegerField
name: Interface
topology_id_query: device__topology_id
v1_end_point: /network_ui/api/v1/interface/
v2_end_point: /api/v2/canvas/interface/
x: 1157
y: 337
- fields:
- api: true
end_point: /network_ui/api/v1/group/
fields:
- name: group_id
pk: true
type: AutoField
@ -183,9 +214,14 @@ models:
name: type
type: CharField
name: Group
topology_id_query: topology_id
v1_end_point: /network_ui/api/v1/group/
v2_end_point: /api/v2/canvas/group/
x: 407
y: -379
- fields:
- api: true
end_point: /network_ui/api/v1/groupdevice/
fields:
- name: group_device_id
pk: true
type: AutoField
@ -198,6 +234,9 @@ models:
ref_field: device_id
type: ForeignKey
name: GroupDevice
topology_id_query: group__topology_id
v1_end_point: /network_ui/api/v1/groupdevice/
v2_end_point: /api/v2/canvas/groupdevice/
x: 739
y: -234
- fields:
@ -255,7 +294,9 @@ models:
name: DataSheet
x: -207
y: -282
- fields:
- api: true
end_point: /network_ui/api/v1/stream/
fields:
- name: stream_id
pk: true
ref: Stream
@ -278,9 +319,14 @@ models:
name: id
type: IntegerField
name: Stream
topology_id_query: from_device__topology_id
v1_end_point: /network_ui/api/v1/stream/
v2_end_point: /api/v2/canvas/stream/
x: 709
y: 527
- fields:
- api: true
end_point: /network_ui/api/v1/process/
fields:
- name: process_id
pk: true
type: AutoField
@ -298,9 +344,14 @@ models:
name: id
type: IntegerField
name: Process
topology_id_query: device__topology_id
v1_end_point: /network_ui/api/v1/process/
v2_end_point: /api/v2/canvas/process/
x: 654
y: 778
- fields:
- api: true
end_point: /network_ui/api/v1/toolbox/
fields:
- name: toolbox_id
pk: true
type: AutoField
@ -308,9 +359,13 @@ models:
name: name
type: CharField
name: Toolbox
v1_end_point: /network_ui/api/v1/toolbox/
v2_end_point: /api/v2/canvas/toolbox/
x: 179
y: 644
- fields:
- api: true
end_point: /network_ui/api/v1/toolboxitem/
fields:
- name: toolbox_item_id
pk: true
type: AutoField
@ -321,6 +376,8 @@ models:
- name: data
type: TextField
name: ToolboxItem
v1_end_point: /network_ui/api/v1/toolboxitem/
v2_end_point: /api/v2/canvas/toolboxitem/
x: 391
y: 645
- fields:
@ -352,7 +409,9 @@ models:
name: FSMTrace
x: -872
y: 507
- fields:
- api: true
end_point: /network_ui/api/v1/topologyinventory/
fields:
- name: topology_inventory_id
pk: true
type: AutoField
@ -363,6 +422,9 @@ models:
- name: inventory_id
type: IntegerField
name: TopologyInventory
topology_id_query: topology_id
v1_end_point: /network_ui/api/v1/topologyinventory/
v2_end_point: /api/v2/canvas/topologyinventory/
x: -226
y: -19
- fields:
@ -494,3 +556,4 @@ view:
panX: 213.729555519212
panY: 189.446959094643
scaleXY: 0.69

View File

@ -0,0 +1,526 @@
app: awx.network_ui
external_models: []
models:
- api: true
display: name
fields:
- name: device_id
pk: true
type: AutoField
- name: topology
ref: Topology
ref_field: topology_id
type: ForeignKey
- len: 200
name: name
type: CharField
- name: x
type: IntegerField
- name: y
type: IntegerField
- name: id
type: IntegerField
- len: 200
name: type
type: CharField
- default: 0
name: interface_id_seq
type: IntegerField
- default: 0
name: process_id_seq
type: IntegerField
- default: 0
name: host_id
type: IntegerField
name: Device
topology_id_query: topology_id
x: 348
y: 124
- api: true
create_transform:
from_device__id: from_device_id
from_interface__id: from_interface_id
id: id
name: name
to_device__id: to_device_id
to_interface__id: to_interface_id
fields:
- name: link_id
pk: true
type: AutoField
- name: from_device
ref: Device
ref_field: device_id
related_name: from_link
type: ForeignKey
- name: to_device
ref: Device
ref_field: device_id
related_name: to_link
type: ForeignKey
- name: from_interface
ref: Interface
ref_field: interface_id
related_name: from_link
type: ForeignKey
- name: to_interface
ref: Interface
ref_field: interface_id
related_name: to_link
type: ForeignKey
- name: id
type: IntegerField
- len: 200
name: name
type: CharField
name: Link
topology_id_query: from_device__topology_id
x: 837
y: 10
- api: true
display: name
fields:
- name: topology_id
pk: true
type: AutoField
- len: 200
name: name
type: CharField
- name: scale
type: FloatField
- name: panX
type: FloatField
- name: panY
type: FloatField
- default: 0
name: device_id_seq
type: IntegerField
- default: 0
name: link_id_seq
type: IntegerField
- default: 0
name: group_id_seq
type: IntegerField
- default: 0
name: stream_id_seq
type: IntegerField
name: Topology
topology_id_query: topology_id
x: 111
y: 127
- fields:
- name: client_id
pk: true
type: AutoField
name: Client
x: -518
y: 138
- fields:
- name: topology_history_id
pk: true
type: AutoField
- name: topology
ref: Topology
ref_field: topology_id
type: ForeignKey
- name: client
ref: Client
ref_field: client_id
type: ForeignKey
- name: message_type
ref: MessageType
ref_field: message_type_id
type: ForeignKey
- name: message_id
type: IntegerField
- name: message_data
type: TextField
- default: false
name: undone
type: BooleanField
name: TopologyHistory
x: -205
y: 282
- display: name
fields:
- name: message_type_id
pk: true
type: AutoField
- len: 200
name: name
type: CharField
name: MessageType
x: -501
y: 428
- api: true
create_transform:
device__id: device_id
id: id
name: name
display: name
fields:
- name: interface_id
pk: true
type: AutoField
- name: device
ref: Device
ref_field: device_id
type: ForeignKey
- len: 200
name: name
type: CharField
- name: id
type: IntegerField
name: Interface
topology_id_query: device__topology_id
x: 1157
y: 337
- api: true
fields:
- name: group_id
pk: true
type: AutoField
- name: id
type: IntegerField
- len: 200
name: name
type: CharField
- name: x1
type: IntegerField
- name: y1
type: IntegerField
- name: x2
type: IntegerField
- name: y2
type: IntegerField
- name: topology
ref: Topology
ref_field: topology_id
type: ForeignKey
- len: 200
name: type
type: CharField
name: Group
topology_id_query: topology_id
x: 407
y: -379
- api: true
fields:
- name: group_device_id
pk: true
type: AutoField
- name: group
ref: Group
ref_field: group_id
type: ForeignKey
- name: device
ref: Device
ref_field: device_id
type: ForeignKey
name: GroupDevice
topology_id_query: group__topology_id
x: 739
y: -234
- fields:
- name: data_binding_id
pk: true
type: AutoField
- name: column
type: IntegerField
- name: row
type: IntegerField
- len: 200
name: table
type: CharField
- name: primary_key_id
type: IntegerField
- len: 200
name: field
type: CharField
- name: data_type
ref: DataType
ref_field: data_type_id
type: ForeignKey
- name: sheet
ref: DataSheet
ref_field: data_sheet_id
type: ForeignKey
name: DataBinding
x: -515
y: -370
- fields:
- name: data_type_id
pk: true
type: AutoField
- len: 200
name: type_name
type: CharField
name: DataType
x: -782
y: -172
- fields:
- name: data_sheet_id
pk: true
type: AutoField
- len: 200
name: name
type: CharField
- name: topology
ref: Topology
ref_field: topology_id
type: ForeignKey
- name: client
ref: Client
ref_field: client_id
type: ForeignKey
name: DataSheet
x: -207
y: -282
- api: true
fields:
- name: stream_id
pk: true
ref: Stream
ref_field: stream_id
type: AutoField
- name: from_device
ref: Device
ref_field: device_id
related_name: from_stream
type: ForeignKey
- name: to_device
ref: Device
ref_field: device_id
related_name: to_stream
type: ForeignKey
- len: 200
name: label
type: CharField
- default: 0
name: id
type: IntegerField
name: Stream
topology_id_query: from_device__topology_id
x: 709
y: 527
- api: true
fields:
- name: process_id
pk: true
type: AutoField
- name: device
ref: Device
ref_field: device_id
type: ForeignKey
- len: 200
name: name
type: CharField
- len: 200
name: type
type: CharField
- default: 0
name: id
type: IntegerField
name: Process
topology_id_query: device__topology_id
x: 654
y: 778
- api: true
fields:
- name: toolbox_id
pk: true
type: AutoField
- len: 200
name: name
type: CharField
name: Toolbox
x: 179
y: 644
- api: true
fields:
- name: toolbox_item_id
pk: true
type: AutoField
- name: toolbox
ref: Toolbox
ref_field: toolbox_id
type: ForeignKey
- name: data
type: TextField
name: ToolboxItem
x: 391
y: 645
- fields:
- name: fsm_trace_id
pk: true
type: AutoField
- len: 200
name: fsm_name
type: CharField
- len: 200
name: from_state
type: CharField
- len: 200
name: to_state
type: CharField
- len: 200
name: message_type
type: CharField
- name: client
ref: Client
ref_field: client_id
type: ForeignKey
- default: 0
name: trace_session_id
type: IntegerField
- default: 0
name: order
type: IntegerField
name: FSMTrace
x: -872
y: 507
- api: true
fields:
- name: topology_inventory_id
pk: true
type: AutoField
- name: topology
ref: Topology
ref_field: topology_id
type: ForeignKey
- name: inventory_id
type: IntegerField
name: TopologyInventory
topology_id_query: topology_id
x: -226
y: -19
- fields:
- name: event_trace_id
pk: true
type: AutoField
- name: client
ref: Client
ref_field: client_id
type: ForeignKey
- default: 0
name: trace_session_id
type: IntegerField
- name: event_data
type: TextField
- name: message_id
type: IntegerField
name: EventTrace
x: -1087
y: 202
- fields:
- name: coverage_id
pk: true
type: AutoField
- name: coverage_data
type: TextField
- name: test_result
ref: TestResult
ref_field: test_result_id
type: ForeignKey
name: Coverage
x: -1068
y: -4
- fields:
- name: topology_snapshot_id
pk: true
type: AutoField
- name: client
ref: Client
ref_field: client_id
type: ForeignKey
- name: topology_id
type: IntegerField
- name: trace_session_id
type: IntegerField
- name: snapshot_data
ref: TopologySnapshot
ref_field: snapshot_data
type: TextField
- name: order
type: IntegerField
name: TopologySnapshot
x: -1123
y: -277
- fields:
- name: test_case_id
pk: true
type: AutoField
- len: 200
name: name
ref: TestCase
ref_field: name
type: CharField
- name: test_case_data
type: TextField
name: TestCase
x: -1642
y: -38
- fields:
- name: result_id
pk: true
type: AutoField
- len: 20
name: name
type: CharField
name: Result
x: -1610
y: 120
- fields:
- name: code_under_test_id
pk: true
ref: CodeUnderTest
ref_field: code_under_test_id
type: AutoField
- name: version_x
type: IntegerField
- name: version_y
type: IntegerField
- name: version_z
type: IntegerField
- name: commits_since
type: IntegerField
- len: 40
name: commit_hash
type: CharField
name: CodeUnderTest
x: -1612
y: 259
- fields:
- name: test_result_id
pk: true
type: AutoField
- name: test_case
ref: TestCase
ref_field: test_case_id
type: ForeignKey
- name: result
ref: Result
ref_field: result_id
type: ForeignKey
- name: code_under_test
ref: CodeUnderTest
ref_field: code_under_test_id
type: ForeignKey
- name: time
type: DateTimeField
- default: 0
name: id
type: IntegerField
- name: client
ref: Client
ref_field: client_id
type: ForeignKey
name: TestResult
x: -1336
y: -49
modules: []
view:
panX: 213.729555519212
panY: 189.446959094643
scaleXY: 0.69

View File

@ -0,0 +1 @@
#---- create_device

View File

@ -0,0 +1 @@
#---- create_group

View File

@ -0,0 +1 @@
#---- create_groupdevice

View File

@ -0,0 +1 @@
#---- create_interface

View File

@ -0,0 +1 @@
#---- create_link

View File

@ -0,0 +1 @@
#---- create_process

View File

@ -0,0 +1 @@
#---- create_stream

View File

@ -0,0 +1 @@
#---- create_toolbox

View File

@ -0,0 +1 @@
#---- create_toolboxitem

View File

@ -0,0 +1 @@
#---- create_topology

View File

@ -0,0 +1 @@
#---- create_topologyinventory

View File

@ -0,0 +1 @@
#---- delete_device

View File

@ -0,0 +1 @@
#---- delete_group

View File

@ -0,0 +1 @@
#---- delete_groupdevice

View File

@ -0,0 +1 @@
#---- delete_interface

View File

@ -0,0 +1 @@
#---- delete_link

View File

@ -0,0 +1 @@
#---- delete_process

View File

@ -0,0 +1 @@
#---- delete_stream

View File

@ -0,0 +1 @@
#---- delete_toolbox

View File

@ -0,0 +1 @@
#---- delete_toolboxitem

View File

@ -0,0 +1 @@
#---- delete_topology

View File

@ -0,0 +1 @@
#---- delete_topologyinventory

View File

@ -0,0 +1 @@
#---- get_device

View File

@ -0,0 +1 @@
#---- get_group

View File

@ -0,0 +1 @@
#---- get_groupdevice

View File

@ -0,0 +1 @@
#---- get_interface

View File

@ -0,0 +1 @@
#---- get_link

View File

@ -0,0 +1 @@
#---- get_process

View File

@ -0,0 +1 @@
#---- get_stream

View File

@ -0,0 +1 @@
#---- get_toolbox

View File

@ -0,0 +1 @@
#---- get_toolboxitem

View File

@ -0,0 +1 @@
#---- get_topology

Some files were not shown because too many files have changed in this diff Show More