summaryrefslogtreecommitdiffstats
path: root/ansible_collections/cisco/aci/plugins/module_utils
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-26 04:06:02 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-26 04:06:02 +0000
commite3eb94c23206603103f3c4faec6c227f59a1544c (patch)
treef2639459807ba88f55fc9c54d745bd7075d7f15c /ansible_collections/cisco/aci/plugins/module_utils
parentReleasing progress-linux version 9.4.0+dfsg-1~progress7.99u1. (diff)
downloadansible-e3eb94c23206603103f3c4faec6c227f59a1544c.tar.xz
ansible-e3eb94c23206603103f3c4faec6c227f59a1544c.zip
Merging upstream version 9.5.1+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ansible_collections/cisco/aci/plugins/module_utils')
-rw-r--r--ansible_collections/cisco/aci/plugins/module_utils/aci.py203
-rw-r--r--ansible_collections/cisco/aci/plugins/module_utils/annotation_unsupported.py853
-rw-r--r--ansible_collections/cisco/aci/plugins/module_utils/constants.py338
3 files changed, 1375 insertions, 19 deletions
diff --git a/ansible_collections/cisco/aci/plugins/module_utils/aci.py b/ansible_collections/cisco/aci/plugins/module_utils/aci.py
index 9c6e2db2d..88b49cd6e 100644
--- a/ansible_collections/cisco/aci/plugins/module_utils/aci.py
+++ b/ansible_collections/cisco/aci/plugins/module_utils/aci.py
@@ -15,6 +15,8 @@
# Copyright: (c) 2020, Anvitha Jain (@anvitha-jain) <anvjain@cisco.com>
# Copyright: (c) 2023, Gaspard Micol (@gmicol) <gmicol@cisco.com>
# Copyright: (c) 2023, Shreyas Srish (@shrsr) <ssrish@cisco.com>
+# Copyright: (c) 2023, Tim Cragg (@timcragg) <tcragg@cisco.com>
+# Copyright: (c) 2024, Samita Bhattacharjee (@samiib) <samitab@cisco.com>
# All rights reserved.
# Redistribution and use in source and binary forms, with or without modification,
@@ -134,6 +136,7 @@ def aci_argument_spec():
use_ssl=dict(type="bool", fallback=(env_fallback, ["ACI_USE_SSL"])),
validate_certs=dict(type="bool", fallback=(env_fallback, ["ACI_VALIDATE_CERTS"])),
output_path=dict(type="str", fallback=(env_fallback, ["ACI_OUTPUT_PATH"])),
+ suppress_verification=dict(type="bool", aliases=["no_verification", "no_verify", "suppress_verify"], fallback=(env_fallback, ["ACI_NO_VERIFICATION"])),
)
@@ -320,6 +323,64 @@ def integrate_url(httpapi_url, local_path):
return {"protocol": parse_url.scheme, "host": parse_url.netloc, "path": local_path}
+def action_rule_set_comm_spec():
+ return dict(
+ community=dict(type="str"),
+ criteria=dict(type="str", choices=["append", "none", "replace"]),
+ )
+
+
+def action_rule_set_dampening_spec():
+ return dict(
+ half_life=dict(type="int"),
+ max_suppress_time=dict(type="int"),
+ reuse=dict(type="int"),
+ suppress=dict(type="int"),
+ )
+
+
+def associated_netflow_exporter_epg_spec():
+ return dict(
+ tenant=dict(type="str"),
+ ap=dict(type="str"),
+ epg=dict(type="str"),
+ )
+
+
+def associated_netflow_exporter_extepg_spec():
+ return dict(
+ tenant=dict(type="str"),
+ l3out=dict(type="str"),
+ extepg=dict(type="str"),
+ )
+
+
+def associated_netflow_exporter_vrf_spec():
+ return dict(
+ tenant=dict(type="str"),
+ vrf=dict(type="str"),
+ )
+
+
+def pim_interface_profile_spec():
+ return dict(
+ tenant=dict(type="str", aliases=["tenant_name"]),
+ pim=dict(type="str", aliases=["pim_interface_policy", "name"]),
+ )
+
+
+def igmp_interface_profile_spec():
+ return dict(tenant=dict(type="str", aliases=["tenant_name"]), igmp=dict(type="str", aliases=["igmp_interface_policy", "name"]))
+
+
+def storm_control_policy_rate_spec():
+ return dict(
+ rate=dict(type="str"),
+ burst_rate=dict(type="str"),
+ rate_type=dict(type="str", choices=["percentage", "pps"], required=True),
+ )
+
+
class ACIModule(object):
def __init__(self, module):
self.module = module
@@ -356,6 +417,9 @@ class ACIModule(object):
self.imdata = None
self.totalCount = None
+ # get no verify flag
+ self.suppress_verification = self.params.get("suppress_verification")
+
# Ensure protocol is set
self.define_protocol()
@@ -779,8 +843,10 @@ class ACIModule(object):
subclass_3=None,
subclass_4=None,
subclass_5=None,
+ subclass_6=None,
child_classes=None,
config_only=True,
+ rsp_subtree="full",
):
"""
This method is used to retrieve the appropriate URL path and filter_string to make the request to the APIC.
@@ -796,6 +862,7 @@ class ACIModule(object):
:type subclass_3: dict
:type subclass_4: dict
:type subclass_5: dict
+ :type subclass_6: dict
:type child_classes: list
:return: The path and filter_string needed to build the full URL.
"""
@@ -806,7 +873,9 @@ class ACIModule(object):
else:
self.child_classes = set(child_classes)
- if subclass_5 is not None:
+ if subclass_6 is not None:
+ self._construct_url_7(root_class, subclass_1, subclass_2, subclass_3, subclass_4, subclass_5, subclass_6, config_only)
+ elif subclass_5 is not None:
self._construct_url_6(root_class, subclass_1, subclass_2, subclass_3, subclass_4, subclass_5, config_only)
elif subclass_4 is not None:
self._construct_url_5(root_class, subclass_1, subclass_2, subclass_3, subclass_4, config_only)
@@ -828,10 +897,12 @@ class ACIModule(object):
# Append child_classes to filter_string if filter string is empty
self.update_qs(
{
- "rsp-subtree": "full",
+ "rsp-subtree": rsp_subtree,
"rsp-subtree-class": ",".join(sorted(self.child_classes)),
}
)
+ elif rsp_subtree == "children":
+ self.update_qs({"rsp-subtree": rsp_subtree})
def _construct_url_1(self, obj, config_only=True):
"""
@@ -1077,7 +1148,7 @@ class ACIModule(object):
def _construct_url_6(self, root, quad, ter, sec, parent, obj, config_only=True):
"""
- This method is used by construct_url when the object is the fourth-level class.
+ This method is used by construct_url when the object is the fifth-level class.
"""
root_rn = root.get("aci_rn")
root_obj = root.get("module_object")
@@ -1145,6 +1216,85 @@ class ACIModule(object):
# Query for a specific object of the module's class
self.path = "api/mo/uni/{0}/{1}/{2}/{3}/{4}/{5}.json".format(root_rn, quad_rn, ter_rn, sec_rn, parent_rn, obj_rn)
+ def _construct_url_7(self, root, quin, quad, ter, sec, parent, obj, config_only=True):
+ """
+ This method is used by construct_url when the object is the sixth-level class.
+ """
+ root_rn = root.get("aci_rn")
+ root_obj = root.get("module_object")
+ quin_rn = quin.get("aci_rn")
+ quin_obj = quin.get("module_object")
+ quad_rn = quad.get("aci_rn")
+ quad_obj = quad.get("module_object")
+ ter_rn = ter.get("aci_rn")
+ ter_obj = ter.get("module_object")
+ sec_rn = sec.get("aci_rn")
+ sec_obj = sec.get("module_object")
+ parent_rn = parent.get("aci_rn")
+ parent_obj = parent.get("module_object")
+ obj_class = obj.get("aci_class")
+ obj_rn = obj.get("aci_rn")
+ obj_filter = obj.get("target_filter")
+ mo = obj.get("module_object")
+
+ if self.child_classes is None:
+ self.child_classes = [obj_class]
+
+ if self.module.params.get("state") in ("absent", "present"):
+ # State is absent or present
+ self.path = "api/mo/uni/{0}/{1}/{2}/{3}/{4}/{5}/{6}.json".format(root_rn, quin_rn, quad_rn, ter_rn, sec_rn, parent_rn, obj_rn)
+ if config_only:
+ self.update_qs({"rsp-prop-include": "config-only"})
+ self.obj_filter = obj_filter
+ # TODO: Add all missing cases
+ elif root_obj is None:
+ self.child_classes.add(obj_class)
+ self.path = "api/class/{0}.json".format(obj_class)
+ self.update_qs({"query-target-filter": self.build_filter(obj_class, obj_filter)})
+ elif quin_obj is None:
+ self.child_classes.add(obj_class)
+ self.path = "api/mo/uni/{0}.json".format(root_rn)
+ # NOTE: No need to select by root_filter
+ # self.update_qs({'query-target-filter': self.build_filter(root_class, root_filter)})
+ # TODO: Filter by quin_filter, parent and obj_filter
+ self.update_qs({"rsp-subtree-filter": self.build_filter(obj_class, obj_filter)})
+ elif quad_obj is None:
+ self.child_classes.add(obj_class)
+ self.path = "api/mo/uni/{0}/{1}.json".format(root_rn, quin_rn)
+ # NOTE: No need to select by root_filter
+ # self.update_qs({'query-target-filter': self.build_filter(root_class, root_filter)})
+ # TODO: Filter by quin_filter, parent and obj_filter
+ self.update_qs({"rsp-subtree-filter": self.build_filter(obj_class, obj_filter)})
+ elif ter_obj is None:
+ self.child_classes.add(obj_class)
+ self.path = "api/mo/uni/{0}/{1}/{2}.json".format(root_rn, quin_rn, quad_rn)
+ # NOTE: No need to select by quad_filter
+ # self.update_qs({'query-target-filter': self.build_filter(quin_class, quin_filter)})
+ # TODO: Filter by ter_filter, parent and obj_filter
+ self.update_qs({"rsp-subtree-filter": self.build_filter(obj_class, obj_filter)})
+ elif sec_obj is None:
+ self.child_classes.add(obj_class)
+ self.path = "api/mo/uni/{0}/{1}/{2}/{3}.json".format(root_rn, quin_rn, quad_rn, ter_rn)
+ # NOTE: No need to select by ter_filter
+ # self.update_qs({'query-target-filter': self.build_filter(ter_class, ter_filter)})
+ # TODO: Filter by sec_filter, parent and obj_filter
+ self.update_qs({"rsp-subtree-filter": self.build_filter(obj_class, obj_filter)})
+ elif parent_obj is None:
+ self.child_classes.add(obj_class)
+ self.path = "api/mo/uni/{0}/{1}/{2}/{3}/{4}.json".format(root_rn, quin_rn, quad_rn, ter_rn, sec_rn)
+ # NOTE: No need to select by sec_filter
+ # self.update_qs({'query-target-filter': self.build_filter(sec_class, sec_filter)})
+ # TODO: Filter by parent_filter and obj_filter
+ self.update_qs({"rsp-subtree-filter": self.build_filter(obj_class, obj_filter)})
+ elif mo is None:
+ self.child_classes.add(obj_class)
+ self.path = "api/mo/uni/{0}/{1}/{2}/{3}/{4}/{5}.json".format(root_rn, quin_rn, quad_rn, ter_rn, sec_rn, parent_rn)
+ # NOTE: No need to select by parent_filter
+ # self.update_qs({'query-target-filter': self.build_filter(parent_class, parent_filter)})
+ else:
+ # Query for a specific object of the module's class
+ self.path = "api/mo/uni/{0}/{1}/{2}/{3}/{4}/{5}/{6}.json".format(root_rn, quin_rn, quad_rn, ter_rn, sec_rn, parent_rn, obj_rn)
+
def delete_config(self):
"""
This method is used to handle the logic when the modules state is equal to absent. The method only pushes a change if
@@ -1161,7 +1311,7 @@ class ACIModule(object):
self.result["changed"] = True
self.method = "DELETE"
- def get_diff(self, aci_class):
+ def get_diff(self, aci_class, required_properties=None):
"""
This method is used to get the difference between the proposed and existing configurations. Each module
should call the get_existing method before this method, and add the proposed config to the module results
@@ -1183,6 +1333,8 @@ class ACIModule(object):
# add name back to config only if the configs do not match
if config:
# TODO: If URLs are built with the object's name, then we should be able to leave off adding the name back
+ if required_properties and isinstance(required_properties, dict):
+ config.update(required_properties)
config = {aci_class: {"attributes": config}}
# check for updates to child configs and update new config dictionary
@@ -1369,23 +1521,30 @@ class ACIModule(object):
# add child objects to proposed
if child_configs:
- children = []
- for child in child_configs:
- child_copy = deepcopy(child)
- has_value = False
- for root_key in child_copy.keys():
- for final_keys, values in child_copy[root_key]["attributes"].items():
- if values is None:
- child[root_key]["attributes"].pop(final_keys)
- else:
- child[root_key]["attributes"][final_keys] = str(values)
- has_value = True
- if has_value:
- children.append(child)
+ children = self.handle_child_configs(child_configs)
if children:
self.proposed[aci_class].update(dict(children=children))
+ def handle_child_configs(self, child_configs):
+ children = []
+ for child in child_configs:
+ child_copy = deepcopy(child)
+ has_value = False
+ for class_name in child_copy.keys():
+ for attribute, value in child_copy[class_name]["attributes"].items():
+ if value is None:
+ child[class_name]["attributes"].pop(attribute)
+ else:
+ child[class_name]["attributes"][attribute] = str(value)
+ has_value = True
+ if child_copy[class_name].get("children") is not None:
+ has_value = True
+ child[class_name]["children"] = self.handle_child_configs(child_copy[class_name]["children"])
+ if has_value:
+ children.append(child)
+ return children
+
def post_config(self, parent_class=None):
"""
This method is used to handle the logic when the modules state is equal to present. The method only pushes a change if
@@ -1438,7 +1597,15 @@ class ACIModule(object):
if "state" in self.params:
self.original = self.existing
if self.params.get("state") in ("absent", "present"):
- self.get_existing()
+ if self.suppress_verification:
+ if self.result["changed"]:
+ self.result["current_verified"] = False
+ self.existing = [self.proposed]
+ else:
+ self.result["current_verified"] = True
+ # exisiting already equals the previous
+ else:
+ self.get_existing()
# if self.module._diff and self.original != self.existing:
# self.result['diff'] = dict(
diff --git a/ansible_collections/cisco/aci/plugins/module_utils/annotation_unsupported.py b/ansible_collections/cisco/aci/plugins/module_utils/annotation_unsupported.py
new file mode 100644
index 000000000..6e34889fb
--- /dev/null
+++ b/ansible_collections/cisco/aci/plugins/module_utils/annotation_unsupported.py
@@ -0,0 +1,853 @@
+# Code generated by release_script GitHub action; DO NOT EDIT MANUALLY.
+ANNOTATION_UNSUPPORTED = [
+ "topRoot",
+ "monPol",
+ "monATarget",
+ "monTarget",
+ "moTopProps",
+ "moModifiable",
+ "moOwnable",
+ "moResolvable",
+ "moASubj",
+ "actionACont",
+ "taskExec",
+ "namingNamedObject",
+ "namingNamedIdentifiedObject",
+ "conditionInfo",
+ "conditionRetP",
+ "conditionRecord",
+ "conditionLoggable",
+ "faultInfo",
+ "relnInst",
+ "relnTo",
+ "relnFrom",
+ "statsItem",
+ "statsAColl",
+ "statsAThrP",
+ "relnTaskRef",
+ "hvsNode",
+ "qosACong",
+ "qosAQueue",
+ "qosABuffer",
+ "qosASched",
+ "qosClassification",
+ "qosADscpClass",
+ "qosADot1PClass",
+ "lacpALagPol",
+ "pconsRef",
+ "eventARetP",
+ "faultAThrValue",
+ "faultARetP",
+ "configABackupP",
+ "dnsAProfile",
+ "dnsAProv",
+ "dnsADomain",
+ "dnsALbl",
+ "sysdebugRepository",
+ "sysdebugFile",
+ "sysdebugLogBehavior",
+ "firmwareSource",
+ "firmwareAFwStatusCont",
+ "firmwareARunning",
+ "firmwareAFwP",
+ "maintAMaintP",
+ "maintUserNotif",
+ "fabricComp",
+ "fabricANode",
+ "fabricALink",
+ "ruleDefinition",
+ "ruleItem",
+ "ruleRequirement",
+ "ruleSizeRequirement",
+ "stpAIfPol",
+ "haHaTest",
+ "rtctrlAMatchRule",
+ "rtctrlAMatchIpRule",
+ "rtctrlAMatchRtType",
+ "rtctrlASubnet",
+ "rtctrlAAttrP",
+ "rtctrlASetRule",
+ "rtctrlASetTag",
+ "rtctrlASetComm",
+ "rtctrlASetRtMetric",
+ "rtctrlASetPref",
+ "rtctrlASetNh",
+ "rtctrlASetOspfFwdAddr",
+ "rtctrlASetOspfNssa",
+ "bgpAAsP",
+ "bgpACtxPol",
+ "bgpAPeerPfxPol",
+ "bgpAPeerP",
+ "bgpAExtP",
+ "cdpAIfPol",
+ "fabricProtoIfPol",
+ "fabricL2IfPol",
+ "fabricL3IfPol",
+ "lldpAIfPol",
+ "fabricProtoPol",
+ "fabricProtoComp",
+ "fabricL2ProtoPol",
+ "fabricL3ProtoPol",
+ "fabricL2ProtoComp",
+ "fabricL3ProtoComp",
+ "fabricProtoInstPol",
+ "fabricUtilInstPol",
+ "fabricL2InstPol",
+ "fabricL3InstPol",
+ "fabricProtoDomPol",
+ "fabricL2DomPol",
+ "fabricL3DomPol",
+ "fabricL3CtxPol",
+ "l2AInstPol",
+ "fabricMaintPol",
+ "fabricNodeGrp",
+ "fabricAPodBlk",
+ "fabricANodeBlk",
+ "fabricAPortBlk",
+ "fabricSelector",
+ "fabricANodeS",
+ "fabricNodeS",
+ "fabricACardS",
+ "fabricCardS",
+ "fabricAPortS",
+ "fabricPortS",
+ "fabricIntfPol",
+ "fabricAProfile",
+ "fabricProfile",
+ "fabricPolGrp",
+ "fabricNodeP",
+ "fabricCardP",
+ "fabricPortP",
+ "fabricAPortPGrp",
+ "fabricANodePGrp",
+ "fabricACardPGrp",
+ "fabricSpAPortPGrp",
+ "fabricLeAPortPGrp",
+ "fabricAProtPol",
+ "fabricANodePEp",
+ "fabricPol",
+ "fabricInfrP",
+ "fabricInfrExP",
+ "fabricDom",
+ "fabricDef",
+ "fabricAPolGrp",
+ "vsvcAProvLbl",
+ "vsvcAConsLbl",
+ "compASvcVM",
+ "compNic",
+ "compPNic",
+ "compEntity",
+ "compElement",
+ "compContE",
+ "compObj",
+ "compCont",
+ "compProvP",
+ "compDomP",
+ "compCtrlrP",
+ "compAccessP",
+ "compUsrAccP",
+ "compHost",
+ "compPHost",
+ "vzACollection",
+ "vzACtrct",
+ "vzABrCP",
+ "vzAIf",
+ "vzAFilterable",
+ "vzAFilterableUnit",
+ "vzASubj",
+ "vzATerm",
+ "vzASTerm",
+ "vzALbl",
+ "vzACompLbl",
+ "vzAnyToCollection",
+ "vzAFilter",
+ "vzAFiltEntry",
+ "ospfACtxPol",
+ "ospfAIfP",
+ "ospfAExtP",
+ "dhcpARelayP",
+ "dhcpALbl",
+ "dhcpAInfraProvP",
+ "poolElement",
+ "poolPoolable",
+ "poolPoolMember",
+ "poolPool",
+ "pkiItem",
+ "aaaDefinition",
+ "commDefinition",
+ "pkiDefinition",
+ "aaaSystemUser",
+ "aaaBanner",
+ "aaaUserAction",
+ "aaaARetP",
+ "commComp",
+ "commWeb",
+ "commShell",
+ "aaaRealm",
+ "aaaConfig",
+ "aaaAuthMethod",
+ "aaaEp",
+ "aaaAProvider",
+ "aaaProviderGroup",
+ "adcomATsInfoUnit",
+ "adcomARwi",
+ "healthARetP",
+ "healthAInst",
+ "igmpASnoopPol",
+ "sysfileEp",
+ "sysfileRepository",
+ "sysfileInstance",
+ "fileARemoteHost",
+ "fileARemotePath",
+ "monProtoP",
+ "monSecAuthP",
+ "monGroup",
+ "monSubj",
+ "monSrc",
+ "conditionCondP",
+ "ctrlrDom",
+ "l2extADomP",
+ "l2extALNodeP",
+ "l2extAIfP",
+ "l2extAInstPSubnet",
+ "extnwEPg",
+ "extnwOut",
+ "extnwDomP",
+ "extnwAInstPSubnet",
+ "extnwALNodeP",
+ "extnwALIfP",
+ "l3extADomP",
+ "l3extALNodeP",
+ "l3extAIfP",
+ "l3extAMember",
+ "l3extAInstPSubnet",
+ "trigSchedWindowP",
+ "trigInst",
+ "trigWindow",
+ "trigSchedWindow",
+ "trigExecutable",
+ "trigTriggerable",
+ "trigSingleTriggerable",
+ "fvACont",
+ "fvADeplCont",
+ "fvL2Dom",
+ "fvABD",
+ "fvABDPol",
+ "fvAEpRetPol",
+ "fvComp",
+ "fvATg",
+ "fvEPgToCollection",
+ "fvADomP",
+ "fvEPg",
+ "fvCEPg",
+ "fvAREpPCtrct",
+ "fvDom",
+ "fvL3Dom",
+ "fvACtx",
+ "fvNwEp",
+ "fvATp",
+ "fvEp",
+ "fvPEp",
+ "fvAEpDef",
+ "fvTo",
+ "fvFrom",
+ "mgmtAZone",
+ "mgmtAInstPSubnet",
+ "eqptdiagpTestSet",
+ "eqptdiagpTestSetBoot",
+ "eqptdiagpTestSetHealth",
+ "eqptdiagpTestSetOd",
+ "eqptdiagpPortTestSetOd",
+ "eqptdiagpPortTestSetBt",
+ "eqptdiagpPortTestSetHl",
+ "eqptdiagpLpTsOd",
+ "eqptdiagpFpTsOd",
+ "eqptdiagpCardTestSetOd",
+ "eqptdiagpSupCTsOd",
+ "eqptdiagpSysCTsOd",
+ "eqptdiagpFcTsOd",
+ "eqptdiagpLcTsOd",
+ "eqptdiagpExtChCardTsOd",
+ "eqptdiagpPol",
+ "eqptdiagpHealthPol",
+ "eqptdiagpASynthObj",
+ "oamExec",
+ "pingAExec",
+ "tracerouteAExec",
+ "bgpAf",
+ "dhcpAddr",
+ "dhcpNode",
+ "dhcpResp",
+ "eqptALPort",
+ "dbgACRulePCommon",
+ "dbgacTenantSpaceCmn",
+ "dbgacEpgCmn",
+ "dbgacFromEpgCmn",
+ "dbgacToEpgCmn",
+ "dbgacFromEpCmn",
+ "dbgacToEpCmn",
+ "dbgexpExportP",
+ "dbgexpNodeStatus",
+ "spanASrcGrp",
+ "spanASrc",
+ "spanASpanLbl",
+ "spanADest",
+ "spanAVSrc",
+ "spanAVSrcGrp",
+ "spanAVDestGrp",
+ "spanAVDest",
+ "svccorePol",
+ "svccoreACore",
+ "traceroutepTrP",
+ "syntheticObject",
+ "syntheticAContext",
+ "syntheticATestObj",
+ "syntheticTLTestObj",
+ "syntheticCTestObj",
+ "monExportP",
+ "ipARouteP",
+ "ipANexthopP",
+ "infraFexBlk",
+ "infraANodeS",
+ "infraNodeGrp",
+ "infraPortS",
+ "infraEPg",
+ "infraACEPg",
+ "infraAPEPg",
+ "infraANode",
+ "infraAIpP",
+ "infraProfile",
+ "infraPolGrp",
+ "infraAccBaseGrp",
+ "infraFexGrp",
+ "infraAccGrp",
+ "infraLbl",
+ "infraAPEp",
+ "infraACEp",
+ "infraAFunc",
+ "infraGeNode",
+ "infraADomP",
+ "infraDomP",
+ "infraExP",
+ "datetimeAPol",
+ "datetimeANtpAuthKey",
+ "datetimeANtpProv",
+ "fvnsAAddrBlk",
+ "fvnsAEncapBlk",
+ "fvnsAInstP",
+ "fvnsAVxlanInstP",
+ "fvnsAAddrInstP",
+ "polAttTgt",
+ "snmpAPol",
+ "snmpACommunityP",
+ "snmpAUserP",
+ "snmpAClientGrpP",
+ "snmpAClientP",
+ "snmpACtxP",
+ "fvDef",
+ "fvNp",
+ "fvUp",
+ "polNToRef",
+ "polNFromRef",
+ "polObj",
+ "polDef",
+ "polDefRoot",
+ "polComp",
+ "polInstr",
+ "polCont",
+ "polDom",
+ "polCtrlr",
+ "polCompl",
+ "polComplElem",
+ "polConsElem",
+ "polLbl",
+ "polProvLbl",
+ "polConsLbl",
+ "polIf",
+ "polProvIf",
+ "polConsIf",
+ "polRelnHolder",
+ "polNs",
+ "polAConfIssues",
+ "vnsAGraph",
+ "vnsANode",
+ "vnsAFuncNode",
+ "vnsAFolder",
+ "vnsACCfgRel",
+ "vnsAParam",
+ "vnsATerm",
+ "vnsATermNode",
+ "vnsAbsTermNode",
+ "vnsALDevCtx",
+ "vnsALIfCtx",
+ "vnsAConn",
+ "vnsAFuncConn",
+ "vnsATermConn",
+ "vnsAConnection",
+ "vnsAL4L7ServiceFault",
+ "vnsACCfg",
+ "vnsALDevIf",
+ "vnsALDev",
+ "vnsALIf",
+ "vnsALDevLIf",
+ "vnsDevItem",
+ "fabricAPathIssues",
+ "conditionSevAsnP",
+ "fvAStCEp",
+ "fabricNodeToPolicy",
+ "aaaADomainRef",
+ "fvAEpTaskAggr",
+ "vzToRFltP",
+ "fvAToBD",
+ "frmwrkARelDelCont",
+ "infraDomainToNs",
+ "infraToAInstP",
+ "aaaARbacRule",
+ "statsDebugItem",
+ "vzInterfaceToCollection",
+ "spanAToCEp",
+ "fabricAOOSReln",
+ "l4AVxlanInstPol",
+ "fabricVxlanInstPol",
+ "fabricL1IfPol",
+ "frmwrkARelDelControl",
+ "spanACEpDef",
+ "eptrkEpRslt",
+ "mcpAIfPol",
+ "ipmcsnoopRtrIf",
+ "bfdAf",
+ "bgpALocalAsnP",
+ "bgpACtxAfPol",
+ "l3extADefaultRouteLeakP",
+ "fvAStIp",
+ "rtctrlASetRtMetricType",
+ "vnsAEPpInfo",
+ "ndAIfPol",
+ "ndAPfxPol",
+ "eigrpACtxAfPol",
+ "eigrpAStubP",
+ "eigrpAIfP",
+ "eigrpAExtP",
+ "l3extAIp",
+ "fabricProtoConsFrom",
+ "fabricProtoConsTo",
+ "fabricAPathS",
+ "infraAAccBndlGrp",
+ "fabricNodeToPathOverridePolicy",
+ "adcomARwiAdvanced",
+ "fvAClassifier",
+ "fvACrtrn",
+ "fvAttr",
+ "fvAVmAttr",
+ "fvAIpAttr",
+ "fvAMacAttr",
+ "fvAProtoAttr",
+ "polADependentOn",
+ "vnsAVRoutingNetworks",
+ "l3extARouteTagPol",
+ "nwsAFwPol",
+ "fabricL4IfPol",
+ "fvAVip",
+ "fvAAREpPUpdate",
+ "conditionSummary",
+ "polAPrToPol",
+ "polAObjToPolReln",
+ "fvACrRule",
+ "fvASCrtrn",
+ "fvnsAVlanInstP",
+ "vzAnyToInterface",
+ "fvEPgToInterface",
+ "fabricPodGrp",
+ "fabricAPodS",
+ "infraPodGrp",
+ "vnsAMgmt",
+ "fabricPolicyGrpToMonitoring",
+ "plannerIPs",
+ "plannerAObject",
+ "plannerAEpg",
+ "compAPltfmP",
+ "compAVmmPltfmP",
+ "compAVmmSecP",
+ "bgpARRP",
+ "bgpARtTargetP",
+ "bgpARtTarget",
+ "l3extAFabricExtRoutingP",
+ "fvAFabricExtConnP",
+ "fvAPodConnP",
+ "fvAPeeringP",
+ "fvANode",
+ "plannerATmpl",
+ "nwsASrc",
+ "nwsASyslogSrc",
+ "throttlerASub",
+ "qosADscpTrans",
+ "fvARsToRemote",
+ "vnsOrchReq",
+ "vnsOrchResp",
+ "fcprARs",
+ "dbgexpTechSupOnDBase",
+ "infraGeSnNode",
+ "l3extAConsLbl",
+ "l3extAProvLbl",
+ "trigATriggeredWindow",
+ "qosADppPol",
+ "bfdAInstPol",
+ "bfdAIfPol",
+ "bfdAIfP",
+ "plannerADomainTmpl",
+ "plannerAEpgDomain",
+ "vmmACapObj",
+ "vmmACapInfo",
+ "fvARsToRemoteFC",
+ "rtctrlAMatchCommFactor",
+ "rtctrlAMatchCommTerm",
+ "rtctrlAMatchCommRegexTerm",
+ "rtctrlASetDamp",
+ "rtctrlASetWeight",
+ "hvsContE",
+ "hvsUsegContE",
+ "compAPvlanP",
+ "usegAUsegEPg",
+ "fvAStAttr",
+ "fvADyAttr",
+ "mgmtAIp",
+ "faultARsToRemote",
+ "analyticsACfgSrv",
+ "infraAAccGrp",
+ "infraSpAccGrp",
+ "infraANodeP",
+ "infraPortP",
+ "infraAPathS",
+ "ipmcsnoopMcSrc",
+ "ipmcsnoopTgtIf",
+ "analyticsACluster",
+ "rtdmcAIfPol",
+ "rtdmcARtMapPol",
+ "rtdmcAExtP",
+ "rtdmcACtxPol",
+ "rtdmcARPPol",
+ "rtdmcAAutoRPPol",
+ "rtdmcABSRPPol",
+ "rtdmcAStaticRPPol",
+ "rtdmcAStaticRPEntry",
+ "rtdmcARPGrpRangePol",
+ "rtdmcARegTrPol",
+ "rtdmcAResPol",
+ "rtdmcAPatPol",
+ "rtdmcAASMPatPol",
+ "rtdmcASGRangeExpPol",
+ "rtdmcASharedRangePol",
+ "rtdmcASSMPatPol",
+ "rtdmcASSMRangePol",
+ "rtdmcABidirPatPol",
+ "pimAIfP",
+ "rtdmcARtMapEntry",
+ "rtdmcAJPFilterPol",
+ "rtdmcANbrFilterPol",
+ "rtdmcAMAFilter",
+ "rtdmcABSRFilter",
+ "rtdmcAFilterPol",
+ "fvAEPgPathAtt",
+ "fvnsAVsanInstP",
+ "ipmcAIfPol",
+ "ipmcAStRepPol",
+ "ipmcAStateLPol",
+ "ipmcARepPol",
+ "ipmcACtxPol",
+ "ipmcASSMXlateP",
+ "igmpAIfP",
+ "vmmEpgAggr",
+ "apPluginName",
+ "rtdmcAIfPolCont",
+ "fabricL2PortSecurityPol",
+ "fcAPinningP",
+ "fcAPinningLbl",
+ "fabricAONodeS",
+ "infraAONodeS",
+ "analyticsRemoteNode",
+ "analyticsTarget",
+ "fabricASubPortBlk",
+ "bgpARtTargetInstrP",
+ "hsrpAIfPol",
+ "hsrpAGroupPol",
+ "hsrpAGroupP",
+ "hsrpASecVip",
+ "hsrpAIfP",
+ "netflowARecordPol",
+ "netflowAExporterPol",
+ "netflowARsInterfaceToMonitor",
+ "netflowARsMonitorToRecord",
+ "netflowARsMonitorToExporter",
+ "netflowAMonitorPol",
+ "igmpASnoopStaticGroup",
+ "igmpASnoopAccessGroup",
+ "netflowAFabExporterPol",
+ "fabricQinqIfPol",
+ "orchsEntity",
+ "orchsElement",
+ "vnsNATReq",
+ "vnsLBReq",
+ "aclACL",
+ "aclL3ACE",
+ "apDockerName",
+ "hostprotASubj",
+ "macsecAAIfPol",
+ "macsecAIfPol",
+ "macsecAAParamPol",
+ "macsecAParamPol",
+ "macsecAAKeyChainPol",
+ "macsecAAKeyPol",
+ "macsecAKeyChainPol",
+ "macsecAKeyPol",
+ "fvAIntersiteConnP",
+ "fvAIntersiteConnPDef",
+ "fvASiteConnP",
+ "coppAProfile",
+ "coppACustomValues",
+ "infraNodeS",
+ "rtctrlASetASPath",
+ "rtctrlASetASPathASN",
+ "fvADnsAttr",
+ "dnsepgFault",
+ "dnsepgASvrGrp",
+ "dnsepgAMgmt",
+ "dnsepgASvr",
+ "dnsepgADomain",
+ "ipANexthopEpP",
+ "vmmInjectedObject",
+ "poeAIfPol",
+ "iaclAProfile",
+ "telemetryAServer",
+ "snmpATrapFwdServerP",
+ "dwdmAOptChnlIfPol",
+ "vzARuleOwner",
+ "telemetryAServerPol",
+ "telemetryARemoteServer",
+ "telemetryAFlowServers",
+ "telemetryAServerP",
+ "plannerAEpgFilter",
+ "callhomeASrc",
+ "callhomeADest",
+ "callhomeAGroup",
+ "fvAEpAnycast",
+ "tagTag",
+ "tagAnnotation",
+ "tagASelector",
+ "infraFcAccGrp",
+ "infraAFcAccBndlGrp",
+ "vsanARsVsanPathAtt",
+ "vsanARtVsanPathAtt",
+ "vzSubjectToFilter",
+ "telemetryAStreamEnable",
+ "cloudsecASaKeyP",
+ "rtdmcAInterVRFPol",
+ "rtdmcAInterVRFEntry",
+ "cloudsecAControl",
+ "adepgAResElement",
+ "adepgAElement",
+ "adepgACont",
+ "adepgAOrgUnit",
+ "adepgEntity",
+ "adepgContE",
+ "fvAIdAttr",
+ "edmObj",
+ "edmCont",
+ "edmGroupP",
+ "edmMgrP",
+ "edmEntity",
+ "edmElement",
+ "edmContE",
+ "authASvrGroup",
+ "authASvr",
+ "authBaseUsrAccP",
+ "cloudsecASaKeyPLocal",
+ "cloudsecASaKeyPRemote",
+ "cloudsecASaKeyStatus",
+ "cloudsecASaKeyStatusLocal",
+ "cloudsecASaKeyStatusRemote",
+ "cloudsecASpKeySt",
+ "cloudsecACapability",
+ "aaaRbacAnnotation",
+ "lacpAEnhancedLagPol",
+ "compAHvHealth",
+ "mldASnoopPol",
+ "fvAExtRoutes",
+ "fvAExtRoutableRemoteSitePodSubnet",
+ "fvAEpNlb",
+ "extdevSDWanASlaPol",
+ "eigrpAAuthIfP",
+ "fvAAKeyChainPol",
+ "fvAAKeyPol",
+ "fvAKeyChainPol",
+ "fvAKeyPol",
+ "fvSyntheticIp",
+ "edmACapFlags",
+ "cloudABgpPeerP",
+ "cloudABgpAsP",
+ "cloudARouterP",
+ "cloudAIntNetworkP",
+ "cloudAExtNetworkP",
+ "cloudAHostRouterPol",
+ "cloudAHostBootstrapPol",
+ "cloudAVpnGwPol",
+ "cloudAHostIfP",
+ "cloudALoopbackIfP",
+ "cloudAL3IfP",
+ "cloudAIpv4AddrP",
+ "cloudAL3TunnelIfP",
+ "cloudAIpSecTunnelIfP",
+ "cloudAOspfIfP",
+ "cloudAOspfAreaP",
+ "cloudACtxProfile",
+ "cloudACidr",
+ "cloudASubnet",
+ "cloudAAwsLogGroup",
+ "cloudAAwsFlowLogPol",
+ "cloudAProvider",
+ "cloudAAwsProvider",
+ "cloudAAEPg",
+ "cloudAEPSelector",
+ "cloudAEPSelectorDef",
+ "cloudADomP",
+ "genericsARule",
+ "ipsecAIsakmpPhase1Pol",
+ "ipsecAIsakmpPhase2Pol",
+ "resolutionARsToRemote",
+ "cloudtemplateASubnetPool",
+ "fvAACrtrn",
+ "fvAUsegAssocBD",
+ "cloudALDev",
+ "cloudAListener",
+ "cloudAPool",
+ "cloudAListenerRule",
+ "cloudARuleCondition",
+ "cloudARuleAction",
+ "cloudACertStore",
+ "cloudACertificate",
+ "arpAIfPol",
+ "compNameIdentEntity",
+ "edmAOperCont",
+ "edmAStatsCont",
+ "cloudASvcPol",
+ "hcloudATgStats",
+ "statsANWStatsObj",
+ "statsATunnel",
+ "cloudAController",
+ "cloudAApicSubnet",
+ "cloudAApicSubnetPool",
+ "cloudABaseEPg",
+ "cloudASvcEPg",
+ "statsAALbStats",
+ "mldASnoopStaticGroup",
+ "mldASnoopAccessGroup",
+ "datetimeANtpIFFKey",
+ "hcloudRouterStateOper",
+ "vmmAUplinkP",
+ "vmmAUplinkPCont",
+ "cloudAAFilter",
+ "fvASDWanPrefixTaskAggr",
+ "cloudAProvResP",
+ "bfdAMhInstPol",
+ "bfdAMhIfPol",
+ "fvAEPSelector",
+ "ptpAACfg",
+ "ptpACfg",
+ "fabricL2BDPol",
+ "rtdmcABDPol",
+ "rtdmcABDFilter",
+ "ptpAProfile",
+ "mdpADomP",
+ "mdpADomainPeeringPol",
+ "mdpAPeeringDomain",
+ "mdpANodeP",
+ "mdpAClassId",
+ "mdpATenant",
+ "mplsAExtP",
+ "mplsAIfP",
+ "mplsALabelPol",
+ "mplsANodeSidP",
+ "qosAMplsIngressRule",
+ "qosMplsMarking",
+ "qosAMplsEgressRule",
+ "cloudAGatewayRouterP",
+ "cloudATransitHubGwPol",
+ "cloudAL3IntTunnelIfP",
+ "cloudABdiId",
+ "mplsASrgbLabelPol",
+ "bfdAMhNodePol",
+ "bfdANodeP",
+ "leakASubnet",
+ "rtctrlASetNhUnchanged",
+ "mdpAService",
+ "cloudALIf",
+ "cloudAParamPol",
+ "cloudAComputePol",
+ "cloudAMgmtPol",
+ "cloudANWParams",
+ "fvRtScopeFrom",
+ "cloudACtxUnderlayP",
+ "cloudAHealthProbe",
+ "leakARouteCont",
+ "netflowAVmmExporterPol",
+ "cloudABrownfield",
+ "cloudAMapping",
+ "cloudASelectedEP",
+ "statsANlbStats",
+ "mdpAEntity",
+ "dbgANodeInst",
+ "snmpACtrlrInst",
+ "cloudAFrontendIPv4Addr",
+ "qosAUburst",
+ "telemetryAFteEvents",
+ "telemetryAFteEventsTcpFlags",
+ "telemetryAFteEventsExt",
+ "cloudACloudSvcEPg",
+ "hcloudASvcResBase",
+ "bgpADomainIdBase",
+ "fvAEpTag",
+ "bgpASiteOfOriginP",
+ "fvAEPSelectorDef",
+ "vmmCFaultInfo",
+ "synceAAIfPol",
+ "synceAIfPol",
+ "rtctrlASetRedistMultipath",
+ "cloudANextHopIp",
+ "cloudAVrfRouteLeakPol",
+ "hcloudALeakedPfx",
+ "leakAPrefix",
+ "fvARogueExceptionMac",
+ "bfdAMicroBfdP",
+ "hcloudAIntPfx",
+ "hcloudAExtPfx",
+ "cloudAVpnNetworkP",
+ "snmpUser",
+ "cloudAVirtualWanP",
+ "fvAFBRGroup",
+ "fvAFBRoute",
+ "fvAFBRMember",
+ "rtctrlASetPolicyTag",
+ "fvACtxRtSummPol",
+ "fvARtSummSubnet",
+ "fvAIntraVrfFabricImpRtctrlP",
+ "fvAFabricExpRtctrlP",
+ "cloudAVip",
+ "rtctrlAMatchAsPathRegexTerm",
+ "cloudAGcpFlowLogPol",
+ "statsAGcpNWStatsObj",
+ "cloudABfdPol",
+ "cloudABfdP",
+ "bgpACtxAddlPathPol",
+ "xcvrOpticsIfPol",
+ "xcvrOpticsFabIfPol",
+ "hostprotANamespace",
+ "fvARouteDeployP",
+ "rtdmcACSWPol",
+ "rtdmcACSWEntry",
+ "analyticsTo",
+ "analyticsFrom",
+ "dmemotltestAbsObject",
+ "bgpAsnmpBgpTraps",
+ "l3extARogueExceptionMac",
+ "l3extARogueExceptionMacGroup",
+ "vzAFiltPZEntry",
+]
diff --git a/ansible_collections/cisco/aci/plugins/module_utils/constants.py b/ansible_collections/cisco/aci/plugins/module_utils/constants.py
index 165b63431..26818ff64 100644
--- a/ansible_collections/cisco/aci/plugins/module_utils/constants.py
+++ b/ansible_collections/cisco/aci/plugins/module_utils/constants.py
@@ -97,4 +97,340 @@ EP_LOOP_PROTECTION_ACTION_MAPPING = {"bd": "bd-learn-disable", "port": "port-dis
FABRIC_POD_SELECTOR_TYPE_MAPPING = dict(all="ALL", range="range")
-TLS_MAPPING = {"tls_v1.0": "TLSv1", "tls_v1.1": "TLSv1.1", "tls_v1.2": "TLSv1.2"}
+OPFLEX_TLS_MAPPING = {"tls_v1.0": "TLSv1", "tls_v1.1": "TLSv1.1", "tls_v1.2": "TLSv1.2"}
+
+HTTP_TLS_MAPPING = {"tls_v1.0": "TLSv1", "tls_v1.1": "TLSv1.1", "tls_v1.2": "TLSv1.2", "tls_v1.3": "TLSv1.3"}
+
+ACI_ACCESS_SWITCH_POLICY_GROUP_CLASS_MAPPING = dict(
+ spine=dict(
+ class_name="infraSpineAccNodePGrp",
+ rn="infra/funcprof/spaccnodepgrp-{0}",
+ copp_pre_filter_policy=dict(class_name="infraRsIaclSpineProfile", tn_name="tnIaclSpineProfileName"),
+ bfd_ipv4_policy=dict(class_name="infraRsSpineBfdIpv4InstPol", tn_name="tnBfdIpv4InstPolName"),
+ bfd_ipv6_policy=dict(class_name="infraRsSpineBfdIpv6InstPol", tn_name="tnBfdIpv6InstPolName"),
+ copp_policy=dict(class_name="infraRsSpineCoppProfile", tn_name="tnCoppSpineProfileName"),
+ cdp_policy=dict(class_name="infraRsSpinePGrpToCdpIfPol", tn_name="tnCdpIfPolName"),
+ lldp_policy=dict(class_name="infraRsSpinePGrpToLldpIfPol", tn_name="tnLldpIfPolName"),
+ usb_configuration_policy=dict(class_name="infraRsSpineTopoctrlUsbConfigProfilePol", tn_name="tnTopoctrlUsbConfigProfilePolName"),
+ ),
+ leaf=dict(
+ class_name="infraAccNodePGrp",
+ rn="infra/funcprof/accnodepgrp-{0}",
+ copp_pre_filter_policy=dict(class_name="infraRsIaclLeafProfile", tn_name="tnIaclLeafProfileName"),
+ bfd_ipv4_policy=dict(class_name="infraRsBfdIpv4InstPol", tn_name="tnBfdIpv4InstPolName"),
+ bfd_ipv6_policy=dict(class_name="infraRsBfdIpv6InstPol", tn_name="tnBfdIpv6InstPolName"),
+ copp_policy=dict(class_name="infraRsLeafCoppProfile", tn_name="tnCoppLeafProfileName"),
+ cdp_policy=dict(class_name="infraRsLeafPGrpToCdpIfPol", tn_name="tnCdpIfPolName"),
+ lldp_policy=dict(class_name="infraRsLeafPGrpToLldpIfPol", tn_name="tnLldpIfPolName"),
+ usb_configuration_policy=dict(class_name="infraRsLeafTopoctrlUsbConfigProfilePol", tn_name="tnTopoctrlUsbConfigProfilePolName"),
+ ),
+)
+
+PIM_SETTING_CONTROL_STATE_MAPPING = {"fast": "fast-conv", "strict": "strict-rfc-compliant"}
+
+ACI_CLASS_MAPPING = dict(
+ consumer={
+ "class": "fvRsCons",
+ "rn": "rscons-",
+ "name": "tnVzBrCPName",
+ },
+ provider={
+ "class": "fvRsProv",
+ "rn": "rsprov-",
+ "name": "tnVzBrCPName",
+ },
+ taboo={
+ "class": "fvRsProtBy",
+ "rn": "rsprotBy-",
+ "name": "tnVzTabooName",
+ },
+ interface={
+ "class": "fvRsConsIf",
+ "rn": "rsconsIf-",
+ "name": "tnVzCPIfName",
+ },
+ intra_epg={
+ "class": "fvRsIntraEpg",
+ "rn": "rsintraEpg-",
+ "name": "tnVzBrCPName",
+ },
+)
+
+PROVIDER_MATCH_MAPPING = dict(
+ all="All",
+ at_least_one="AtleastOne",
+ at_most_one="AtmostOne",
+ none="None",
+)
+
+CONTRACT_LABEL_MAPPING = dict(
+ consumer="vzConsLbl",
+ provider="vzProvLbl",
+)
+
+SUBJ_LABEL_MAPPING = dict(
+ consumer="vzConsSubjLbl",
+ provider="vzProvSubjLbl",
+)
+
+SUBJ_LABEL_RN = dict(
+ consumer="conssubjlbl-",
+ provider="provsubjlbl-",
+)
+
+MATCH_ACTION_RULE_SET_METRIC_TYPE_MAPPING = {"ospf_type_1": "ospf-type1", "ospf_type_2": "ospf-type2", "": ""}
+
+MATCH_EIGRP_INTERFACE_POLICY_DELAY_UNIT_MAPPING = dict(picoseconds="pico", tens_of_microseconds="tens-of-micro")
+
+MATCH_EIGRP_INTERFACE_POLICY_CONTROL_STATE_MAPPING = dict(bfd="bfd", nexthop_self="nh-self", passive="passive", split_horizon="split-horizon")
+
+MATCH_TARGET_COS_MAPPING = {
+ "background": "0",
+ "best_effort": "1",
+ "excellent_effort": "2",
+ "critical_applications": "3",
+ "video": "4",
+ "voice": "5",
+ "internetwork_control": "6",
+ "network_control": "7",
+ "unspecified": "unspecified",
+}
+
+MATCH_PIM_INTERFACE_POLICY_CONTROL_STATE_MAPPING = dict(multicast_domain_boundary="border", strict_rfc_compliant="strict-rfc-compliant", passive="passive")
+
+MATCH_PIM_INTERFACE_POLICY_AUTHENTICATION_TYPE_MAPPING = dict(none="none", md5_hmac="ah-md5")
+
+MATCH_COLLECT_NETFLOW_RECORD_MAPPING = dict(
+ bytes_counter="count-bytes",
+ pkts_counter="count-pkts",
+ pkt_disposition="pkt-disp",
+ sampler_id="sampler-id",
+ source_interface="src-intf",
+ tcp_flags="tcp-flags",
+ first_pkt_timestamp="ts-first",
+ recent_pkt_timestamp="ts-recent",
+)
+
+MATCH_MATCH_NETFLOW_RECORD_MAPPING = dict(
+ destination_ipv4_v6="dst-ip",
+ destination_ipv4="dst-ipv4",
+ destination_ipv6="dst-ipv6",
+ destination_mac="dst-mac",
+ destination_port="dst-port",
+ ethertype="ethertype",
+ ip_protocol="proto",
+ source_ipv4_v6="src-ip",
+ source_ipv4="src-ipv4",
+ source_ipv6="src-ipv6",
+ source_mac="src-mac",
+ source_port="src-port",
+ ip_tos="tos",
+ unspecified="unspecified",
+ vlan="vlan",
+)
+
+MATCH_SOURCE_IP_TYPE_NETFLOW_EXPORTER_MAPPING = dict(
+ custom_source_ip="custom-src-ip",
+ inband_management_ip="inband-mgmt-ip",
+ out_of_band_management_ip="oob-mgmt-ip",
+ ptep="ptep",
+)
+
+ECC_CURVE = {"P256": "prime256v1", "P384": "secp384r1", "P521": "secp521r1", "none": "none"}
+
+THROTTLE_UNIT = dict(requests_per_second="r/s", requests_per_minute="r/m")
+
+SSH_CIPHERS = dict(
+ aes128_ctr="aes128-ctr",
+ aes192_ctr="aes192-ctr",
+ aes256_ctr="aes256-ctr",
+ aes128_gcm="aes128-gcm@openssh.com",
+ aes256_gcm="aes256-gcm@openssh.com",
+ chacha20="chacha20-poly1305@openssh.com",
+)
+
+SSH_MACS = dict(
+ sha1="hmac-sha1",
+ sha2_256="hmac-sha2-256",
+ sha2_512="hmac-sha2-512",
+ sha2_256_etm="hmac-sha2-256-etm@openssh.com",
+ sha2_512_etm="hmac-sha2-512-etm@openssh.com",
+)
+
+KEX_ALGORITHMS = dict(
+ dh_sha1="diffie-hellman-group14-sha1",
+ dh_sha256="diffie-hellman-group14-sha256",
+ dh_sha512="diffie-hellman-group16-sha512",
+ curve_sha256="curve25519-sha256",
+ curve_sha256_libssh="curve25519-sha256@libssh.org",
+ ecdh_256="ecdh-sha2-nistp256",
+ ecdh_384="ecdh-sha2-nistp384",
+ ecdh_521="ecdh-sha2-nistp521",
+)
+
+USEG_ATTRIBUTE_MAPPING = dict(
+ ip=dict(attribute_type="ip", attribute_class="fvIpAttr", rn_format="ipattr-{0}"),
+ mac=dict(attribute_type="mac", attribute_class="fvMacAttr", rn_format="macattr-{0}"),
+ dns=dict(attribute_type="dns", attribute_class="fvDnsAttr", rn_format="dnsattr-{0}"),
+ ad_group=dict(attribute_type="ad", attribute_class="fvIdGroupAttr", rn_format="idgattr-[{0}]"),
+ vm_custom_attr=dict(attribute_type="custom-label", attribute_class="fvVmAttr", rn_format="vmattr-{0}"),
+ vm_vmm_domain=dict(attribute_type="domain", attribute_class="fvVmAttr", rn_format="vmattr-{0}"),
+ vm_operating_system=dict(attribute_type="guest-os", attribute_class="fvVmAttr", rn_format="vmattr-{0}"),
+ vm_hypervisor_id=dict(attribute_type="hv", attribute_class="fvVmAttr", rn_format="vmattr-{0}"),
+ vm_datacenter=dict(attribute_type="rootContName", attribute_class="fvVmAttr", rn_format="vmattr-{0}"),
+ vm_id=dict(attribute_type="vm", attribute_class="fvVmAttr", rn_format="vmattr-{0}"),
+ vm_name=dict(attribute_type="vm-name", attribute_class="fvVmAttr", rn_format="vmattr-{0}"),
+ vm_folder=dict(attribute_type="vm-folder", attribute_class="fvVmAttr", rn_format="vmattr-{0}"),
+ vm_folder_path=dict(attribute_type="vmfolder-path", attribute_class="fvVmAttr", rn_format="vmattr-{0}"),
+ vm_vnic=dict(attribute_type="vnic", attribute_class="fvVmAttr", rn_format="vmattr-{0}"),
+ vm_tag=dict(attribute_type="tag", attribute_class="fvVmAttr", rn_format="vmattr-{0}"),
+)
+
+OPERATOR_MAPPING = dict(equals="equals", contains="contains", starts_with="startsWith", ends_with="endsWith")
+
+MATCH_STORM_CONTROL_POLICY_TYPE_MAPPING = dict(all_types="Invalid", unicast_broadcast_multicast="Valid")
+
+POLICY_LABEL_COLORS = [
+ "alice_blue",
+ "antique_white",
+ "aqua",
+ "aquamarine",
+ "azure",
+ "beige",
+ "bisque",
+ "black",
+ "blanched_almond",
+ "blue",
+ "blue_violet",
+ "brown",
+ "burlywood",
+ "cadet_blue",
+ "chartreuse",
+ "chocolate",
+ "coral",
+ "cornflower_blue",
+ "cornsilk",
+ "crimson",
+ "cyan",
+ "dark_blue",
+ "dark_cyan",
+ "dark_goldenrod",
+ "dark_gray",
+ "dark_green",
+ "dark_khaki",
+ "dark_magenta",
+ "dark_olive_green",
+ "dark_orange",
+ "dark_orchid",
+ "dark_red",
+ "dark_salmon",
+ "dark_sea_green",
+ "dark_slate_blue",
+ "dark_slate_gray",
+ "dark_turquoise",
+ "dark_violet",
+ "deep_pink",
+ "deep_sky_blue",
+ "dim_gray",
+ "dodger_blue",
+ "fire_brick",
+ "floral_white",
+ "forest_green",
+ "fuchsia",
+ "gainsboro",
+ "ghost_white",
+ "gold",
+ "goldenrod",
+ "gray",
+ "green",
+ "green_yellow",
+ "honeydew",
+ "hot_pink",
+ "indian_red",
+ "indigo",
+ "ivory",
+ "khaki",
+ "lavender",
+ "lavender_blush",
+ "lawn_green",
+ "lemon_chiffon",
+ "light_blue",
+ "light_coral",
+ "light_cyan",
+ "light_goldenrod_yellow",
+ "light_gray",
+ "light_green",
+ "light_pink",
+ "light_salmon",
+ "light_sea_green",
+ "light_sky_blue",
+ "light_slate_gray",
+ "light_steel_blue",
+ "light_yellow",
+ "lime",
+ "lime_green",
+ "linen",
+ "magenta",
+ "maroon",
+ "medium_aquamarine",
+ "medium_blue",
+ "medium_orchid",
+ "medium_purple",
+ "medium_sea_green",
+ "medium_slate_blue",
+ "medium_spring_green",
+ "medium_turquoise",
+ "medium_violet_red",
+ "midnight_blue",
+ "mint_cream",
+ "misty_rose",
+ "moccasin",
+ "navajo_white",
+ "navy",
+ "old_lace",
+ "olive",
+ "olive_drab",
+ "orange",
+ "orange_red",
+ "orchid",
+ "pale_goldenrod",
+ "pale_green",
+ "pale_turquoise",
+ "pale_violet_red",
+ "papaya_whip",
+ "peachpuff",
+ "peru",
+ "pink",
+ "plum",
+ "powder_blue",
+ "purple",
+ "red",
+ "rosy_brown",
+ "royal_blue",
+ "saddle_brown",
+ "salmon",
+ "sandy_brown",
+ "sea_green",
+ "seashell",
+ "sienna",
+ "silver",
+ "sky_blue",
+ "slate_blue",
+ "slate_gray",
+ "snow",
+ "spring_green",
+ "steel_blue",
+ "tan",
+ "teal",
+ "thistle",
+ "tomato",
+ "turquoise",
+ "violet",
+ "wheat",
+ "white",
+ "white_smoke",
+ "yellow",
+ "yellow_green",
+]
+
+MATCH_ACCESS_POLICIES_SELECTOR_TYPE = dict(range="range", all="ALL")