"""Cisco vManage Policy Definitions API Methods.
"""
import json
from vmanage.api.http_methods import HttpMethods
from vmanage.api.policy_lists import PolicyLists
from vmanage.data.parse_methods import ParseMethods
from vmanage.api.utilities import Utilities
from vmanage.utils import list_to_dict
[docs]definition_types_19_2_0 = [
"data", "approute", "control", "cflowd", "mesh", "hubandspoke", "vpnmembershipgroup", "qosmap", "rewriterule",
"acl", "aclv6", "vedgeroute", "zonebasedfw", "intrusionprevention", "urlfiltering", "advancedMalwareProtection",
"dnssecurity"
]
[docs]definition_types_19_3_0 = [
"data", "approute", "control", "cflowd", "mesh", "hubandspoke", "vpnmembershipgroup", "qosmap", "rewriterule",
"acl", "aclv6", "deviceaccesspolicy", "deviceaccesspolicyv6", "vedgeroute", "zonebasedfw", "intrusionprevention",
"urlfiltering", "advancedMalwareProtection", "dnssecurity", "ssldecryption", "fxoport", "fxsport", "fxsdidport",
"dialpeer", "srstphoneprofile"
]
[docs]all_definition_types = list(set(definition_types_19_2_0) | set(definition_types_19_3_0))
[docs]class PolicyDefinitions(object):
"""vManage Policy Definitions API
Responsible for DELETE, GET, POST, PUT methods against vManage
Policy Definitions used in Centralized, Localized, and Security Policy.
"""
def __init__(self, session, host, port=443):
"""Initialize Policy Lists object with session parameters.
Args:
session (obj): Requests Session object
host (str): hostname or IP address of vManage
port (int): default HTTPS 443
"""
self.session = session
self.host = host
self.port = port
self.base_url = f'https://{self.host}:{self.port}/dataservice/'
self.policy_lists = PolicyLists(self.session, self.host, self.port)
version = Utilities(self.session, self.host, self.port).get_vmanage_version()
if version >= '19.3.0':
self.definition_types = definition_types_19_3_0
else:
self.definition_types = definition_types_19_2_0
[docs] def get_definition_types(self):
"""Return the definition types for this version of vManage
Args:
Returns:
result (list): List of definition types
"""
return self.definition_types
[docs] def delete_policy_definition(self, definition_type, definition_id):
"""Delete a Policy Definition from vManage.
Args:
definition_type (str): The defintion type of the requested policy definition
definition_id (str): The defintion ID of the requested policy definition
Returns:
result (dict): All data associated with a response.
"""
url = f"{self.base_url}template/policy/definition/{definition_type.lower()}/{definition_id}"
HttpMethods(self.session, url).request('DELETE')
[docs] def add_policy_definition(self, policy_definition):
"""Delete a Policy Definition from vManage.
Args:
definition_type (str): The defintion type of the requested policy definition
definition_id (str): The defintion ID of the requested policy definition
Returns:
result (dict): All data associated with a response.
"""
url = f"{self.base_url}template/policy/definition/{policy_definition['type'].lower()}"
HttpMethods(self.session, url).request('POST', payload=json.dumps(policy_definition))
[docs] def update_policy_definition(self, policy_definition, policy_definition_id):
"""Update a Policy Definition from vManage.
Args:
definition_type (str): The defintion type of the requested policy definition
definition_id (str): The defintion ID of the requested policy definition
Returns:
result (dict): All data associated with a response.
"""
url = f"{self.base_url}template/policy/definition/{policy_definition['type'].lower()}/{policy_definition_id}"
response = HttpMethods(self.session, url).request('PUT', payload=json.dumps(policy_definition))
return response
[docs] def get_policy_definition(self, definition_type, definition_id):
"""Get a Policy Definition from vManage.
Args:
definition_type (str): The defintion type of the requested policy definition
definition_id (str): The defintion ID of the requested policy definition
Returns:
result (dict): All data associated with a response.
"""
url = f"{self.base_url}template/policy/definition/{definition_type.lower()}/{definition_id}"
response = HttpMethods(self.session, url).request('GET')
policy_definition = response["json"]
return policy_definition
[docs] def get_policy_definition_list(self, definition_type='all'):
"""Get all Policy Definition Lists from vManage.
Args:
definition_type (string): The type of Definition List to retreive
Returns:
response (dict): A list of all definition lists currently
in vManage.
"""
if definition_type == 'all':
all_definitions_list = []
for def_type in self.definition_types:
definition_list = self.get_policy_definition_list(def_type)
if definition_list:
all_definitions_list.extend(definition_list)
return all_definitions_list
definition_list = []
if definition_type == "advancedMalwareProtection":
url = f"{self.base_url}template/policy/definition/{definition_type}"
else:
url = f"{self.base_url}template/policy/definition/{definition_type.lower()}"
response = HttpMethods(self.session, url).request('GET')
result = ParseMethods.parse_data(response)
for definition in result:
definition_detail = self.get_policy_definition(definition_type, definition['definitionId'])
if definition_detail:
definition_list.append(definition_detail)
return definition_list
[docs] def get_policy_definition_dict(self, definition_type, key_name='name', remove_key=False):
"""Get all Policy Definition Lists from vManage.
Args:
definition_type (str): Policy definition type
key_name (string): The name of the attribute to use as the dictionary key
remove_key (boolean): Remove the search key from the element
Returns:
result (dict): All data associated with a response.
"""
policy_definition_list = self.get_policy_definition_list(definition_type)
return list_to_dict(policy_definition_list, key_name, remove_key=remove_key)