ACI: Make querying links and nodes possible (#43441)
This functionality was not considered when the module was written, but there's no reason why it shouldn't be supported. We had to rework the query string construction and object filtering. This new functionality allows to filter on arbitrary keys and supports None values. This PR fixes various issues with the existing framework, including querying specific objects using construct_url_4 (i.e. aci_epg_to_contract and aci_static_binding_to_epg)
This commit is contained in:
parent
529cd19ca5
commit
d8ba8c03f3
105 changed files with 1236 additions and 1052 deletions
|
@ -78,46 +78,6 @@ def aci_argument_spec():
|
|||
)
|
||||
|
||||
|
||||
'''
|
||||
URL_MAPPING = dict(
|
||||
action_rule=dict(aci_class='rtctrlAttrP', mo='attr-', key='name'),
|
||||
aep=dict(aci_class='infraAttEntityP', mo='infra/attentp-', key='name'),
|
||||
ap=dict(aci_class='fvAp', mo='ap-', key='name'),
|
||||
bd=dict(aci_class='fvBD', mo='BD-', key='name'),
|
||||
bd_l3out=dict(aci_class='fvRsBDToOut', mo='rsBDToOut-', key='tnL3extOutName'),
|
||||
contract=dict(aci_class='vzBrCP', mo='brc-', key='name'),
|
||||
entry=dict(aci_class='vzEntry', mo='e-', key='name'),
|
||||
epg=dict(aci_class='fvAEPg', mo='epg-', key='name'),
|
||||
epg_consumer=dict(aci_class='fvRsCons', mo='rscons-', key='tnVzBrCPName'),
|
||||
epg_domain=dict(aci_class='fvRsDomAtt', mo='rsdomAtt-', key='tDn'),
|
||||
epg_provider=dict(aci_class='fvRsProv', mo='rsprov-', key='tnVzBrCPName'),
|
||||
epr_policy=dict(aci_class='fvEpRetPol', mo='epRPol-', key='name'),
|
||||
export_policy=dict(aci_class='configExportP', mo='fabric/configexp-', key='name'),
|
||||
fc_policy=dict(aci_class='fcIfPol', mo='infra/fcIfPol-', key='name'),
|
||||
filter=dict(aci_class='vzFilter', mo='flt-', key='name'),
|
||||
gateway_addr=dict(aci_class='fvSubnet', mo='subnet-', key='ip'),
|
||||
import_policy=dict(aci_class='configImportP', mo='fabric/configimp-', key='name'),
|
||||
l2_policy=dict(aci_class='l2IfPol', mo='infra/l2IfP-', key='name'),
|
||||
lldp_policy=dict(aci_class='lldpIfPol', mo='infra/lldpIfP-', key='name'),
|
||||
mcp=dict(aci_class='mcpIfPol', mo='infra/mcpIfP-', key='name'),
|
||||
monitoring_policy=dict(aci_class='monEPGPol', mo='monepg-', key='name'),
|
||||
port_channel=dict(aci_class='lacpLagPol', mo='infra/lacplagp-', key='name'),
|
||||
port_security=dict(aci_class='l2PortSecurityPol', mo='infra/portsecurityP-', key='name'),
|
||||
rtp=dict(aci_class='l3extRouteTagPol', mo='rttag-', key='name'),
|
||||
snapshot=dict(aci_class='configSnapshot', mo='snapshot-', key='name'),
|
||||
snapshot_container=dict(aci_class='configSnapshotCont', mo='backupst/snapshots-', key='name'),
|
||||
subject=dict(aci_class='vzSubj', mo='subj-', key='name'),
|
||||
subject_filter=dict(aci_class='vzRsSubjFiltAtt', mo='rssubjFiltAtt-', key='tnVzFilterName'),
|
||||
taboo_contract=dict(aci_class='vzTaboo', mo='taboo-', key='name'),
|
||||
tenant=dict(aci_class='fvTenant', mo='tn-', key='name'),
|
||||
tenant_span_dst_grp=dict(aci_class='spanDestGrp', mo='destgrp-', key='name'),
|
||||
tenant_span_src_grp=dict(aci_class='spanSrcGrp', mo='srcgrp-', key='name'),
|
||||
tenant_span_src_grp_dst_grp=dict(aci_class='spanSpanLbl', mo='spanlbl-', key='name'),
|
||||
vrf=dict(aci_class='fvCtx', mo='ctx-', key='name'),
|
||||
)
|
||||
'''
|
||||
|
||||
|
||||
class ACIModule(object):
|
||||
|
||||
def __init__(self, module):
|
||||
|
@ -125,6 +85,7 @@ class ACIModule(object):
|
|||
self.params = module.params
|
||||
self.result = dict(changed=False)
|
||||
self.headers = dict()
|
||||
self.child_classes = set()
|
||||
|
||||
# error output
|
||||
self.error = dict(code=None, text=None)
|
||||
|
@ -423,14 +384,34 @@ class ACIModule(object):
|
|||
if self.result['diff']['before'] != self.result['diff']['after']:
|
||||
self.result['changed'] = True
|
||||
|
||||
# TODO: This could be designed to update existing keys
|
||||
def update_qs(self, params):
|
||||
''' Append key-value pairs to self.filter_string '''
|
||||
accepted_params = dict((k, v) for (k, v) in params.items() if v)
|
||||
if accepted_params:
|
||||
if self.filter_string:
|
||||
self.filter_string += '&'
|
||||
else:
|
||||
self.filter_string = '?'
|
||||
self.filter_string += '&'.join(['%s=%s' % (k, v) for (k, v) in accepted_params.items()])
|
||||
|
||||
# TODO: This could be designed to accept multiple obj_classes and keys
|
||||
def build_filter(self, obj_class, params):
|
||||
''' Build an APIC filter based on obj_class and key-value pairs '''
|
||||
accepted_params = dict((k, v) for (k, v) in params.items() if v is not None)
|
||||
if len(accepted_params) == 1:
|
||||
return ','.join('eq({0}.{1}, "{2}")'.format(obj_class, k, v) for (k, v) in accepted_params.items())
|
||||
elif len(accepted_params) > 1:
|
||||
return 'and(' + ','.join(['eq({0}.{1}, "{2}")'.format(obj_class, k, v) for (k, v) in accepted_params.items()]) + ')'
|
||||
|
||||
def construct_url(self, root_class, subclass_1=None, subclass_2=None, subclass_3=None, child_classes=None):
|
||||
"""
|
||||
This method is used to retrieve the appropriate URL path and filter_string to make the request to the APIC.
|
||||
|
||||
:param root_class: The top-level class dictionary containing aci_class, aci_rn, filter_target, and module_object keys.
|
||||
:param sublass_1: The second-level class dictionary containing aci_class, aci_rn, filter_target, and module_object keys.
|
||||
:param sublass_2: The third-level class dictionary containing aci_class, aci_rn, filter_target, and module_object keys.
|
||||
:param sublass_3: The fourth-level class dictionary containing aci_class, aci_rn, filter_target, and module_object keys.
|
||||
:param root_class: The top-level class dictionary containing aci_class, aci_rn, target_filter, and module_object keys.
|
||||
:param sublass_1: The second-level class dictionary containing aci_class, aci_rn, target_filter, and module_object keys.
|
||||
:param sublass_2: The third-level class dictionary containing aci_class, aci_rn, target_filter, and module_object keys.
|
||||
:param sublass_3: The fourth-level class dictionary containing aci_class, aci_rn, target_filter, and module_object keys.
|
||||
:param child_classes: The list of child classes that the module supports along with the object.
|
||||
:type root_class: dict
|
||||
:type subclass_1: dict
|
||||
|
@ -439,207 +420,203 @@ class ACIModule(object):
|
|||
:type child_classes: list
|
||||
:return: The path and filter_string needed to build the full URL.
|
||||
"""
|
||||
self.filter_string = ''
|
||||
|
||||
if child_classes is None:
|
||||
child_includes = ''
|
||||
self.child_classes = set()
|
||||
else:
|
||||
child_includes = ','.join(child_classes)
|
||||
child_includes = '&rsp-subtree=full&rsp-subtree-class=' + child_includes
|
||||
self.child_classes = set(child_classes)
|
||||
|
||||
if subclass_3 is not None:
|
||||
path, filter_string = self._construct_url_4(root_class, subclass_1, subclass_2, subclass_3, child_includes)
|
||||
self._construct_url_4(root_class, subclass_1, subclass_2, subclass_3)
|
||||
elif subclass_2 is not None:
|
||||
path, filter_string = self._construct_url_3(root_class, subclass_1, subclass_2, child_includes)
|
||||
self._construct_url_3(root_class, subclass_1, subclass_2)
|
||||
elif subclass_1 is not None:
|
||||
path, filter_string = self._construct_url_2(root_class, subclass_1, child_includes)
|
||||
self._construct_url_2(root_class, subclass_1)
|
||||
else:
|
||||
path, filter_string = self._construct_url_1(root_class, child_includes)
|
||||
self._construct_url_1(root_class)
|
||||
|
||||
self.path = path
|
||||
if 'port' in self.params and self.params['port'] is not None:
|
||||
self.url = '{protocol}://{host}:{port}/{path}'.format(path=path, **self.module.params)
|
||||
self.url = '{protocol}://{host}:{port}/{path}'.format(path=self.path, **self.module.params)
|
||||
else:
|
||||
self.url = '{protocol}://{host}/{path}'.format(path=path, **self.module.params)
|
||||
self.filter_string = filter_string
|
||||
self.url = '{protocol}://{host}/{path}'.format(path=self.path, **self.module.params)
|
||||
|
||||
def _construct_url_1(self, obj, child_includes):
|
||||
if self.child_classes:
|
||||
# Append child_classes to filter_string if filter string is empty
|
||||
self.update_qs({'rsp-subtree': 'full', 'rsp-subtree-class': ','.join(self.child_classes)})
|
||||
|
||||
def _construct_url_1(self, obj):
|
||||
"""
|
||||
This method is used by get_url when the object is the top-level class.
|
||||
This method is used by construct_url when the object is the top-level class.
|
||||
"""
|
||||
obj_class = obj['aci_class']
|
||||
obj_rn = obj['aci_rn']
|
||||
obj_filter = obj['target_filter']
|
||||
mo = obj['module_object']
|
||||
|
||||
# State is present or absent
|
||||
if self.module.params['state'] != 'query':
|
||||
path = 'api/mo/uni/{0}.json'.format(obj_rn)
|
||||
filter_string = '?rsp-prop-include=config-only' + child_includes
|
||||
# Query for all objects of the module's class
|
||||
if self.module.params['state'] in ('absent', 'present'):
|
||||
# State is absent or present
|
||||
self.path = 'api/mo/uni/{0}.json'.format(obj_rn)
|
||||
self.update_qs({'rsp-prop-include': 'config-only'})
|
||||
elif mo is None:
|
||||
path = 'api/class/{0}.json'.format(obj_class)
|
||||
filter_string = ''
|
||||
# Query for a specific object in the module's class
|
||||
# Query for all objects of the module's class (filter by properties)
|
||||
self.path = 'api/class/{0}.json'.format(obj_class)
|
||||
else:
|
||||
path = 'api/mo/uni/{0}.json'.format(obj_rn)
|
||||
filter_string = ''
|
||||
# Query for a specific object in the module's class
|
||||
self.path = 'api/mo/uni/{0}.json'.format(obj_rn)
|
||||
|
||||
# Append child_includes to filter_string if filter string is empty
|
||||
if child_includes is not None and filter_string == '':
|
||||
filter_string = child_includes.replace('&', '?', 1)
|
||||
|
||||
return path, filter_string
|
||||
|
||||
def _construct_url_2(self, parent, obj, child_includes):
|
||||
def _construct_url_2(self, parent, obj):
|
||||
"""
|
||||
This method is used by get_url when the object is the second-level class.
|
||||
This method is used by construct_url when the object is the second-level class.
|
||||
"""
|
||||
parent_class = parent['aci_class']
|
||||
parent_rn = parent['aci_rn']
|
||||
parent_filter = parent['target_filter']
|
||||
parent_obj = parent['module_object']
|
||||
obj_class = obj['aci_class']
|
||||
obj_rn = obj['aci_rn']
|
||||
obj_filter = obj['filter_target']
|
||||
obj_filter = obj['target_filter']
|
||||
mo = obj['module_object']
|
||||
|
||||
if not child_includes:
|
||||
self_child_includes = '?rsp-subtree=full&rsp-subtree-class=' + obj_class
|
||||
else:
|
||||
self_child_includes = child_includes.replace('&', '?', 1) + ',' + obj_class
|
||||
|
||||
# State is present or absent
|
||||
if self.module.params['state'] != 'query':
|
||||
path = 'api/mo/uni/{0}/{1}.json'.format(parent_rn, obj_rn)
|
||||
filter_string = '?rsp-prop-include=config-only' + child_includes
|
||||
# Query for all objects of the module's class
|
||||
elif mo is None and parent_obj is None:
|
||||
path = 'api/class/{0}.json'.format(obj_class)
|
||||
filter_string = ''
|
||||
# Queries when parent object is provided
|
||||
elif parent_obj is not None:
|
||||
# Query for specific object in the module's class
|
||||
if mo is not None:
|
||||
path = 'api/mo/uni/{0}/{1}.json'.format(parent_rn, obj_rn)
|
||||
filter_string = ''
|
||||
if self.module.params['state'] in ('absent', 'present'):
|
||||
# State is absent or present
|
||||
self.path = 'api/mo/uni/{0}/{1}.json'.format(parent_rn, obj_rn)
|
||||
self.update_qs({'rsp-prop-include': 'config-only'})
|
||||
elif parent_obj is None and mo is None:
|
||||
# Query for all objects of the module's class
|
||||
self.path = 'api/class/{0}.json'.format(obj_class)
|
||||
elif parent_obj is None: # mo is known
|
||||
# Query for all objects of the module's class that match the provided ID value
|
||||
self.path = 'api/class/{0}.json'.format(obj_class)
|
||||
self.update_qs({'query-target-filter': self.build_filter(obj_class, obj_filter)})
|
||||
elif mo is None: # parent_obj is known
|
||||
# Query for all object's of the module's class that belong to a specific parent object
|
||||
else:
|
||||
path = 'api/mo/uni/{0}.json'.format(parent_rn)
|
||||
filter_string = self_child_includes
|
||||
# Query for all objects of the module's class that match the provided ID value
|
||||
self.child_classes.add(obj_class)
|
||||
self.path = 'api/mo/uni/{0}.json'.format(parent_rn)
|
||||
else:
|
||||
path = 'api/class/{0}.json'.format(obj_class)
|
||||
filter_string = '?query-target-filter={0}'.format(obj_filter) + child_includes
|
||||
# Query for specific object in the module's class
|
||||
self.path = 'api/mo/uni/{0}/{1}.json'.format(parent_rn, obj_rn)
|
||||
|
||||
# Append child_includes to filter_string if filter string is empty
|
||||
if child_includes is not None and filter_string == '':
|
||||
filter_string = child_includes.replace('&', '?', 1)
|
||||
|
||||
return path, filter_string
|
||||
|
||||
def _construct_url_3(self, root, parent, obj, child_includes):
|
||||
def _construct_url_3(self, root, parent, obj):
|
||||
"""
|
||||
This method is used by get_url when the object is the third-level class.
|
||||
This method is used by construct_url when the object is the third-level class.
|
||||
"""
|
||||
root_class = root['aci_class']
|
||||
root_rn = root['aci_rn']
|
||||
root_filter = root['target_filter']
|
||||
root_obj = root['module_object']
|
||||
parent_class = parent['aci_class']
|
||||
parent_rn = parent['aci_rn']
|
||||
parent_filter = parent['filter_target']
|
||||
parent_filter = parent['target_filter']
|
||||
parent_obj = parent['module_object']
|
||||
obj_class = obj['aci_class']
|
||||
obj_rn = obj['aci_rn']
|
||||
obj_filter = obj['filter_target']
|
||||
obj_filter = obj['target_filter']
|
||||
mo = obj['module_object']
|
||||
|
||||
if not child_includes:
|
||||
self_child_includes = '&rsp-subtree=full&rsp-subtree-class=' + obj_class
|
||||
else:
|
||||
self_child_includes = '{0},{1}'.format(child_includes, obj_class)
|
||||
|
||||
if not child_includes:
|
||||
parent_self_child_includes = '&rsp-subtree=full&rsp-subtree-class={0},{1}'.format(parent_class, obj_class)
|
||||
else:
|
||||
parent_self_child_includes = '{0},{1},{2}'.format(child_includes, parent_class, obj_class)
|
||||
|
||||
# State is ablsent or present
|
||||
if self.module.params['state'] != 'query':
|
||||
path = 'api/mo/uni/{0}/{1}/{2}.json'.format(root_rn, parent_rn, obj_rn)
|
||||
filter_string = '?rsp-prop-include=config-only' + child_includes
|
||||
# Query for all objects of the module's class
|
||||
elif mo is None and parent_obj is None and root_obj is None:
|
||||
path = 'api/class/{0}.json'.format(obj_class)
|
||||
filter_string = ''
|
||||
# Queries when root object is provided
|
||||
elif root_obj is not None:
|
||||
# Queries when parent object is provided
|
||||
if parent_obj is not None:
|
||||
# Query for a specific object of the module's class
|
||||
if mo is not None:
|
||||
path = 'api/mo/uni/{0}/{1}/{2}.json'.format(root_rn, parent_rn, obj_rn)
|
||||
filter_string = ''
|
||||
# Query for all objects of the module's class that belong to a specific parent object
|
||||
else:
|
||||
path = 'api/mo/uni/{0}/{1}.json'.format(root_rn, parent_rn)
|
||||
filter_string = self_child_includes.replace('&', '?', 1)
|
||||
# Query for all objects of the module's class that match the provided ID value and belong to a specefic root object
|
||||
elif mo is not None:
|
||||
path = 'api/mo/uni/{0}.json'.format(root_rn)
|
||||
filter_string = '?rsp-subtree-filter={0}{1}'.format(obj_filter, self_child_includes)
|
||||
# Query for all objects of the module's class that belong to a specific root object
|
||||
else:
|
||||
path = 'api/mo/uni/{0}.json'.format(root_rn)
|
||||
filter_string = '?' + parent_self_child_includes
|
||||
# Queries when parent object is provided but root object is not provided
|
||||
elif parent_obj is not None:
|
||||
# Query for all objects of the module's class that belong to any parent class
|
||||
# matching the provided ID values for both object and parent object
|
||||
if mo is not None:
|
||||
path = 'api/class/{0}.json'.format(parent_class)
|
||||
filter_string = '?query-target-filter={0}{1}&rsp-subtree-filter={2}'.format(
|
||||
parent_filter, self_child_includes, obj_filter)
|
||||
if self.module.params['state'] in ('absent', 'present'):
|
||||
# State is absent or present
|
||||
self.path = 'api/mo/uni/{0}/{1}/{2}.json'.format(root_rn, parent_rn, obj_rn)
|
||||
self.update_qs({'rsp-prop-include': 'config-only'})
|
||||
elif root_obj is None and parent_obj is None and mo is None:
|
||||
# Query for all objects of the module's class
|
||||
self.path = 'api/class/{0}.json'.format(obj_class)
|
||||
elif root_obj is None and parent_obj is None: # mo is known
|
||||
# Query for all objects of the module's class matching the provided ID value of the object
|
||||
self.path = 'api/class/{0}.json'.format(obj_class)
|
||||
self.update_qs({'query-target-filter': self.build_filter(obj_class, obj_filter)})
|
||||
elif root_obj is None and mo is None: # parent_obj is known
|
||||
# Query for all objects of the module's class that belong to any parent class
|
||||
# matching the provided ID value for the parent object
|
||||
else:
|
||||
path = 'api/class/{0}.json'.format(parent_class)
|
||||
filter_string = '?query-target-filter={0}{1}'.format(parent_filter, self_child_includes)
|
||||
# Query for all objects of the module's class matching the provided ID value of the object
|
||||
self.child_classes.add(obj_class)
|
||||
self.path = 'api/class/{0}.json'.format(parent_class)
|
||||
self.update_qs({'query-target-filter': self.build_filter(parent_class, parent_filter)})
|
||||
elif parent_obj is None and mo is None: # root_obj is known
|
||||
# Query for all objects of the module's class that belong to a specific root object
|
||||
self.child_classes.update([parent_class, 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)})
|
||||
elif root_obj is None: # mo and parent_obj are known
|
||||
# Query for all objects of the module's class that belong to any parent class
|
||||
# matching the provided ID values for both object and parent object
|
||||
self.child_classes.add(obj_class)
|
||||
self.path = 'api/class/{0}.json'.format(parent_class)
|
||||
self.update_qs({'query-target-filter': self.build_filter(parent_class, parent_filter)})
|
||||
self.update_qs({'rsp-subtree-filter': self.build_filter(obj_class, obj_filter)})
|
||||
elif parent_obj is None: # mo and root_obj are known
|
||||
# Query for all objects of the module's class that match the provided ID value and belong to a specific root object
|
||||
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 parent_filter and obj_filter
|
||||
self.update_qs({'rsp-subtree-filter': self.build_filter(obj_class, obj_filter)})
|
||||
elif mo is None: # root_obj and parent_obj are known
|
||||
# Query for all objects of the module's class that belong to a specific parent object
|
||||
self.child_classes.add(obj_class)
|
||||
self.path = 'api/mo/uni/{0}/{1}.json'.format(root_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:
|
||||
path = 'api/class/{0}.json'.format(obj_class)
|
||||
filter_string = '?query-target-filter={0}'.format(obj_filter) + child_includes
|
||||
# Query for a specific object of the module's class
|
||||
self.path = 'api/mo/uni/{0}/{1}/{2}.json'.format(root_rn, parent_rn, obj_rn)
|
||||
|
||||
# append child_includes to filter_string if filter string is empty
|
||||
if child_includes is not None and filter_string == '':
|
||||
filter_string = child_includes.replace('&', '?', 1)
|
||||
|
||||
return path, filter_string
|
||||
|
||||
def _construct_url_4(self, root, sec, parent, obj, child_includes):
|
||||
def _construct_url_4(self, root, sec, parent, obj):
|
||||
"""
|
||||
This method is used by get_url when the object is the third-level class.
|
||||
This method is used by construct_url when the object is the fourth-level class.
|
||||
"""
|
||||
# root_class = root['aci_class']
|
||||
root_class = root['aci_class']
|
||||
root_rn = root['aci_rn']
|
||||
# root_filter = root['filter_target']
|
||||
# root_obj = root['module_object']
|
||||
# sec_class = sec['aci_class']
|
||||
root_filter = root['target_filter']
|
||||
root_obj = root['module_object']
|
||||
sec_class = sec['aci_class']
|
||||
sec_rn = sec['aci_rn']
|
||||
# sec_filter = sec['filter_target']
|
||||
# sec_obj = sec['module_object']
|
||||
# parent_class = parent['aci_class']
|
||||
sec_filter = sec['target_filter']
|
||||
sec_obj = sec['module_object']
|
||||
parent_class = parent['aci_class']
|
||||
parent_rn = parent['aci_rn']
|
||||
# parent_filter = parent['filter_target']
|
||||
# parent_obj = parent['module_object']
|
||||
parent_filter = parent['target_filter']
|
||||
parent_obj = parent['module_object']
|
||||
obj_class = obj['aci_class']
|
||||
obj_rn = obj['aci_rn']
|
||||
# obj_filter = obj['filter_target']
|
||||
# mo = obj['module_object']
|
||||
obj_filter = obj['target_filter']
|
||||
mo = obj['module_object']
|
||||
|
||||
# State is ablsent or present
|
||||
if self.module.params['state'] != 'query':
|
||||
path = 'api/mo/uni/{0}/{1}/{2}/{3}.json'.format(root_rn, sec_rn, parent_rn, obj_rn)
|
||||
filter_string = '?rsp-prop-include=config-only' + child_includes
|
||||
if self.child_classes is None:
|
||||
self.child_classes = [obj_class]
|
||||
|
||||
if self.module.params['state'] in ('absent', 'present'):
|
||||
# State is absent or present
|
||||
self.path = 'api/mo/uni/{0}/{1}/{2}/{3}.json'.format(root_rn, sec_rn, parent_rn, obj_rn)
|
||||
self.update_qs({'rsp-prop-include': 'config-only'})
|
||||
# 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 sec_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 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}.json'.format(root_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}.json'.format(root_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:
|
||||
path = 'api/class/{0}.json'.format(obj_class)
|
||||
filter_string = child_includes
|
||||
|
||||
return path, filter_string
|
||||
# Query for a specific object of the module's class
|
||||
self.path = 'api/mo/uni/{0}/{1}/{2}/{3}.json'.format(root_rn, sec_rn, parent_rn, obj_rn)
|
||||
|
||||
def delete_config(self):
|
||||
"""
|
||||
|
|
|
@ -301,8 +301,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='aaaUser',
|
||||
aci_rn='userext/user-{0}'.format(aaa_user),
|
||||
filter_target='eq(aaaUser.name, "{0}")'.format(aaa_user),
|
||||
module_object=aaa_user,
|
||||
target_filter={'name': aaa_user},
|
||||
),
|
||||
)
|
||||
aci.get_existing()
|
||||
|
|
|
@ -240,14 +240,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class=ACI_MAPPING[aaa_user_type]['aci_class'],
|
||||
aci_rn=ACI_MAPPING[aaa_user_type]['aci_mo'] + aaa_user,
|
||||
filter_target='eq({0}.name, "{1}")'.format(ACI_MAPPING[aaa_user_type]['aci_class'], aaa_user),
|
||||
module_object=aaa_user,
|
||||
target_filter={'name': aaa_user},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='aaaUserCert',
|
||||
aci_rn='usercert-{0}'.format(certificate_name),
|
||||
filter_target='eq(aaaUserCert.name, "{0}")'.format(certificate_name),
|
||||
module_object=certificate_name,
|
||||
target_filter={'name': certificate_name},
|
||||
),
|
||||
)
|
||||
aci.get_existing()
|
||||
|
|
|
@ -282,15 +282,15 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='infraAccPortP',
|
||||
aci_rn='infra/accportprof-{0}'.format(leaf_interface_profile),
|
||||
filter_target='eq(infraAccPortP.name, "{0}")'.format(leaf_interface_profile),
|
||||
module_object=leaf_interface_profile,
|
||||
target_filter={'name': leaf_interface_profile},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='infraHPortS',
|
||||
# NOTE: normal rn: hports-{name}-typ-{type}, hence here hardcoded to range for purposes of module
|
||||
aci_rn='hports-{0}-typ-range'.format(access_port_selector),
|
||||
filter_target='eq(infraHPortS.name, "{0}")'.format(access_port_selector),
|
||||
module_object=access_port_selector,
|
||||
target_filter={'name': access_port_selector},
|
||||
),
|
||||
child_classes=['infraPortBlk', 'infraRsAccBaseGrp'],
|
||||
)
|
||||
|
|
|
@ -229,8 +229,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='infraAttEntityP',
|
||||
aci_rn='infra/attentp-{0}'.format(aep),
|
||||
filter_target='eq(infraAttEntityP.name, "{0}")'.format(aep),
|
||||
module_object=aep,
|
||||
target_filter={'name': aep},
|
||||
),
|
||||
)
|
||||
aci.get_existing()
|
||||
|
|
|
@ -264,14 +264,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='infraAttEntityP',
|
||||
aci_rn='infra/attentp-{0}'.format(aep),
|
||||
filter_target='eq(infraAttEntityP.name, "{0}")'.format(aep),
|
||||
module_object=aep,
|
||||
target_filter={'name': aep},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='infraRsDomP',
|
||||
aci_rn='rsdomP-[{0}]'.format(domain_mo),
|
||||
filter_target='eq(infraRsDomP.tDn, "{0}")'.format(domain_mo),
|
||||
module_object=domain_mo,
|
||||
target_filter={'tDn': domain_mo},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -223,14 +223,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='fvAp',
|
||||
aci_rn='ap-{0}'.format(ap),
|
||||
filter_target='eq(fvAp.name, "{0}")'.format(ap),
|
||||
module_object=ap,
|
||||
target_filter={'name': ap},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -381,14 +381,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='fvBD',
|
||||
aci_rn='BD-{0}'.format(bd),
|
||||
filter_target='eq(fvBD.name, "{0}")'.format(bd),
|
||||
module_object=bd,
|
||||
target_filter={'name': bd},
|
||||
),
|
||||
child_classes=['fvRsCtx', 'fvRsIgmpsn', 'fvRsBDToNdP', 'fvRsBdToEpRet'],
|
||||
)
|
||||
|
|
|
@ -372,20 +372,20 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='fvBD',
|
||||
aci_rn='BD-{0}'.format(bd),
|
||||
filter_target='eq(fvBD.name, "{0}")'.format(bd),
|
||||
module_object=bd,
|
||||
target_filter={'name': bd},
|
||||
),
|
||||
subclass_2=dict(
|
||||
aci_class='fvSubnet',
|
||||
aci_rn='subnet-[{0}]'.format(gateway),
|
||||
filter_target='eq(fvSubnet.ip, "{0}")'.format(gateway),
|
||||
module_object=gateway,
|
||||
target_filter={'ip': gateway},
|
||||
),
|
||||
child_classes=['fvRsBDSubnetToProfile', 'fvRsNdPfxPol'],
|
||||
)
|
||||
|
|
|
@ -188,20 +188,20 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='fvBD',
|
||||
aci_rn='BD-{0}'.format(bd),
|
||||
filter_target='eq(fvBD.name, "{0}")'.format(bd),
|
||||
module_object=bd,
|
||||
target_filter={'name': bd},
|
||||
),
|
||||
subclass_2=dict(
|
||||
aci_class='fvRsBDToOut',
|
||||
aci_rn='rsBDToOut-{0}'.format(l3out),
|
||||
filter_target='eq(fvRsBDToOut.tnL3extOutName, "{0}")'.format(l3out),
|
||||
module_object=l3out,
|
||||
target_filter={'tnL3extOutName': l3out},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -232,8 +232,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='configImportP',
|
||||
aci_rn='fabric/configimp-{0}'.format(import_policy),
|
||||
filter_target='eq(configImportP.name, "{0}")'.format(import_policy),
|
||||
module_object=import_policy,
|
||||
target_filter={'name': import_policy},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -252,8 +252,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='configExportP',
|
||||
aci_rn='fabric/configexp-{0}'.format(export_policy),
|
||||
filter_target='eq(configExportP.name, "{0}")'.format(export_policy),
|
||||
module_object=export_policy,
|
||||
target_filter={'name': export_policy},
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -286,14 +286,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='configSnapshotCont',
|
||||
aci_rn='backupst/snapshots-[{0}]'.format(export_policy),
|
||||
filter_target='(configSnapshotCont.name, "{0}")'.format(export_policy),
|
||||
module_object=export_policy,
|
||||
target_filter={'name': export_policy},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='configSnapshot',
|
||||
aci_rn='snapshot-{0}'.format(snapshot),
|
||||
filter_target='eq(configSnapshot.name, "{0}")'.format(snapshot),
|
||||
module_object=snapshot,
|
||||
target_filter={'name': snapshot},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -250,14 +250,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='vzBrCP',
|
||||
aci_rn='brc-{0}'.format(contract),
|
||||
filter_target='eq(vzBrCP.name, "{0}")'.format(contract),
|
||||
module_object=contract,
|
||||
target_filter={'name': contract},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -286,20 +286,20 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='vzBrCP',
|
||||
aci_rn='brc-{0}'.format(contract),
|
||||
filter_target='eq(vzBrCP.name, "{0}")'.format(contract),
|
||||
module_object=contract,
|
||||
target_filter={'name': contract},
|
||||
),
|
||||
subclass_2=dict(
|
||||
aci_class='vzSubj',
|
||||
aci_rn='subj-{0}'.format(subject),
|
||||
filter_target='eq(vzSubj.name, "{0}")'.format(subject),
|
||||
module_object=subject,
|
||||
target_filter={'name': subject},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -252,26 +252,26 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='vzBrCP',
|
||||
aci_rn='brc-{0}'.format(contract),
|
||||
filter_target='eq(vzBrCP.name, "{0}")'.format(contract),
|
||||
module_object=contract,
|
||||
target_filter={'name': contract},
|
||||
),
|
||||
subclass_2=dict(
|
||||
aci_class='vzSubj',
|
||||
aci_rn='subj-{0}'.format(subject),
|
||||
filter_target='eq(vzSubj.name, "{0}")'.format(subject),
|
||||
module_object=subject,
|
||||
target_filter={'name': subject},
|
||||
),
|
||||
subclass_3=dict(
|
||||
aci_class='vzRsSubjFiltAtt',
|
||||
aci_rn='rssubjFiltAtt-{0}'.format(filter_name),
|
||||
filter_target='eq(vzRsSubjFiltAtt.tnVzFilterName, "{0}")'.format(filter_name),
|
||||
module_object=filter_name,
|
||||
target_filter={'tnVzFilterName': filter_name},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -334,8 +334,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class=domain_class,
|
||||
aci_rn=domain_rn,
|
||||
filter_target='eq({0}.name, "{1}")'.format(domain_class, domain),
|
||||
module_object=domain_mo,
|
||||
target_filter={'name': domain},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -325,8 +325,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class=domain_class,
|
||||
aci_rn=domain_rn,
|
||||
filter_target='eq({0}.name, "{1}")'.format(domain_class, domain),
|
||||
module_object=domain_mo,
|
||||
target_filter={'name': domain},
|
||||
),
|
||||
child_classes=[child_class],
|
||||
)
|
||||
|
|
|
@ -315,8 +315,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class=domain_class,
|
||||
aci_rn=domain_rn,
|
||||
filter_target='eq({0}.name, "{1}")'.format(domain_class, domain),
|
||||
module_object=domain_mo,
|
||||
target_filter={'name': domain},
|
||||
),
|
||||
child_classes=['infraRsVlanNs'],
|
||||
)
|
||||
|
|
|
@ -259,8 +259,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class=aci_class,
|
||||
aci_rn='{0}{1}'.format(aci_mo, pool_name),
|
||||
filter_target='eq({0}.name, "{1}")'.format(aci_class, pool),
|
||||
module_object=pool,
|
||||
target_filter={'name': pool},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -327,33 +327,15 @@ def main():
|
|||
if not 1 <= encap_id <= 4093:
|
||||
module.fail_json(msg='vsan pools must have "range_start" and "range_end" values between 1 and 4093')
|
||||
|
||||
# Build proper proper filter_target based on range_start, range_end, and range_name
|
||||
if range_end is not None and range_start is not None:
|
||||
# Validate range_start is less than range_end
|
||||
if range_start > range_end:
|
||||
module.fail_json(msg='The "range_start" must be less than or equal to the "range_end"')
|
||||
|
||||
if range_name is None:
|
||||
range_filter_target = 'and(eq({0}.from, "{1}"),eq({0}.to, "{2}"))'.format(aci_range_class, encap_start, encap_end)
|
||||
else:
|
||||
range_filter_target = 'and(eq({0}.from, "{1}"),eq({0}.to, "{2}"),eq({0}.name, "{3}"))'.format(aci_range_class, encap_start, encap_end, range_name)
|
||||
elif range_end is None and range_start is None:
|
||||
if range_name is None:
|
||||
# Reset range managed object to None for aci util to properly handle query
|
||||
aci_range_mo = None
|
||||
range_filter_target = ''
|
||||
else:
|
||||
range_filter_target = 'eq({0}.name, "{1}")'.format(aci_range_class, range_name)
|
||||
elif range_start is not None:
|
||||
if range_name is None:
|
||||
range_filter_target = 'eq({0}.from, "{1}")'.format(aci_range_class, encap_start)
|
||||
else:
|
||||
range_filter_target = 'and(eq({0}.from, "{1}"),eq({0}.name, "{2}"))'.format(aci_range_class, encap_start, range_name)
|
||||
else:
|
||||
if range_name is None:
|
||||
range_filter_target = 'eq({0}.to, "{1}")'.format(aci_range_class, encap_end)
|
||||
else:
|
||||
range_filter_target = 'and(eq({0}.to, "{1}"),eq({0}.name, "{2}"))'.format(aci_range_class, encap_end, range_name)
|
||||
|
||||
# Vxlan does not support setting the allocation mode
|
||||
if pool_type == 'vxlan' and allocation_mode is not None:
|
||||
|
@ -371,14 +353,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class=aci_pool_class,
|
||||
aci_rn='{0}{1}'.format(aci_pool_mo, pool_name),
|
||||
filter_target='eq({0}.name, "{1}")'.format(aci_pool_class, pool),
|
||||
module_object=pool,
|
||||
target_filter={'name': pool},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class=aci_range_class,
|
||||
aci_rn='{0}'.format(aci_range_mo),
|
||||
filter_target=range_filter_target,
|
||||
module_object=aci_range_mo,
|
||||
target_filter={'from': encap_start, 'to': encap_end, 'name': range_name},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -307,20 +307,20 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='fvAp',
|
||||
aci_rn='ap-{0}'.format(ap),
|
||||
filter_target='eq(fvAp.name, "{0}")'.format(ap),
|
||||
module_object=ap,
|
||||
target_filter={'name': ap},
|
||||
),
|
||||
subclass_2=dict(
|
||||
aci_class='fvAEPg',
|
||||
aci_rn='epg-{0}'.format(epg),
|
||||
filter_target='eq(fvAEPg.name, "{0}")'.format(epg),
|
||||
module_object=epg,
|
||||
target_filter={'name': epg},
|
||||
),
|
||||
child_classes=['fvRsBd'],
|
||||
)
|
||||
|
|
|
@ -196,14 +196,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='monEPGPol',
|
||||
aci_rn='monepg-{0}'.format(monitoring_policy),
|
||||
filter_target='eq(monEPGPol.name, "{0}")'.format(monitoring_policy),
|
||||
module_object=monitoring_policy,
|
||||
target_filter={'name': monitoring_policy},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -267,26 +267,26 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='fvAp',
|
||||
aci_rn='ap-{0}'.format(ap),
|
||||
filter_target='eq(fvAp.name, "{0}")'.format(ap),
|
||||
module_object=ap,
|
||||
target_filter={'name': ap},
|
||||
),
|
||||
subclass_2=dict(
|
||||
aci_class='fvAEPg',
|
||||
aci_rn='epg-{0}'.format(epg),
|
||||
filter_target='eq(fvAEPg.name, "{0}")'.format(epg),
|
||||
module_object=epg,
|
||||
target_filter={'name': epg},
|
||||
),
|
||||
subclass_3=dict(
|
||||
aci_class=aci_class,
|
||||
aci_rn='{0}{1}'.format(aci_rn, contract),
|
||||
filter_target='eq({0}.tnVzBrCPName, "{1}'.format(aci_class, contract),
|
||||
module_object=contract,
|
||||
target_filter={'tnVzBrCPName': contract},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -335,26 +335,26 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='fvAp',
|
||||
aci_rn='ap-{0}'.format(ap),
|
||||
filter_target='eq(fvAp.name, "{0}")'.format(ap),
|
||||
module_object=ap,
|
||||
target_filter={'name': ap},
|
||||
),
|
||||
subclass_2=dict(
|
||||
aci_class='fvAEPg',
|
||||
aci_rn='epg-{0}'.format(epg),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(epg),
|
||||
module_object=epg,
|
||||
target_filter={'name': epg},
|
||||
),
|
||||
subclass_3=dict(
|
||||
aci_class='fvRsDomAtt',
|
||||
aci_rn='rsdomAtt-[{0}]'.format(epg_domain),
|
||||
filter_target='eq(fvRsDomAtt.tDn, "{0}")'.format(epg_domain),
|
||||
module_object=epg_domain,
|
||||
target_filter={'tDn': epg_domain},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -232,8 +232,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fabricNodeIdentP',
|
||||
aci_rn='controller/nodeidentpol/nodep-{0}'.format(serial),
|
||||
filter_target='eq(fabricNodeIdentP.serial, "{0}")'.format(serial),
|
||||
module_object=serial,
|
||||
target_filter={'serial': serial},
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
@ -224,14 +224,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='vzFilter',
|
||||
aci_rn='flt-{0}'.format(filter_name),
|
||||
filter_target='eq(vzFilter.name, "{0}")'.format(filter_name),
|
||||
module_object=filter_name,
|
||||
target_filter={'name': filter_name},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -299,20 +299,20 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='vzFilter',
|
||||
aci_rn='flt-{0}'.format(filter_name),
|
||||
filter_target='eq(vzFilter.name, "{0}")'.format(filter_name),
|
||||
module_object=filter_name,
|
||||
target_filter={'name': filter_name},
|
||||
),
|
||||
subclass_2=dict(
|
||||
aci_class='vzEntry',
|
||||
aci_rn='e-{0}'.format(entry),
|
||||
filter_target='eq(vzEntry.name, "{0}")'.format(entry),
|
||||
module_object=entry
|
||||
module_object=entry,
|
||||
target_filter={'name': entry},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -236,8 +236,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='firmwareOSource',
|
||||
aci_rn='fabric/fwrepop',
|
||||
filter_target='eq(firmwareOSource.name, "{0}")'.format(source),
|
||||
module_object=source,
|
||||
target_filter={'name': source},
|
||||
),
|
||||
)
|
||||
aci.get_existing()
|
||||
|
|
|
@ -194,8 +194,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fcIfPol',
|
||||
aci_rn='infra/fcIfPol-{0}'.format(fc_policy),
|
||||
filter_target='eq(fcIfPol.name, "{0}")'.format(fc_policy),
|
||||
module_object=fc_policy,
|
||||
target_filter={'name': fc_policy},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -213,8 +213,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='l2IfPol',
|
||||
aci_rn='infra/l2IfP-{0}'.format(l2_policy),
|
||||
filter_target='eq(l2IfPol.name, "{0}")'.format(l2_policy),
|
||||
module_object=l2_policy,
|
||||
target_filter={'name': l2_policy},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -352,6 +352,8 @@ def main():
|
|||
name=policy_group,
|
||||
descr=description,
|
||||
)
|
||||
# Reset for target_filter
|
||||
lag_type = None
|
||||
elif lag_type in ('link', 'node'):
|
||||
aci_class_name = 'infraAccBndlGrp'
|
||||
dn_name = 'accbundle'
|
||||
|
@ -366,8 +368,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class=aci_class_name,
|
||||
aci_rn='infra/funcprof/{0}-{1}'.format(dn_name, policy_group),
|
||||
filter_target='eq({0}.name, "{1}")'.format(aci_class_name, policy_group),
|
||||
module_object=policy_group,
|
||||
target_filter={'name': policy_group, 'lagT': lag_type},
|
||||
),
|
||||
child_classes=[
|
||||
'infraRsAttEntP',
|
||||
|
|
|
@ -211,8 +211,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='infraAccPortP',
|
||||
aci_rn='infra/accportprof-{0}'.format(leaf_interface_profile),
|
||||
filter_target='eq(infraAccPortP.name, "{0}")'.format(leaf_interface_profile),
|
||||
module_object=leaf_interface_profile
|
||||
module_object=leaf_interface_profile,
|
||||
target_filter={'name': leaf_interface_profile},
|
||||
),
|
||||
)
|
||||
aci.get_existing()
|
||||
|
|
|
@ -203,8 +203,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='lldpIfPol',
|
||||
aci_rn='infra/lldpIfP-{0}'.format(lldp_policy),
|
||||
filter_target='eq(lldpIfPol.name, "{0}")'.format(lldp_policy),
|
||||
module_object=lldp_policy,
|
||||
target_filter={'name': lldp_policy},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -195,8 +195,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='mcpIfPol',
|
||||
aci_rn='infra/mcpIfP-{0}'.format(mcp),
|
||||
filter_target='eq(mcpIfPol.name, "{0}")'.format(mcp),
|
||||
module_object=mcp,
|
||||
target_filter={'name': mcp},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -346,8 +346,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='ospfIfPol',
|
||||
aci_rn='tn-{0}/ospfIfPol-{1}'.format(tenant, ospf),
|
||||
filter_target='eq(ospfIfPol.name, "{0}")'.format(ospf),
|
||||
module_object=ospf,
|
||||
target_filter={'name': ospf},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -273,8 +273,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='lacpLagPol',
|
||||
aci_rn='infra/lacplagp-{0}'.format(port_channel),
|
||||
filter_target='eq(lacpLagPol.name, "{0}")'.format(port_channel),
|
||||
module_object=port_channel,
|
||||
target_filter={'name': port_channel},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -197,8 +197,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='l2PortSecurityPol',
|
||||
aci_rn='infra/portsecurityP-{0}'.format(port_security),
|
||||
filter_target='eq(l2PortSecurityPol.name, "{0}")'.format(port_security),
|
||||
module_object=port_security,
|
||||
target_filter={'name': port_security},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -210,14 +210,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='infraNodeP',
|
||||
aci_rn='infra/nprof-{0}'.format(leaf_profile),
|
||||
filter_target='eq(infraNodeP.name, "{0}")'.format(leaf_profile),
|
||||
module_object=leaf_profile
|
||||
module_object=leaf_profile,
|
||||
target_filter={'name': leaf_profile},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='infraRsAccPortP',
|
||||
aci_rn='rsaccPortP-[{0}]'.format(interface_selector_tDn),
|
||||
filter_target='eq(infraRsAccPortP.name, "{0}")'.format(interface_selector),
|
||||
module_object=interface_selector,
|
||||
target_filter={'name': interface_selector},
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
@ -269,14 +269,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='l3extOut',
|
||||
aci_rn='out-{0}'.format(l3out),
|
||||
filter_target='eq(l3extOut.name, "{0}")'.format(l3out),
|
||||
module_object=l3out,
|
||||
target_filter={'name': l3out},
|
||||
),
|
||||
child_classes=child_classes,
|
||||
)
|
||||
|
|
|
@ -205,14 +205,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='l3extRouteTagPol',
|
||||
aci_rn='rttag-{0}'.format(rtp),
|
||||
filter_target='eq(l3extRouteTagPol.name, "{0}")'.format(rtp),
|
||||
module_object=rtp,
|
||||
target_filter={'name': rtp},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -358,6 +358,11 @@ def main():
|
|||
)
|
||||
|
||||
static_path = INTERFACE_TYPE_MAPPING[interface_type]
|
||||
|
||||
path_target_filter = {}
|
||||
if pod_id is not None and leafs is not None and interface is not None and (interface_type != 'fex' or extpaths is not None):
|
||||
path_target_filter = {'tDn': static_path}
|
||||
|
||||
if interface_mode is not None:
|
||||
interface_mode = INTERFACE_MODE_MAPPING[interface_mode]
|
||||
|
||||
|
@ -366,26 +371,26 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='fvAp',
|
||||
aci_rn='ap-{0}'.format(ap),
|
||||
filter_target='eq(fvAp.name, "{0}")'.format(ap),
|
||||
module_object=ap,
|
||||
target_filter={'name': ap},
|
||||
),
|
||||
subclass_2=dict(
|
||||
aci_class='fvAEPg',
|
||||
aci_rn='epg-{0}'.format(epg),
|
||||
filter_target='eq(fvAEPg.name, "{0}")'.format(epg),
|
||||
module_object=epg,
|
||||
target_filter={'name': epg},
|
||||
),
|
||||
subclass_3=dict(
|
||||
aci_class='fvRsPathAtt',
|
||||
aci_rn='rspathAtt-[{0}]'.format(static_path),
|
||||
filter_target='eq(fvRsPathAtt.tDn, "{0}"'.format(static_path),
|
||||
module_object=static_path,
|
||||
target_filter=path_target_filter,
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -260,15 +260,15 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='infraNodeP',
|
||||
aci_rn='infra/nprof-{0}'.format(leaf_profile),
|
||||
filter_target='eq(infraNodeP.name, "{0}")'.format(leaf_profile),
|
||||
module_object=leaf_profile
|
||||
module_object=leaf_profile,
|
||||
target_filter={'name': leaf_profile},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='infraLeafS',
|
||||
# NOTE: normal rn: leaves-{name}-typ-{type}, hence here hardcoded to range for purposes of module
|
||||
aci_rn='leaves-{0}-typ-range'.format(leaf),
|
||||
filter_target='eq(infraLeafS.name, "{0}")'.format(leaf),
|
||||
module_object=leaf,
|
||||
target_filter={'name': leaf},
|
||||
),
|
||||
# NOTE: infraNodeBlk is not made into a subclass because there is a 1-1 mapping between node block and leaf selector name
|
||||
child_classes=['infraNodeBlk', 'infraRsAccNodePGrp'],
|
||||
|
|
|
@ -203,8 +203,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='infraNodeP',
|
||||
aci_rn='infra/nprof-{0}'.format(leaf_profile),
|
||||
filter_target='eq(infraNodeP.name, "{0}")'.format(leaf_profile),
|
||||
module_object=leaf_profile,
|
||||
target_filter={'name': leaf_profile},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -235,8 +235,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fabricExplicitGEp',
|
||||
aci_rn='fabric/protpol/expgep-{0}'.format(protection_group),
|
||||
filter_target='eq(fabricExplicitGEp.name, "{0}")'.format(protection_group),
|
||||
module_object=protection_group,
|
||||
target_filter={'name': protection_group},
|
||||
),
|
||||
child_classes=['fabricNodePEp', 'fabricNodePEp', 'fabricRsVpcInstPol'],
|
||||
)
|
||||
|
|
|
@ -229,14 +229,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='vzTaboo',
|
||||
aci_rn='taboo-{0}'.format(taboo_contract),
|
||||
filter_target='eq(vzTaboo.name, "{0}")'.format(taboo_contract),
|
||||
module_object=taboo_contract,
|
||||
target_filter={'name': taboo_contract},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -210,8 +210,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
)
|
||||
aci.get_existing()
|
||||
|
|
|
@ -194,14 +194,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='rtctrlAttrP',
|
||||
aci_rn='attr-{0}'.format(action_rule),
|
||||
filter_target='eq(rtctrlAttrP.name, "{0}")'.format(action_rule),
|
||||
module_object=action_rule,
|
||||
target_filter={'name': action_rule},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -294,14 +294,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='fvEpRetPol',
|
||||
aci_rn='epRPol-{0}'.format(epr_policy),
|
||||
filter_target='eq(fvEpRetPol.name, "{0}")'.format(epr_policy),
|
||||
module_object=epr_policy,
|
||||
target_filter={'name': epr_policy},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -196,14 +196,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='spanDestGrp',
|
||||
aci_rn='destgrp-{0}'.format(dst_group),
|
||||
filter_target='eq(spanDestGrp.name, "{0}")'.format(dst_group),
|
||||
module_object=dst_group,
|
||||
target_filter={'name': dst_group},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -208,14 +208,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='spanSrcGrp',
|
||||
aci_rn='srcgrp-{0}'.format(src_group),
|
||||
filter_target='eq(spanSrcGrp.name, "{0}")'.format(src_group),
|
||||
module_object=src_group,
|
||||
target_filter={'name': src_group},
|
||||
),
|
||||
child_classes=['spanSpanLbl'],
|
||||
)
|
||||
|
|
|
@ -198,20 +198,20 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='spanSrcGrp',
|
||||
aci_rn='srcgrp-{0}'.format(src_group),
|
||||
filter_target='eq(spanSrcGrp.name, "{0}")'.format(src_group),
|
||||
module_object=src_group,
|
||||
target_filter={'name': src_group},
|
||||
),
|
||||
subclass_2=dict(
|
||||
aci_class='spanSpanLbl',
|
||||
aci_rn='spanlbl-{0}'.format(dst_group),
|
||||
filter_target='eq(spanSpanLbl.name, "{0}")'.format(dst_group),
|
||||
module_object=dst_group,
|
||||
target_filter={'name': dst_group},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -231,8 +231,8 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvnsVlanInstP',
|
||||
aci_rn='infra/vlanns-{0}'.format(pool_name),
|
||||
filter_target='eq(fvnsVlanInstP.name, "{0}")'.format(pool),
|
||||
module_object=pool,
|
||||
target_filter={'name': pool},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -275,33 +275,15 @@ def main():
|
|||
if not 1 <= encap_id <= 4094:
|
||||
module.fail_json(msg="vlan pools must have 'block_start' and 'block_end' values between 1 and 4094")
|
||||
|
||||
# Build proper proper filter_target based on block_start, block_end, and block_name
|
||||
if block_end is not None and block_start is not None:
|
||||
# Validate block_start is less than block_end
|
||||
if block_start > block_end:
|
||||
module.fail_json(msg="The 'block_start' must be less than or equal to the 'block_end'")
|
||||
|
||||
if block_name is None:
|
||||
block_filter_target = 'and(eq({0}.from, "{1}"),eq({0}.to, "{2}"))'.format('fvnsEncapBlk', encap_start, encap_end)
|
||||
else:
|
||||
block_filter_target = 'and(eq({0}.from, "{1}"),eq({0}.to, "{2}"),eq({0}.name, "{3}"))'.format('fvnsEncapBlk', encap_start, encap_end, block_name)
|
||||
elif block_end is None and block_start is None:
|
||||
if block_name is None:
|
||||
# Reset range managed object to None for aci util to properly handle query
|
||||
aci_block_mo = None
|
||||
block_filter_target = ''
|
||||
else:
|
||||
block_filter_target = 'eq({0}.name, "{1}")'.format('fvnsEncapBlk', block_name)
|
||||
elif block_start is not None:
|
||||
if block_name is None:
|
||||
block_filter_target = 'eq({0}.from, "{1}")'.format('fvnsEncapBlk', encap_start)
|
||||
else:
|
||||
block_filter_target = 'and(eq({0}.from, "{1}"),eq({0}.name, "{2}"))'.format('fvnsEncapBlk', encap_start, block_name)
|
||||
else:
|
||||
if block_name is None:
|
||||
block_filter_target = 'eq({0}.to, "{1}")'.format('fvnsEncapBlk', encap_end)
|
||||
else:
|
||||
block_filter_target = 'and(eq({0}.to, "{1}"),eq({0}.name, "{2}"))'.format('fvnsEncapBlk', encap_end, block_name)
|
||||
|
||||
# ACI Pool URL requires the allocation mode (ex: uni/infra/vlanns-[poolname]-static)
|
||||
if pool is not None:
|
||||
|
@ -315,14 +297,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvnsVlanInstP',
|
||||
aci_rn='infra/vlanns-{0}'.format(pool_name),
|
||||
filter_target='eq(fvnsVlanInstP.name, "{0}")'.format(pool),
|
||||
module_object=pool,
|
||||
target_filter={'name': pool},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='fvnsEncapBlk',
|
||||
aci_rn=aci_block_mo,
|
||||
filter_target=block_filter_target,
|
||||
module_object=aci_block_mo,
|
||||
target_filter={'from': encap_start, 'to': encap_end, 'name': block_name},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -235,14 +235,14 @@ def main():
|
|||
root_class=dict(
|
||||
aci_class='fvTenant',
|
||||
aci_rn='tn-{0}'.format(tenant),
|
||||
filter_target='eq(fvTenant.name, "{0}")'.format(tenant),
|
||||
module_object=tenant,
|
||||
target_filter={'name': tenant},
|
||||
),
|
||||
subclass_1=dict(
|
||||
aci_class='fvCtx',
|
||||
aci_rn='ctx-{0}'.format(vrf),
|
||||
filter_target='eq(fvCtx.name, "{0}")'.format(vrf),
|
||||
module_object=vrf,
|
||||
target_filter={'name': vrf},
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
@ -64,8 +64,10 @@
|
|||
- name: Verify add user
|
||||
assert:
|
||||
that:
|
||||
- cm_add_user.changed == nm_add_user.changed == true
|
||||
- cm_add_user_again.changed == nm_add_user_again.changed == false
|
||||
- cm_add_user is changed
|
||||
- nm_add_user is changed
|
||||
- cm_add_user_again is not changed
|
||||
- nm_add_user_again is not changed
|
||||
|
||||
|
||||
# MODIFY USER
|
||||
|
@ -103,8 +105,10 @@
|
|||
- name: Verify modify user
|
||||
assert:
|
||||
that:
|
||||
- cm_modify_user.changed == nm_modify_user.changed == true
|
||||
- cm_modify_user_again.changed == nm_modify_user_again.changed == false
|
||||
- cm_modify_user is changed
|
||||
- nm_modify_user is changed
|
||||
- cm_modify_user_again is not changed
|
||||
- nm_modify_user_again is not changed
|
||||
|
||||
|
||||
# QUERY ALL USERS
|
||||
|
@ -129,7 +133,8 @@
|
|||
- name: Verify query_all_users
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_users.changed == nm_query_all_users.changed == false
|
||||
- cm_query_all_users is not changed
|
||||
- nm_query_all_users is not changed
|
||||
# NOTE: Order of users is not stable between calls
|
||||
#- cm_query_all_users == nm_query_all_users
|
||||
|
||||
|
@ -149,7 +154,8 @@
|
|||
- name: Verify query_user
|
||||
assert:
|
||||
that:
|
||||
- cm_query_user.changed == nm_query_user.changed == false
|
||||
- cm_query_user is not changed
|
||||
- nm_query_user is not changed
|
||||
- cm_query_user == nm_query_user
|
||||
|
||||
|
||||
|
@ -175,5 +181,7 @@
|
|||
- name: Verify remove_user
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_user.changed == nm_remove_user.changed == true
|
||||
- cm_remove_user_again.changed == nm_remove_user_again.changed == false
|
||||
- cm_remove_user is changed
|
||||
- nm_remove_user is changed
|
||||
- cm_remove_user_again is not changed
|
||||
- nm_remove_user_again is not changed
|
||||
|
|
|
@ -57,8 +57,10 @@
|
|||
- name: Verify add_cert
|
||||
assert:
|
||||
that:
|
||||
- cm_add_cert.changed == nm_add_cert.changed == true
|
||||
- cm_add_cert_again.changed == nm_add_cert_again.changed == false
|
||||
- cm_add_cert is changed
|
||||
- nm_add_cert is change
|
||||
- cm_add_cert_again is not changed
|
||||
- nm_add_cert_again is not changed
|
||||
|
||||
|
||||
# QUERY ALL USER CERTIFICATES
|
||||
|
@ -84,7 +86,8 @@
|
|||
- name: Verify query_all_certs
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_certs.changed == nm_query_all_certs.changed == false
|
||||
- cm_query_all_certs is not changed
|
||||
- nm_query_all_certs is not changed
|
||||
# NOTE: Order of certs is not stable between calls
|
||||
#- cm_query_all_certs == nm_query_all_certs
|
||||
|
||||
|
@ -106,7 +109,8 @@
|
|||
- name: Verify query_cert
|
||||
assert:
|
||||
that:
|
||||
- cm_query_cert.changed == nm_query_cert.changed == false
|
||||
- cm_query_cert is not changed
|
||||
- nm_query_cert is not changed
|
||||
- cm_query_cert == nm_query_cert
|
||||
|
||||
|
||||
|
@ -132,5 +136,7 @@
|
|||
- name: Verify remove_cert
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_cert.changed == nm_remove_cert.changed == true
|
||||
- cm_remove_cert_again.changed == nm_remove_cert_again.changed == false
|
||||
- cm_remove_cert is changed
|
||||
- nm_remove_cert is changed
|
||||
- cm_remove_cert_again is not changed
|
||||
- nm_remove_cert_again is not changed
|
||||
|
|
|
@ -53,13 +53,13 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- accessport_to_intf_check_mode_present.changed == true
|
||||
- accessport_to_intf_present.changed == true
|
||||
- accessport_to_intf_check_mode_present is changed
|
||||
- accessport_to_intf_present is changed
|
||||
- accessport_to_intf_present.previous == []
|
||||
- 'accessport_to_intf_present.sent == {"infraHPortS": {"attributes": {"name": "anstest_accessportselector"}, "children": [{"infraPortBlk": {"attributes": {"fromPort": "13", "name": "anstest_leafportblkname", "toPort": "16"}}}, {"infraRsAccBaseGrp": {"attributes": {"tDn": "uni/infra/funcprof/accportgrp-None"}}}]}}'
|
||||
- accessport_to_intf_idempotent.changed == false
|
||||
- accessport_to_intf_idempotent is not changed
|
||||
- accessport_to_intf_idempotent.sent == {}
|
||||
- accessport_to_intf_update.changed == true
|
||||
- accessport_to_intf_update is changed
|
||||
- 'accessport_to_intf_update.sent == {"infraHPortS": {"attributes": {},"children": [{"infraRsAccBaseGrp": {"attributes": {"tDn": "uni/infra/funcprof/accportgrp-anstest_policygroupname"}}}]}}'
|
||||
|
||||
- name: Query Specific access_port_selector and leaf_interface_profile binding
|
||||
|
@ -72,7 +72,7 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- binding_query.changed == false
|
||||
- binding_query is not changed
|
||||
- binding_query.current | length >= 1
|
||||
- '"api/mo/uni/infra/accportprof-leafintprftest/hports-anstest_accessportselector-typ-range.json" in binding_query.url'
|
||||
|
||||
|
@ -105,13 +105,13 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- accessport_to_intf_check_mode_absent.changed == true
|
||||
- accessport_to_intf_check_mode_absent is changed
|
||||
- accessport_to_intf_check_mode_absent.previous != []
|
||||
- accessport_to_intf_absent.changed == true
|
||||
- accessport_to_intf_absent is changed
|
||||
- accessport_to_intf_absent.previous == accessport_to_intf_check_mode_absent.previous
|
||||
- accessport_to_intf_absent_idempotent.changed == false
|
||||
- accessport_to_intf_absent_idempotent is not changed
|
||||
- accessport_to_intf_absent_idempotent.previous == []
|
||||
- accessport_to_intf_absent_missing_param.failed == true
|
||||
- accessport_to_intf_absent_missing_param is failed
|
||||
- 'accessport_to_intf_absent_missing_param.msg == "state is absent but all of the following are missing: access_port_selector"'
|
||||
|
||||
|
||||
|
|
|
@ -45,7 +45,8 @@
|
|||
- name: Verify add_aep
|
||||
assert:
|
||||
that:
|
||||
- cm_add_aep.changed == nm_add_aep.changed == true
|
||||
- cm_add_aep is changed
|
||||
- nm_add_aep is changed
|
||||
- nm_add_aep.previous == nm_add_aep.previous == cm_add_aep.current == []
|
||||
- 'nm_add_aep.current == [{"infraAttEntityP": {"attributes": {"descr": "", "dn": "uni/infra/attentp-ansible_test", "name": "ansible_test", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
- 'cm_add_aep.proposed == nm_add_aep.proposed == cm_add_aep.sent == nm_add_aep.sent == {"infraAttEntityP": {"attributes": {"name": "ansible_test"}}}'
|
||||
|
@ -62,7 +63,8 @@
|
|||
- name: Verify add_aep_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_aep_again.changed == nm_add_aep_again.changed == false
|
||||
- cm_add_aep_again is not changed
|
||||
- nm_add_aep_again is not changed
|
||||
- 'nm_add_aep_again.previous == nm_add_aep_again.previous == cm_add_aep_again.current == nm_add_aep_again.current == [{"infraAttEntityP": {"attributes": {"descr": "", "dn": "uni/infra/attentp-ansible_test", "name": "ansible_test", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
- 'cm_add_aep_again.proposed == nm_add_aep_again.proposed == {"infraAttEntityP": {"attributes": {"name": "ansible_test"}}}'
|
||||
- cm_add_aep_again.sent == nm_add_aep_again.sent == {}
|
||||
|
@ -85,7 +87,8 @@
|
|||
- name: Verify add_aep_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_aep_descr.changed == nm_add_aep_descr.changed == true
|
||||
- cm_add_aep_descr is changed
|
||||
- nm_add_aep_descr is changed
|
||||
- 'cm_add_aep_descr.proposed == nm_add_aep_descr.proposed == {"infraAttEntityP": {"attributes": {"descr": "Ansible test AEP", "name": "ansible_test"}}}'
|
||||
- 'cm_add_aep_descr.sent == nm_add_aep_descr.sent == {"infraAttEntityP": {"attributes": {"descr": "Ansible test AEP"}}}'
|
||||
- 'cm_add_aep_descr.previous == nm_add_aep_descr.previous == cm_add_aep_descr.current == [{"infraAttEntityP": {"attributes": {"descr": "", "dn": "uni/infra/attentp-ansible_test", "name": "ansible_test", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
|
@ -107,7 +110,8 @@
|
|||
- name: Verify add_aep_descr_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_aep_descr_again.changed == nm_add_aep_descr_again.changed == false
|
||||
- cm_add_aep_descr_again is not changed
|
||||
- nm_add_aep_descr_again is not changed
|
||||
- 'cm_add_aep_descr_again.proposed == nm_add_aep_descr_again.proposed == {"infraAttEntityP": {"attributes": {"descr": "Ansible test AEP", "name": "ansible_test"}}}'
|
||||
- 'cm_add_aep_descr_again.sent == nm_add_aep_descr_again.sent == {}'
|
||||
- 'cm_add_aep_descr_again.previous == nm_add_aep_descr_again.previous == cm_add_aep_descr_again.current == nm_add_aep_descr_again.current == [{"infraAttEntityP": {"attributes": {"descr": "Ansible test AEP", "dn": "uni/infra/attentp-ansible_test", "name": "ansible_test", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
|
@ -126,7 +130,8 @@
|
|||
- name: Verify add_aep_again_no_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_aep_again_no_descr.changed == nm_add_aep_again_no_descr.changed == false
|
||||
- cm_add_aep_again_no_descr is not changed
|
||||
- nm_add_aep_again_no_descr is not changed
|
||||
- 'cm_add_aep_again_no_descr.proposed == nm_add_aep_again_no_descr.proposed == {"infraAttEntityP": {"attributes": {"name": "ansible_test"}}}'
|
||||
- cm_add_aep_again_no_descr.sent == nm_add_aep_again_no_descr.sent == {}
|
||||
- 'cm_add_aep_again_no_descr.previous == nm_add_aep_again_no_descr.previous == cm_add_aep_again_no_descr.current == nm_add_aep_again_no_descr.current == [{"infraAttEntityP": {"attributes": {"descr": "Ansible test AEP", "dn": "uni/infra/attentp-ansible_test", "name": "ansible_test", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
|
@ -153,7 +158,8 @@
|
|||
- name: Verify query_all_aeps
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_aeps.changed == nm_query_all_aeps.changed == false
|
||||
- cm_query_all_aeps is not changed
|
||||
- nm_query_all_aeps is not changed
|
||||
- cm_query_all_aeps == nm_query_all_aeps
|
||||
- nm_query_all_aeps.current|length >= 1
|
||||
|
||||
|
@ -175,7 +181,8 @@
|
|||
- name: Verify query_aep
|
||||
assert:
|
||||
that:
|
||||
- cm_query_aep.changed == nm_query_aep.changed == false
|
||||
- cm_query_aep is not changed
|
||||
- nm_query_aep is not changed
|
||||
- cm_query_aep == nm_query_aep
|
||||
- nm_query_aep.current.0.infraAttEntityP.attributes.descr == "Ansible test AEP"
|
||||
- nm_query_aep.current.0.infraAttEntityP.attributes.dn == "uni/infra/attentp-ansible_test"
|
||||
|
@ -195,7 +202,8 @@
|
|||
- name: Verify remove_aep
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_aep.changed == nm_remove_aep.changed == true
|
||||
- cm_remove_aep is changed
|
||||
- nm_remove_aep is changed
|
||||
- cm_remove_aep.proposed == nm_remove_aep.proposed == {}
|
||||
- cm_remove_aep.sent == nm_remove_aep.sent == {}
|
||||
- 'cm_remove_aep.previous == nm_remove_aep.previous == cm_remove_aep.current == [{"infraAttEntityP": {"attributes": {"descr": "Ansible test AEP", "dn": "uni/infra/attentp-ansible_test", "name": "ansible_test", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
|
@ -213,7 +221,8 @@
|
|||
- name: Verify remove_aep_again
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_aep_again.changed == nm_remove_aep_again.changed == false
|
||||
- cm_remove_aep_again is not changed
|
||||
- nm_remove_aep_again is not changed
|
||||
- cm_remove_aep_again.proposed == nm_remove_aep_again.proposed == {}
|
||||
- cm_remove_aep_again.sent == nm_remove_aep_again.sent == {}
|
||||
- cm_remove_aep_again.previous == nm_remove_aep_again.previous == cm_remove_aep_again.current == nm_remove_aep_again.current == []
|
||||
|
@ -236,7 +245,8 @@
|
|||
- name: Verify query_non_aep
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_aep.changed == nm_query_non_aep.changed == false
|
||||
- cm_query_non_aep is not changed
|
||||
- nm_query_non_aep is not changed
|
||||
- cm_query_non_aep == nm_query_non_aep
|
||||
- cm_query_non_aep.current == nm_query_non_aep.current == []
|
||||
|
||||
|
@ -258,5 +268,5 @@
|
|||
- name: Verify error_on_missing_required_param
|
||||
assert:
|
||||
that:
|
||||
- error_on_missing_required_param.failed == true
|
||||
- error_on_missing_required_param is failed
|
||||
- 'error_on_missing_required_param.msg == "state is present but all of the following are missing: aep"'
|
||||
|
|
|
@ -70,7 +70,8 @@
|
|||
- name: Verify add_binding
|
||||
assert:
|
||||
that:
|
||||
- cm_add_binding.changed == nm_add_binding.changed == true
|
||||
- cm_add_binding is changed
|
||||
- nm_add_binding is changed
|
||||
- 'cm_add_binding.sent == nm_add_binding.sent == {"infraRsDomP": {"attributes": {"tDn": "uni/phys-phys_dom"}}}'
|
||||
- 'cm_add_binding.proposed == nm_add_binding.proposed == {"infraRsDomP": {"attributes": {"tDn": "uni/phys-phys_dom"}}}'
|
||||
- cm_add_binding.current == cm_add_binding.previous == nm_add_binding.previous == []
|
||||
|
@ -88,7 +89,8 @@
|
|||
- name: Verify add_binding_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_binding_again.changed == nm_add_binding_again.changed == false
|
||||
- cm_add_binding_again is not changed
|
||||
- nm_add_binding_again is not changed
|
||||
|
||||
|
||||
# QUERY ALL BINDINGS
|
||||
|
@ -112,7 +114,8 @@
|
|||
- name: Verify query_all_bindings
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_bindings.changed == nm_query_all_bindings.changed == false
|
||||
- cm_query_all_bindings is not changed
|
||||
- nm_query_all_bindings is not changed
|
||||
- cm_query_all_bindings == nm_query_all_bindings
|
||||
- nm_query_all_bindings.current|length >= 1
|
||||
|
||||
|
@ -138,7 +141,8 @@
|
|||
- name: Verify query_binding
|
||||
assert:
|
||||
that:
|
||||
- cm_query_binding.changed == nm_query_binding.changed == false
|
||||
- cm_query_binding is not changed
|
||||
- nm_query_binding is not changed
|
||||
- cm_query_binding == nm_query_binding
|
||||
- nm_query_binding.current.0.infraRsDomP.attributes.dn == 'uni/infra/attentp-test_aep/rsdomP-[uni/phys-phys_dom]'
|
||||
- nm_query_binding.current.0.infraRsDomP.attributes.tCl == 'physDomP'
|
||||
|
@ -158,7 +162,8 @@
|
|||
- name: Verify remove_binding
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_binding.changed == nm_remove_binding.changed == true
|
||||
- cm_remove_binding is changed
|
||||
- nm_remove_binding is changed
|
||||
- 'cm_remove_binding.current == cm_remove_binding.previous == nm_remove_binding.previous == [{"infraRsDomP": {"attributes": {"dn": "uni/infra/attentp-test_aep/rsdomP-[uni/phys-phys_dom]", "tDn": "uni/phys-phys_dom"}}}]'
|
||||
- nm_remove_binding.current == []
|
||||
|
||||
|
@ -174,7 +179,8 @@
|
|||
- name: Verify remove_binding_again
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_binding_again.changed == nm_remove_binding_again.changed == false
|
||||
- cm_remove_binding_again is not changed
|
||||
- nm_remove_binding_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING BINDING
|
||||
|
@ -198,6 +204,7 @@
|
|||
- name: Verify query_non_binding
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_binding.changed == nm_query_non_binding.changed == false
|
||||
- cm_query_non_binding is not changed
|
||||
- nm_query_non_binding is not changed
|
||||
- cm_query_non_binding == nm_query_non_binding
|
||||
- nm_query_non_binding.current == []
|
||||
|
|
|
@ -65,17 +65,17 @@
|
|||
- name: present asserts
|
||||
assert:
|
||||
that:
|
||||
- ap_present_check_mode.changed == true
|
||||
- ap_present.changed == true
|
||||
- ap_present_check_mode is changed
|
||||
- ap_present is changed
|
||||
- ap_present.previous == []
|
||||
- ap_present.sent == ap_present_check_mode.sent
|
||||
- 'ap_present.sent == {"fvAp": {"attributes": {"descr": "Ansible Test", "name": "anstest"}}}'
|
||||
- ap_present_idempotent.changed == false
|
||||
- ap_present_idempotent is not changed
|
||||
- ap_present_idempotent.previous != []
|
||||
- ap_present_idempotent.sent == {}
|
||||
- ap_present_update.changed == true
|
||||
- ap_present_update is changed
|
||||
- 'ap_present_update.sent.fvAp.attributes == {"descr": "Ansible Test Update"}'
|
||||
- ap_present_missing_param.failed == true
|
||||
- ap_present_missing_param is failed
|
||||
- 'ap_present_missing_param.msg == "state is present but all of the following are missing: ap"'
|
||||
|
||||
- name: get ap - query specific ap
|
||||
|
@ -106,21 +106,21 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- query_ap.changed == false
|
||||
- query_ap is not changed
|
||||
- query_ap.current | length == 1
|
||||
- 'query_ap.current.0.fvAp.attributes.name == "anstest"'
|
||||
- query_ap.current.0.fvAp.attributes.name == "anstest"
|
||||
- '"tn-anstest/ap-anstest.json" in query_ap.url'
|
||||
- query_ap_tenant.changed == false
|
||||
- query_ap_tenant is not changed
|
||||
- query_ap_tenant.current | length == 1
|
||||
- query_ap_tenant.current.0.fvTenant.children | length == 2
|
||||
- '"rsp-subtree-class=fvAp" in query_ap_tenant.filter_string'
|
||||
- '"tn-anstest.json" in query_ap_tenant.url'
|
||||
- query_ap_ap.changed == false
|
||||
- query_ap_ap is not changed
|
||||
- query_ap_ap.current != []
|
||||
- query_ap_ap.current.0.fvAp is defined
|
||||
- '"query-target-filter=eq(fvAp.name, \"anstest\")" in query_ap_ap.filter_string'
|
||||
- '"class/fvAp.json" in query_ap_ap.url'
|
||||
- query_all.changed == false
|
||||
- query_all is not changed
|
||||
- query_all.current | length > 1
|
||||
- '"class/fvAp.json" in query_all.url'
|
||||
|
||||
|
@ -156,18 +156,18 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- ap_delete_check_mode.changed == true
|
||||
- ap_delete_check_mode is changed
|
||||
- ap_delete_check_mode.previous != []
|
||||
- '"tn-anstest/ap-anstest.json" in ap_delete_check_mode.url'
|
||||
- ap_delete.changed == true
|
||||
- ap_delete is changed
|
||||
- ap_delete.previous == ap_delete_check_mode.previous
|
||||
- ap_delete_idempotent.changed == false
|
||||
- ap_delete_idempotent is not changed
|
||||
- ap_delete_idempotent.previous == []
|
||||
- ap_delete_missing_param.failed == true
|
||||
- ap_delete_missing_param is failed
|
||||
- 'ap_delete_missing_param.msg == "state is absent but all of the following are missing: tenant"'
|
||||
|
||||
- name: delete tenant - cleanup before ending tests
|
||||
aci_tenant:
|
||||
<<: *aci_tenant_present
|
||||
state: absent
|
||||
when: tenant_present.changed == true
|
||||
when: tenant_present is changed
|
||||
|
|
|
@ -27,6 +27,18 @@
|
|||
vrf: anstest
|
||||
register: vrf_present
|
||||
|
||||
- name: ensure bd anstest does not exist
|
||||
aci_bd:
|
||||
<<: *aci_tenant_present
|
||||
bd: anstest
|
||||
state: absent
|
||||
|
||||
- name: ensure bd anstest2 does not exist
|
||||
aci_bd:
|
||||
<<: *aci_tenant_present
|
||||
bd: anstest2
|
||||
state: absent
|
||||
|
||||
- name: create bd - check mode works
|
||||
aci_bd: &aci_bd_present
|
||||
<<: *aci_tenant_present
|
||||
|
@ -74,20 +86,20 @@
|
|||
- name: present asserts
|
||||
assert:
|
||||
that:
|
||||
- bd_present_check_mode.changed == true
|
||||
- bd_present_check_mode is changed
|
||||
- 'bd_present_check_mode.sent == {"fvBD": {"attributes": {"descr": "Ansible Test", "name": "anstest"}}}'
|
||||
- bd_present.changed == true
|
||||
- bd_present is changed
|
||||
- bd_present.sent == bd_present_check_mode.sent
|
||||
- bd_present.previous == []
|
||||
- bd_present_idempotent.changed == false
|
||||
- bd_present_idempotent is not changed
|
||||
- bd_present_idempotent.previous != []
|
||||
- bd_update.changed == true
|
||||
- bd_update is changed
|
||||
- bd_update.previous != []
|
||||
- bd_update.changed != bd_update.proposed
|
||||
- bd_update.sent != bd_update.proposed
|
||||
- 'bd_update.sent == {"fvBD": {"attributes": {"descr": "Ansible Test Update"}, "children": [{"fvRsCtx": {"attributes": {"tnFvCtxName": "anstest"}}}]}}'
|
||||
- 'bd_present_2.sent.fvBD.attributes == {"arpFlood": "yes", "descr": "Ansible Test", "ipLearning": "no", "multiDstPktAct": "drop", "name": "anstest2",
|
||||
"unicastRoute": "no", "unkMacUcastAct": "flood", "unkMcastAct": "opt-flood"}'
|
||||
- bd_present_missing_param.failed == true
|
||||
- bd_present_missing_param is failed
|
||||
- 'bd_present_missing_param.msg == "state is present but all of the following are missing: tenant"'
|
||||
|
||||
- name: get all bd
|
||||
|
@ -118,25 +130,25 @@
|
|||
- name: query asserts
|
||||
assert:
|
||||
that:
|
||||
- query_all.changed == false
|
||||
- query_all is not changed
|
||||
- query_all.current | length > 1
|
||||
- query_all.current.0.fvBD is defined
|
||||
- '"rsp-subtree-class=fvRsCtx,fvRsIgmpsn,fvRsBDToNdP,fvRsBdToEpRet" in query_all.filter_string'
|
||||
- '"rsp-subtree-class=fvRsBdToEpRet,fvRsCtx,fvRsIgmpsn,fvRsBDToNdP" in query_all.filter_string'
|
||||
- '"class/fvBD.json" in query_all.url'
|
||||
- query_tenant.changed == false
|
||||
- query_tenant is not changed
|
||||
- query_tenant.current | length == 1
|
||||
- query_tenant.current.0.fvTenant.children | length == 2
|
||||
- '"rsp-subtree-class=fvRsCtx,fvRsIgmpsn,fvRsBDToNdP,fvRsBdToEpRet,fvBD" in query_tenant.filter_string'
|
||||
- '"rsp-subtree-class=fvRsBdToEpRet,fvBD,fvRsCtx,fvRsIgmpsn,fvRsBDToNdP" in query_tenant.filter_string'
|
||||
- '"tn-anstest.json" in query_tenant.url'
|
||||
- query_bd_bd.changed == false
|
||||
- query_bd_bd is not changed
|
||||
- query_bd_bd.current != []
|
||||
- '"query-target-filter=eq(fvBD.name, \"anstest\")" in query_bd_bd.filter_string'
|
||||
- '"rsp-subtree=full&rsp-subtree-class=fvRsCtx,fvRsIgmpsn,fvRsBDToNdP,fvRsBdToEpRet" in query_bd_bd.filter_string'
|
||||
- '"rsp-subtree-class=fvRsBdToEpRet,fvRsCtx,fvRsIgmpsn,fvRsBDToNdP" in query_bd_bd.filter_string'
|
||||
- '"class/fvBD.json" in query_bd_bd.url'
|
||||
- query_bd.changed == false
|
||||
- query_bd is not changed
|
||||
- query_bd.current | length == 1
|
||||
- 'query_bd.current.0.fvBD.attributes.name == "anstest"'
|
||||
- '"rsp-subtree-class=fvRsCtx,fvRsIgmpsn,fvRsBDToNdP,fvRsBdToEpRet" in query_bd.filter_string'
|
||||
- query_bd.current.0.fvBD.attributes.name == "anstest"
|
||||
- '"rsp-subtree-class=fvRsBdToEpRet,fvRsCtx,fvRsIgmpsn,fvRsBDToNdP" in query_bd.filter_string'
|
||||
- '"tn-anstest/BD-anstest.json" in query_bd.url'
|
||||
|
||||
- name: delete bd - check mode works
|
||||
|
@ -171,23 +183,23 @@
|
|||
- name: asserts for deletion task
|
||||
assert:
|
||||
that:
|
||||
- bd_absent_check_mode.changed == true
|
||||
- bd_absent_check_mode is changed
|
||||
- bd_absent_check_mode.proposed == {}
|
||||
- bd_absent.changed == true
|
||||
- bd_absent is changed
|
||||
- bd_absent.previous != []
|
||||
- bd_absent_idempotent.changed == false
|
||||
- bd_absent_idempotent is not changed
|
||||
- bd_absent_idempotent.previous == []
|
||||
- bd_absent_missing_param.failed == true
|
||||
- bd_absent_missing_param is failed
|
||||
- 'bd_absent_missing_param.msg == "state is absent but all of the following are missing: bd"'
|
||||
|
||||
- name: delete vrf - cleanup before ending tests
|
||||
aci_vrf:
|
||||
<<: *aci_vrf_present
|
||||
state: absent
|
||||
when: vrf_present.changed == true
|
||||
when: vrf_present is changed
|
||||
|
||||
- name: delete tenant - cleanup before ending tests
|
||||
aci_tenant:
|
||||
<<: *aci_tenant_present
|
||||
state: absent
|
||||
when: tenant_present.changed == true
|
||||
when: tenant_present is changed
|
||||
|
|
|
@ -93,24 +93,24 @@
|
|||
- name: asserts for subnet creation tasks
|
||||
assert:
|
||||
that:
|
||||
- create_check_mode.changed == true
|
||||
- create_check_mode is changed
|
||||
- 'create_check_mode.sent == {"fvSubnet": {"attributes": {"descr": "Ansible Test", "ip": "10.100.100.1/24", "name": "anstest"}}}'
|
||||
- create_subnet.changed == true
|
||||
- create_subnet is changed
|
||||
- 'create_subnet.sent == {"fvSubnet": {"attributes": {"descr": "Ansible Test", "ip": "10.100.100.1/24", "name": "anstest"}}}'
|
||||
- 'create_subnet.previous == []'
|
||||
- create_subnet2.changed == true
|
||||
- create_subnet.previous == []
|
||||
- create_subnet2 is changed
|
||||
- create_subnet2.sent == create_subnet2.proposed
|
||||
- 'create_subnet2.sent.fvSubnet.attributes.scope == "private,shared"'
|
||||
- create_subnet2.sent.fvSubnet.attributes.scope == "private,shared"
|
||||
- 'create_subnet2.sent.fvSubnet.children.0.fvRsBDSubnetToProfile.attributes == {"tnL3extOutName": "default", "tnRtctrlProfileName": "default"}'
|
||||
- create_idempotency.changed == false
|
||||
- create_idempotency is not changed
|
||||
- create_idempotency.previous != []
|
||||
- modify_subnet.changed == true
|
||||
- modify_subnet is changed
|
||||
- modify_subnet.previous != []
|
||||
- modify_subnet.changed != modify_subnet.proposed
|
||||
- modify_subnet.sent != modify_subnet.proposed
|
||||
- 'modify_subnet.sent == {"fvSubnet": {"attributes": {"ctrl": "querier", "scope": "public,shared"}}}'
|
||||
- create_bad_scope.failed == true
|
||||
- create_bad_scope is failed
|
||||
- create_bad_scope.msg.startswith("Parameter 'scope' cannot be both 'private' and 'public'")
|
||||
- create_incomplete_data.failed == true
|
||||
- create_incomplete_data is failed
|
||||
- 'create_incomplete_data.msg == "state is present but all of the following are missing: bd"'
|
||||
|
||||
- name: get all subnets
|
||||
|
@ -169,26 +169,27 @@
|
|||
- name: asserts for query tasks
|
||||
assert:
|
||||
that:
|
||||
- get_all.changed == false
|
||||
- get_all is not changed
|
||||
- get_all.current | length > 1
|
||||
- get_all_tenant.changed == false
|
||||
- get_all_tenant is not changed
|
||||
- '"tn-anstest.json" in get_all_tenant.url'
|
||||
- get_all_bd.changed == false
|
||||
- get_all_bd is not changed
|
||||
- '"query-target-filter=eq(fvBD.name, \"anstest\")" in get_all_bd.filter_string'
|
||||
- '"class/fvBD.json" in get_all_bd.url'
|
||||
- get_all_tenant_bd.changed == false
|
||||
- get_all_tenant_bd is not changed
|
||||
- '"tn-anstest/BD-anstest.json" in get_all_tenant_bd.url'
|
||||
- get_all_tenant_bd.current.0.fvBD.children | length > 1
|
||||
- get_subnet_tenant.changed == false
|
||||
- get_subnet_tenant is not changed
|
||||
- '"rsp-subtree-filter=eq(fvSubnet.ip, \"10.100.100.1/24\")" in get_subnet_tenant.filter_string'
|
||||
- '"tn-anstest.json" in get_subnet_tenant.url'
|
||||
- get_subnet_bd.changed == false
|
||||
- '"query-target-filter=eq(fvBD.name, \"anstest\")" and "rsp-subtree-filter=eq(fvSubnet.ip, \"10.100.100.1/24\")" in get_subnet_bd.filter_string'
|
||||
- get_subnet_bd is not changed
|
||||
- '"query-target-filter=eq(fvBD.name, \"anstest\")"'
|
||||
- '"rsp-subtree-filter=eq(fvSubnet.ip, \"10.100.100.1/24\")" in get_subnet_bd.filter_string'
|
||||
- '"class/fvBD.json" in get_subnet_bd.url'
|
||||
- get_subnet.changed == false
|
||||
- get_subnet is not changed
|
||||
- get_subnet.current | length == 1
|
||||
- '"tn-anstest/BD-anstest/subnet-[10.100.100.1/24].json" in get_subnet.url'
|
||||
- get_subnets_gateway.changed == false
|
||||
- get_subnets_gateway is not changed
|
||||
- '"query-target-filter=eq(fvSubnet.ip, \"10.100.100.1/24\")" in get_subnets_gateway.filter_string'
|
||||
- '"class/fvSubnet.json" in get_subnets_gateway.url'
|
||||
|
||||
|
@ -215,22 +216,22 @@
|
|||
- name: asserts for deletion task
|
||||
assert:
|
||||
that:
|
||||
- delete_check_mode.changed == true
|
||||
- delete_check_mode is changed
|
||||
- delete_check_mode.proposed == {}
|
||||
- delete_subnet.changed == true
|
||||
- delete_subnet is changed
|
||||
- delete_subnet.previous != []
|
||||
- 'delete_subnet.method == "DELETE"'
|
||||
- delete_idempotency.changed == false
|
||||
- delete_subnet.method == "DELETE"
|
||||
- delete_idempotency is not changed
|
||||
- delete_idempotency.previous == []
|
||||
|
||||
- name: delete bd - cleanup before ending tests
|
||||
aci_bd:
|
||||
<<: *aci_bd_present
|
||||
state: absent
|
||||
when: bd_present.changed == true
|
||||
when: bd_present is changed
|
||||
|
||||
- name: delete tenant - cleanup before ending tests
|
||||
aci_tenant:
|
||||
<<: *aci_tenant_present
|
||||
state: absent
|
||||
when: tenant_present.changed == true
|
||||
when: tenant_present is changed
|
||||
|
|
|
@ -81,14 +81,14 @@
|
|||
- name: rollback assertions
|
||||
assert:
|
||||
that:
|
||||
- rollback_preview.changed == false
|
||||
- rollback_preview is not changed
|
||||
- '"<fvTenant name=\"anstest\" rn=\"tn-anstest\" status=\"deleted\">" in rollback_preview.diff'
|
||||
- '"snapshots.diff.xml" in rollback_preview.url'
|
||||
- rollback_missing_param.failed == true
|
||||
- rollback_missing_param is failed
|
||||
- 'rollback_missing_param.msg == "state is rollback but all of the following are missing: import_policy"'
|
||||
- rollback_rollback.changed == true
|
||||
- rollback_rollback is changed
|
||||
- '"ce2_" in rollback_rollback.sent.configImportP.attributes.fileName'
|
||||
- '".tar.gz" in rollback_rollback.sent.configImportP.attributes.fileName'
|
||||
- '"fabric/configimp-anstest.json" in rollback_rollback.url'
|
||||
- tenant_removed.changed == false
|
||||
- tenant_removed is not changed
|
||||
- tenant_removed.previous == []
|
||||
|
|
|
@ -48,15 +48,15 @@
|
|||
- name: present assertion tests
|
||||
assert:
|
||||
that:
|
||||
- create.failed == false
|
||||
- create.changed == true
|
||||
- 'create.sent.configExportP.attributes.adminSt == "triggered"'
|
||||
- create_update.failed == false
|
||||
- create_update.changed == true
|
||||
- create is not failed
|
||||
- create is changed
|
||||
- create.sent.configExportP.attributes.adminSt == "triggered"
|
||||
- create_update is not failed
|
||||
- create_update is changed
|
||||
- 'create_update.sent == {"configExportP": {"attributes": {"adminSt": "triggered", "format": "xml", "includeSecureFields": "yes"}}}'
|
||||
- invalid_max_count.failed == true
|
||||
- invalid_max_count is failed
|
||||
- invalid_max_count.msg == "Parameter 'max_count' must be a number between 1 and 10"
|
||||
- missing_param.failed == true
|
||||
- missing_param is failed
|
||||
- 'missing_param.msg == "state is present but all of the following are missing: export_policy"'
|
||||
|
||||
- name: query with export_policy
|
||||
|
@ -91,21 +91,21 @@
|
|||
- name: query assertion tests
|
||||
assert:
|
||||
that:
|
||||
- query_export.failed == false
|
||||
- query_export.changed == false
|
||||
- query_export is not failed
|
||||
- query_export is not changed
|
||||
- '"snapshots-[uni/fabric/configexp-anstest].json" in query_export.url'
|
||||
- query_export.current.0.configSnapshotCont.attributes.name == "anstest"
|
||||
- query_export.current.0.configSnapshotCont.children | length > 1
|
||||
- query_export_snapshot.failed == false
|
||||
- query_export_snapshot.changed == false
|
||||
- query_export_snapshot is not failed
|
||||
- query_export_snapshot is not changed
|
||||
- '"snapshots-[uni/fabric/configexp-anstest]/snapshot-{{ test_snapshot }}.json" in query_export_snapshot.url'
|
||||
- query_export_snapshot.current | length == 1
|
||||
- query_snapshot.failed == false
|
||||
- query_snapshot.changed == false
|
||||
- query_snapshot is not failed
|
||||
- query_snapshot is not changed
|
||||
- '"class/configSnapshot.json" in query_snapshot.url'
|
||||
- '"configSnapshot.name, \"{{ test_snapshot }}\"" in query_snapshot.filter_string'
|
||||
- query_all.failed == false
|
||||
- query_all.changed == false
|
||||
- query_all is not failed
|
||||
- query_all is not changed
|
||||
- '"class/configSnapshot.json" in query_all.url'
|
||||
- query_all.current | length > 1
|
||||
|
||||
|
@ -130,13 +130,13 @@
|
|||
- name: absent assertion tests
|
||||
assert:
|
||||
that:
|
||||
- delete_snapshot.failed == false
|
||||
- delete_snapshot.changed == true
|
||||
- delete_snapshot is not failed
|
||||
- delete_snapshot is changed
|
||||
- 'delete_snapshot.sent == {"configSnapshot": {"attributes": {"retire": "yes"}}}'
|
||||
- delete_snapshot.previous != []
|
||||
- delete_snapshot.previous.0.configSnapshot.attributes.name == test_snapshot
|
||||
- delete_idempotent.failed == false
|
||||
- delete_idempotent.changed == false
|
||||
- delete_idempotent is not failed
|
||||
- delete_idempotent is not changed
|
||||
- delete_idempotent.previous == []
|
||||
- delete_missing_param.failed == true
|
||||
- delete_missing_param is failed
|
||||
- 'delete_missing_param.msg == "state is absent but all of the following are missing: snapshot"'
|
||||
|
|
|
@ -59,16 +59,16 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- present_check_mode.changed == true
|
||||
- present_check_mode is changed
|
||||
- present_check_mode.previous == []
|
||||
- 'present_check_mode.sent == {"vzBrCP": {"attributes": {"name": "anstest", "descr": "Ansible Test"}}}'
|
||||
- contract_present.changed == true
|
||||
- contract_present is changed
|
||||
- contract_present.sent == present_check_mode.sent
|
||||
- present_idempotent.changed == false
|
||||
- present_update.changed == true
|
||||
- present_idempotent is not changed
|
||||
- present_update is changed
|
||||
- present_update.sent != present_update.proposed
|
||||
- 'present_update.sent.vzBrCP.attributes.scope == "application-profile"'
|
||||
- present_missing_param.failed == true
|
||||
- present_update.sent.vzBrCP.attributes.scope == "application-profile"
|
||||
- present_missing_param is failed
|
||||
- 'present_missing_param.msg == "state is present but all of the following are missing: contract"'
|
||||
|
||||
- name: query contract
|
||||
|
@ -99,19 +99,19 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- query_contract.changed == false
|
||||
- query_contract is not changed
|
||||
- query_contract.current | length == 1
|
||||
- '"tn-anstest/brc-anstest.json" in query_contract.url'
|
||||
- query_tenant.changed == false
|
||||
- query_tenant is not changed
|
||||
- query_tenant.current | length == 1
|
||||
- query_tenant.current.0.fvTenant.children | length > 1
|
||||
- '"rsp-subtree-class=vzBrCP" in query_tenant.filter_string'
|
||||
- '"tn-anstest.json" in query_tenant.url'
|
||||
- query_name.changed == false
|
||||
- query_name is not changed
|
||||
- query_name.current != []
|
||||
- '"query-target-filter=eq(vzBrCP.name, \"anstest\")" in query_name.filter_string'
|
||||
- '"class/vzBrCP.json" in query_name.url'
|
||||
- query_all.changed == false
|
||||
- query_all is not changed
|
||||
- query_all.current | length > 1
|
||||
- '"class/vzBrCP.json" in query_all.url'
|
||||
|
||||
|
@ -147,17 +147,17 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- absent_check_mode.changed == true
|
||||
- absent_check_mode is changed
|
||||
- absent_check_mode.previous != []
|
||||
- contract_absent.changed == true
|
||||
- contract_absent is changed
|
||||
- contract_absent.previous == absent_check_mode.previous
|
||||
- absent_idempotent.changed == false
|
||||
- absent_idempotent is not changed
|
||||
- absent_idempotent.previous == []
|
||||
- absent_missing_param.failed == true
|
||||
- absent_missing_param is failed
|
||||
- 'absent_missing_param.msg == "state is absent but all of the following are missing: tenant"'
|
||||
|
||||
- name: cleanup tenant
|
||||
aci_tenant:
|
||||
<<: *aci_tenant_present
|
||||
state: absent
|
||||
when: tenant_present.changed == true
|
||||
when: tenant_present is changed
|
||||
|
|
|
@ -72,19 +72,19 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- subject_present_check_mode.changed == true
|
||||
- subject_present_check_mode is changed
|
||||
- 'subject_present_check_mode.sent == {"vzSubj": {"attributes": {"descr": "Ansible Test", "name": "anstest"}}}'
|
||||
- subject_present.changed == true
|
||||
- subject_present is changed
|
||||
- subject_present.previous == []
|
||||
- subject_present.sent == subject_present_check_mode.sent
|
||||
- subject_present_idempotent.changed == false
|
||||
- subject_present_idempotent is not changed
|
||||
- subject_present_idempotent.previous != []
|
||||
- subject_update.changed == true
|
||||
- subject_update is changed
|
||||
- subject_update.sent != subject_update.proposed
|
||||
- 'subject_update.sent.vzSubj.attributes == {"prio": "level2", "provMatchT": "AtmostOne"}'
|
||||
- subject_present_2.changed == true
|
||||
- subject_present_2 is changed
|
||||
- 'subject_present_2.sent.vzSubj.attributes == {"consMatchT": "All", "name": "anstest2", "prio": "level3", "revFltPorts": "no"}'
|
||||
- present_missing_param.failed == true
|
||||
- present_missing_param is failed
|
||||
- 'present_missing_param.msg == "state is present but all of the following are missing: contract, subject"'
|
||||
|
||||
- name: query tenant contract subject
|
||||
|
@ -141,47 +141,47 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- query_tenant_contract_subject.changed == false
|
||||
- query_tenant_contract_subject is not changed
|
||||
- query_tenant_contract_subject.current | length == 1
|
||||
- 'query_tenant_contract_subject.current.0.vzSubj.attributes.name == "anstest"'
|
||||
- query_tenant_contract_subject.current.0.vzSubj.attributes.name == "anstest"
|
||||
- '"tn-anstest/brc-anstest/subj-anstest.json" in query_tenant_contract_subject.url'
|
||||
- query_tenant_contract.changed == false
|
||||
- query_tenant_contract is not changed
|
||||
- query_tenant_contract.current | length == 1
|
||||
- 'query_tenant_contract.current.0.vzBrCP.attributes.name == "anstest"'
|
||||
- query_tenant_contract.current.0.vzBrCP.attributes.name == "anstest"
|
||||
- query_tenant_contract.current.0.vzBrCP.children | length == 2
|
||||
- '"rsp-subtree-class=vzSubj" in query_tenant_contract.filter_string'
|
||||
- '"tn-anstest/brc-anstest.json" in query_tenant_contract.url'
|
||||
- query_tenant_subject.changed == false
|
||||
- query_tenant_subject is not changed
|
||||
- query_tenant_subject.current | length == 1
|
||||
- 'query_tenant_subject.current.0.fvTenant.attributes.name == "anstest"'
|
||||
- query_tenant_subject.current.0.fvTenant.attributes.name == "anstest"
|
||||
- query_tenant_subject.current.0.fvTenant.children.0.vzBrCP.children | length == 1
|
||||
- 'query_tenant_subject.current.0.fvTenant.children.0.vzBrCP.children.0.vzSubj.attributes.name == "anstest"'
|
||||
- query_tenant_subject.current.0.fvTenant.children.0.vzBrCP.children.0.vzSubj.attributes.name == "anstest"
|
||||
- '"rsp-subtree-filter=eq(vzSubj.name, \"anstest\")" in query_tenant_subject.filter_string'
|
||||
- '"rsp-subtree-class=vzSubj" in query_tenant_subject.filter_string'
|
||||
- '"tn-anstest.json" in query_tenant_subject.url'
|
||||
- query_contract_subject.changed == false
|
||||
- 'query_contract_subject.current.0.vzBrCP.attributes.name == "anstest"'
|
||||
- query_contract_subject is not changed
|
||||
- query_contract_subject.current.0.vzBrCP.attributes.name == "anstest"
|
||||
- query_contract_subject.current.0.vzBrCP.children | length == 1
|
||||
- 'query_contract_subject.current.0.vzBrCP.children.0.vzSubj.attributes.name == "anstest"'
|
||||
- query_contract_subject.current.0.vzBrCP.children.0.vzSubj.attributes.name == "anstest"
|
||||
- '"query-target-filter=eq(vzBrCP.name, \"anstest\")" in query_contract_subject.filter_string'
|
||||
- '"rsp-subtree-filter=eq(vzSubj.name, \"anstest\")" in query_contract_subject.filter_string'
|
||||
- '"rsp-subtree-class=vzSubj" in query_contract_subject.filter_string'
|
||||
- '"class/vzBrCP.json" in query_contract_subject.url'
|
||||
- query_tenant.changed == false
|
||||
- query_tenant is not changed
|
||||
- query_tenant.current | length == 1
|
||||
- 'query_tenant.current.0.fvTenant.attributes.name == "anstest"'
|
||||
- query_tenant.current.0.fvTenant.attributes.name == "anstest"
|
||||
- '"rsp-subtree-class=vzBrCP,vzSubj" in query_tenant.filter_string'
|
||||
- '"tn-anstest.json" in query_tenant.url'
|
||||
- query_contract.changed == false
|
||||
- 'query_contract.current.0.vzBrCP.attributes.name == "anstest"'
|
||||
- query_contract is not changed
|
||||
- query_contract.current.0.vzBrCP.attributes.name == "anstest"
|
||||
- '"query-target-filter=eq(vzBrCP.name, \"anstest\")" in query_contract.filter_string'
|
||||
- '"rsp-subtree-class=vzSubj" in query_contract.filter_string'
|
||||
- '"class/vzBrCP.json" in query_contract.url'
|
||||
- query_subject.changed == false
|
||||
- 'query_subject.current.0.vzSubj.attributes.name == "anstest"'
|
||||
- query_subject is not changed
|
||||
- query_subject.current.0.vzSubj.attributes.name == "anstest"
|
||||
- '"query-target-filter=eq(vzSubj.name, \"anstest\")" in query_subject.filter_string'
|
||||
- '"class/vzSubj.json" in query_subject.url'
|
||||
- query_all.changed == false
|
||||
- query_all is not changed
|
||||
- query_all.current > 1
|
||||
- query_all.current.0.vzSubj is defined
|
||||
- '"class/vzSubj.json" in query_all.url'
|
||||
|
@ -218,24 +218,24 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- subject_absent_check_mode.changed == true
|
||||
- subject_absent_check_mode is changed
|
||||
- subject_absent_check_mode.previous != []
|
||||
- subject_absent_check_mode.proposed == {}
|
||||
- subject_absent.changed == true
|
||||
- subject_absent is changed
|
||||
- subject_absent.previous == subject_absent_check_mode.previous
|
||||
- subject_absent_idempotent.changed == false
|
||||
- subject_absent_idempotent is not changed
|
||||
- subject_absent_idempotent.previous == []
|
||||
- absent_missing_param.failed == true
|
||||
- absent_missing_param is failed
|
||||
- 'absent_missing_param.msg == "state is absent but all of the following are missing: subject"'
|
||||
|
||||
- name: cleanup contract
|
||||
aci_contract:
|
||||
<<: *aci_contract_present
|
||||
state: absent
|
||||
when: contract_present.changed == true
|
||||
when: contract_present is changed
|
||||
|
||||
- name: cleanup tenant
|
||||
aci_tenant:
|
||||
<<: *aci_tenant_present
|
||||
state: absent
|
||||
when: tenant_present.changed == true
|
||||
when: tenant_present is changed
|
||||
|
|
|
@ -84,18 +84,18 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- subject_filter_present_check_mode.changed == true
|
||||
- subject_filter_present_check_mode is changed
|
||||
- subject_filter_present_check_mode.previous == []
|
||||
- 'subject_filter_present_check_mode.sent == {"vzRsSubjFiltAtt": {"attributes": {"directives": "log", "tnVzFilterName": "anstest"}}}'
|
||||
- subject_filter_present.changed == true
|
||||
- subject_filter_present is changed
|
||||
- subject_filter_present.previous == []
|
||||
- subject_filter_present.sent == subject_filter_present_check_mode.sent
|
||||
- subject_filter_present_2.changed == true
|
||||
- subject_filter_present_idempotent.changed == false
|
||||
- subject_filter_present_2 is changed
|
||||
- subject_filter_present_idempotent is not changed
|
||||
- subject_filter_present_idempotent.previous != []
|
||||
- subject_filter_update.changed == true
|
||||
- subject_filter_update is changed
|
||||
- 'subject_filter_update.sent.vzRsSubjFiltAtt.attributes == {"directives": ""}'
|
||||
- present_missing_param.failed == true
|
||||
- present_missing_param is failed
|
||||
- 'present_missing_param.msg == "state is present but all of the following are missing: contract, filter, subject"'
|
||||
|
||||
- name: query all
|
||||
|
@ -114,10 +114,10 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- query_all.changed == false
|
||||
- query_all is not changed
|
||||
- query_all.current | length > 1
|
||||
- query_all.current.0.vzRsSubjFiltAtt is defined
|
||||
- query_binding.changed == false
|
||||
- query_binding is not changed
|
||||
- query_binding.current != []
|
||||
|
||||
- name: delete subject filter binding - check mode works
|
||||
|
@ -152,42 +152,42 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- subject_filter_absent_check_mode.changed == true
|
||||
- subject_filter_absent_check_mode is changed
|
||||
- subject_filter_absent_check_mode.proposed == {}
|
||||
- subject_filter_absent_check_mode.previous != []
|
||||
- subject_filter_absent.changed == true
|
||||
- subject_filter_absent is changed
|
||||
- subject_filter_absent.previous != []
|
||||
- subject_filter_absent_idempotent.changed == false
|
||||
- subject_filter_absent_idempotent is not changed
|
||||
- subject_filter_absent_idempotent.previous == []
|
||||
- absent_missing_param.failed == true
|
||||
- absent_missing_param is failed
|
||||
- 'absent_missing_param.msg == "state is absent but all of the following are missing: filter"'
|
||||
|
||||
- name: cleanup subject
|
||||
aci_contract_subject:
|
||||
<<: *aci_subject_present
|
||||
state: absent
|
||||
when: subject_present.changed == true
|
||||
when: subject_present is changed
|
||||
|
||||
- name: cleanup contract
|
||||
aci_contract:
|
||||
<<: *aci_contract_present
|
||||
state: absent
|
||||
when: contract_present.changed == true
|
||||
when: contract_present is changed
|
||||
|
||||
- name: cleanup filter
|
||||
aci_filter:
|
||||
<<: *aci_filter_present
|
||||
state: absent
|
||||
when: filter_present.changed == true
|
||||
when: filter_present is changed
|
||||
|
||||
- name: cleanup filter
|
||||
aci_filter:
|
||||
<<: *aci_filter_present_2
|
||||
state: absent
|
||||
when: filter_present_2.changed == true
|
||||
when: filter_present_2 is changed
|
||||
|
||||
- name: cleanup tenant
|
||||
aci_tenant:
|
||||
<<: *aci_tenant_present
|
||||
state: absent
|
||||
when: tenant_present.changed == true
|
||||
when: tenant_present is changed
|
||||
|
|
|
@ -42,7 +42,8 @@
|
|||
- name: Verify add_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_add_domain.changed == nm_add_domain.changed == true
|
||||
- cm_add_domain is changed
|
||||
- nm_add_domain is changed
|
||||
- 'cm_add_domain.sent == nm_add_domain.sent == {"fcDomP": {"attributes": {"name": "fc_dom"}}}'
|
||||
- 'cm_add_domain.proposed == nm_add_domain.proposed == {"fcDomP": {"attributes": {"name": "fc_dom"}}}'
|
||||
- cm_add_domain.current == cm_add_domain.previous == nm_add_domain.previous == []
|
||||
|
@ -60,7 +61,8 @@
|
|||
- name: Verify add_domain_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_domain_again.changed == nm_add_domain_again.changed == false
|
||||
- cm_add_domain_again is not changed
|
||||
- nm_add_domain_again is not changed
|
||||
|
||||
|
||||
# QUERY ALL DOMAINS
|
||||
|
@ -85,7 +87,8 @@
|
|||
- name: Verify query_all_domains
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_domains.changed == nm_query_all_domains.changed == false
|
||||
- cm_query_all_domains is not changed
|
||||
- nm_query_all_domains is not changed
|
||||
- cm_query_all_domains == nm_query_all_domains
|
||||
- nm_query_all_domains.current|length >= 1
|
||||
|
||||
|
@ -107,7 +110,8 @@
|
|||
- name: Verify query_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_query_domain.changed == nm_query_domain.changed == false
|
||||
- cm_query_domain is not changed
|
||||
- nm_query_domain is not changed
|
||||
- cm_query_domain == nm_query_domain
|
||||
- nm_query_domain.current.0.fcDomP.attributes.dn == 'uni/fc-fc_dom'
|
||||
- nm_query_domain.current.0.fcDomP.attributes.name == 'fc_dom'
|
||||
|
@ -126,7 +130,8 @@
|
|||
- name: Verify remove_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_domain.changed == nm_remove_domain.changed == true
|
||||
- cm_remove_domain is changed
|
||||
- nm_remove_domain is changed
|
||||
- 'cm_remove_domain.current == cm_remove_domain.previous == nm_remove_domain.previous == [{"fcDomP": {"attributes": {"dn": "uni/fc-fc_dom", "name": "fc_dom", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
- nm_remove_domain.current == []
|
||||
|
||||
|
@ -142,7 +147,8 @@
|
|||
- name: Verify remove_domain_again
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_domain_again.changed == nm_remove_domain_again.changed == false
|
||||
- cm_remove_domain_again is not changed
|
||||
- nm_remove_domain_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING DOMAIN
|
||||
|
@ -162,6 +168,7 @@
|
|||
- name: Verify query_non_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_domain.changed == nm_query_non_domain.changed == false
|
||||
- cm_query_non_domain is not changed
|
||||
- nm_query_non_domain is not changed
|
||||
- cm_query_non_domain == nm_query_non_domain
|
||||
- nm_query_non_domain.current == []
|
||||
|
|
|
@ -42,7 +42,8 @@
|
|||
- name: Verify add_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_add_domain.changed == nm_add_domain.changed == true
|
||||
- cm_add_domain is changed
|
||||
- nm_add_domain is changed
|
||||
- 'cm_add_domain.sent == nm_add_domain.sent == {"l2extDomP": {"attributes": {"name": "l2_dom"}}}'
|
||||
- 'cm_add_domain.proposed == nm_add_domain.proposed == {"l2extDomP": {"attributes": {"name": "l2_dom"}}}'
|
||||
- cm_add_domain.current == cm_add_domain.previous == nm_add_domain.previous == []
|
||||
|
@ -60,7 +61,8 @@
|
|||
- name: Verify add_domain_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_domain_again.changed == nm_add_domain_again.changed == false
|
||||
- cm_add_domain_again is not changed
|
||||
- nm_add_domain_again is not changed
|
||||
|
||||
|
||||
# QUERY ALL DOMAINS
|
||||
|
@ -85,7 +87,8 @@
|
|||
- name: Verify query_all_domains
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_domains.changed == nm_query_all_domains.changed == false
|
||||
- cm_query_all_domains is not changed
|
||||
- nm_query_all_domains is not changed
|
||||
- cm_query_all_domains == nm_query_all_domains
|
||||
- nm_query_all_domains.current|length >= 1
|
||||
|
||||
|
@ -107,7 +110,8 @@
|
|||
- name: Verify query_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_query_domain.changed == nm_query_domain.changed == false
|
||||
- cm_query_domain is not changed
|
||||
- nm_query_domain is not changed
|
||||
- cm_query_domain == nm_query_domain
|
||||
- nm_query_domain.current.0.l2extDomP.attributes.dn == 'uni/l2dom-l2_dom'
|
||||
- nm_query_domain.current.0.l2extDomP.attributes.name == 'l2_dom'
|
||||
|
@ -126,7 +130,8 @@
|
|||
- name: Verify remove_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_domain.changed == nm_remove_domain.changed == true
|
||||
- cm_remove_domain is changed
|
||||
- nm_remove_domain is changed
|
||||
- 'cm_remove_domain.current == cm_remove_domain.previous == nm_remove_domain.previous == [{"l2extDomP": {"attributes": {"dn": "uni/l2dom-l2_dom", "name": "l2_dom", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
- nm_remove_domain.current == []
|
||||
|
||||
|
@ -142,7 +147,8 @@
|
|||
- name: Verify remove_domain_again
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_domain_again.changed == nm_remove_domain_again.changed == false
|
||||
- cm_remove_domain_again is not changed
|
||||
- nm_remove_domain_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING DOMAIN
|
||||
|
@ -162,6 +168,7 @@
|
|||
- name: Verify query_non_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_domain.changed == nm_query_non_domain.changed == false
|
||||
- cm_query_non_domain is not changed
|
||||
- nm_query_non_domain is not changed
|
||||
- cm_query_non_domain == nm_query_non_domain
|
||||
- nm_query_non_domain.current == []
|
||||
|
|
|
@ -42,7 +42,8 @@
|
|||
- name: Verify add_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_add_domain.changed == nm_add_domain.changed == true
|
||||
- cm_add_domain is changed
|
||||
- nm_add_domain is changed
|
||||
- 'cm_add_domain.sent == nm_add_domain.sent == {"l3extDomP": {"attributes": {"name": "l3_dom"}}}'
|
||||
- 'cm_add_domain.proposed == nm_add_domain.proposed == {"l3extDomP": {"attributes": {"name": "l3_dom"}}}'
|
||||
- cm_add_domain.current == cm_add_domain.previous == nm_add_domain.previous == []
|
||||
|
@ -60,7 +61,8 @@
|
|||
- name: Verify add_domain_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_domain_again.changed == nm_add_domain_again.changed == false
|
||||
- cm_add_domain_again is not changed
|
||||
- nm_add_domain_again is not changed
|
||||
|
||||
|
||||
# QUERY ALL DOMAINS
|
||||
|
@ -85,7 +87,8 @@
|
|||
- name: Verify query_all_domains
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_domains.changed == nm_query_all_domains.changed == false
|
||||
- cm_query_all_domains is not changed
|
||||
- nm_query_all_domains is not changed
|
||||
- cm_query_all_domains == nm_query_all_domains
|
||||
- nm_query_all_domains.current|length >= 1
|
||||
|
||||
|
@ -107,7 +110,8 @@
|
|||
- name: Verify query_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_query_domain.changed == nm_query_domain.changed == false
|
||||
- cm_query_domain is not changed
|
||||
- nm_query_domain is not changed
|
||||
- cm_query_domain == nm_query_domain
|
||||
- nm_query_domain.current.0.l3extDomP.attributes.dn == 'uni/l3dom-l3_dom'
|
||||
- nm_query_domain.current.0.l3extDomP.attributes.name == 'l3_dom'
|
||||
|
@ -126,7 +130,8 @@
|
|||
- name: Verify remove_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_domain.changed == nm_remove_domain.changed == true
|
||||
- cm_remove_domain is changed
|
||||
- nm_remove_domain is changed
|
||||
- 'cm_remove_domain.current == cm_remove_domain.previous == nm_remove_domain.previous == [{"l3extDomP": {"attributes": {"dn": "uni/l3dom-l3_dom", "name": "l3_dom", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
- nm_remove_domain.current == []
|
||||
|
||||
|
@ -142,7 +147,8 @@
|
|||
- name: Verify remove_domain_again
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_domain_again.changed == nm_remove_domain_again.changed == false
|
||||
- cm_remove_domain_again is not changed
|
||||
- nm_remove_domain_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING DOMAIN
|
||||
|
@ -162,6 +168,7 @@
|
|||
- name: Verify query_non_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_domain.changed == nm_query_non_domain.changed == false
|
||||
- cm_query_non_domain is not changed
|
||||
- nm_query_non_domain is not changed
|
||||
- cm_query_non_domain == nm_query_non_domain
|
||||
- nm_query_non_domain.current == []
|
||||
|
|
|
@ -42,7 +42,8 @@
|
|||
- name: Verify add_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_add_domain.changed == nm_add_domain.changed == true
|
||||
- cm_add_domain is changed
|
||||
- nm_add_domain is changed
|
||||
- 'cm_add_domain.sent == nm_add_domain.sent == {"physDomP": {"attributes": {"name": "phys_dom"}}}'
|
||||
- 'cm_add_domain.proposed == nm_add_domain.proposed == {"physDomP": {"attributes": {"name": "phys_dom"}}}'
|
||||
- cm_add_domain.current == cm_add_domain.previous == nm_add_domain.previous == []
|
||||
|
@ -60,7 +61,8 @@
|
|||
- name: Verify add_domain_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_domain_again.changed == nm_add_domain_again.changed == false
|
||||
- cm_add_domain_again is not changed
|
||||
- nm_add_domain_again is not changed
|
||||
|
||||
|
||||
# QUERY ALL DOMAINS
|
||||
|
@ -85,7 +87,8 @@
|
|||
- name: Verify query_all_domains
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_domains.changed == nm_query_all_domains.changed == false
|
||||
- cm_query_all_domains is not changed
|
||||
- nm_query_all_domains is not changed
|
||||
- cm_query_all_domains == nm_query_all_domains
|
||||
- nm_query_all_domains.current|length >= 1
|
||||
|
||||
|
@ -107,7 +110,8 @@
|
|||
- name: Verify query_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_query_domain.changed == nm_query_domain.changed == false
|
||||
- cm_query_domain is not changed
|
||||
- nm_query_domain is not changed
|
||||
- cm_query_domain == nm_query_domain
|
||||
- nm_query_domain.current.0.physDomP.attributes.dn == 'uni/phys-phys_dom'
|
||||
- nm_query_domain.current.0.physDomP.attributes.name == 'phys_dom'
|
||||
|
@ -126,7 +130,8 @@
|
|||
- name: Verify remove_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_domain.changed == nm_remove_domain.changed == true
|
||||
- cm_remove_domain is changed
|
||||
- nm_remove_domain is changed
|
||||
- 'cm_remove_domain.current == cm_remove_domain.previous == nm_remove_domain.previous == [{"physDomP": {"attributes": {"dn": "uni/phys-phys_dom", "name": "phys_dom", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
- nm_remove_domain.current == []
|
||||
|
||||
|
@ -142,7 +147,8 @@
|
|||
- name: Verify remove_domain_again
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_domain_again.changed == nm_remove_domain_again.changed == false
|
||||
- cm_remove_domain_again is not changed
|
||||
- nm_remove_domain_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING DOMAIN
|
||||
|
@ -162,6 +168,7 @@
|
|||
- name: Verify query_non_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_domain.changed == nm_query_non_domain.changed == false
|
||||
- cm_query_non_domain is not changed
|
||||
- nm_query_non_domain is not changed
|
||||
- cm_query_non_domain == nm_query_non_domain
|
||||
- nm_query_non_domain.current == []
|
||||
|
|
|
@ -44,7 +44,8 @@
|
|||
- name: Verify add_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_add_domain.changed == nm_add_domain.changed == true
|
||||
- cm_add_domain is changed
|
||||
- nm_add_domain is changed
|
||||
- 'cm_add_domain.sent == nm_add_domain.sent == {"vmmDomP": {"attributes": {"name": "vmm_dom"}}}'
|
||||
- 'cm_add_domain.proposed == nm_add_domain.proposed == {"vmmDomP": {"attributes": {"name": "vmm_dom"}}}'
|
||||
- cm_add_domain.current == cm_add_domain.previous == nm_add_domain.previous == []
|
||||
|
@ -63,7 +64,8 @@
|
|||
- name: Verify add_domain_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_domain_again.changed == nm_add_domain_again.changed == false
|
||||
- cm_add_domain_again is not changed
|
||||
- nm_add_domain_again is not changed
|
||||
|
||||
|
||||
# QUERY ALL DOMAINS
|
||||
|
@ -89,7 +91,8 @@
|
|||
- name: Verify query_all_domains
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_domains.changed == nm_query_all_domains.changed == false
|
||||
- cm_query_all_domains is not changed
|
||||
- nm_query_all_domains is not changed
|
||||
- cm_query_all_domains == nm_query_all_domains
|
||||
- nm_query_all_domains.current|length >= 1
|
||||
|
||||
|
@ -113,7 +116,8 @@
|
|||
- name: Verify query_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_query_domain.changed == nm_query_domain.changed == false
|
||||
- cm_query_domain is not changed
|
||||
- nm_query_domain is not changed
|
||||
- cm_query_domain == nm_query_domain
|
||||
- nm_query_domain.current.0.vmmDomP.attributes.dn == 'uni/vmmp-VMware/dom-vmm_dom'
|
||||
- nm_query_domain.current.0.vmmDomP.attributes.name == 'vmm_dom'
|
||||
|
@ -132,7 +136,8 @@
|
|||
- name: Verify remove_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_domain.changed == nm_remove_domain.changed == true
|
||||
- cm_remove_domain is changed
|
||||
- nm_remove_domain is changed
|
||||
- cm_remove_domain.current == cm_remove_domain.previous == nm_remove_domain.previous
|
||||
- nm_remove_domain.previous.0.vmmDomP.attributes.dn == 'uni/vmmp-VMware/dom-vmm_dom'
|
||||
- nm_remove_domain.previous.0.vmmDomP.attributes.name == 'vmm_dom'
|
||||
|
@ -150,7 +155,8 @@
|
|||
- name: Verify remove_domain_again
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_domain_again.changed == nm_remove_domain_again.changed == false
|
||||
- cm_remove_domain_again is not changed
|
||||
- nm_remove_domain_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING DOMAIN
|
||||
|
@ -172,6 +178,7 @@
|
|||
- name: Verify query_non_domain
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_domain.changed == nm_query_non_domain.changed == false
|
||||
- cm_query_non_domain is not changed
|
||||
- nm_query_non_domain is not changed
|
||||
- cm_query_non_domain == nm_query_non_domain
|
||||
- nm_query_non_domain.current == []
|
||||
|
|
|
@ -73,7 +73,8 @@
|
|||
- name: Verify add_binding
|
||||
assert:
|
||||
that:
|
||||
- cm_add_binding.changed == nm_add_binding.changed == true
|
||||
- cm_add_binding is changed
|
||||
- nm_add_binding is changed
|
||||
- 'cm_add_binding.sent == nm_add_binding.sent == {"physDomP": {"attributes": {"name": "phys_dom"}, "children": [{"infraRsVlanNs": {"attributes": {"tDn": "uni/infra/vlanns-[test_pool]-dynamic"}}}]}}'
|
||||
- 'cm_add_binding.proposed == nm_add_binding.proposed == {"physDomP": {"attributes": {"name": "phys_dom"}, "children": [{"infraRsVlanNs": {"attributes": {"tDn": "uni/infra/vlanns-[test_pool]-dynamic"}}}]}}'
|
||||
- cm_add_binding.current == cm_add_binding.previous == nm_add_binding.previous == []
|
||||
|
@ -91,7 +92,8 @@
|
|||
- name: Verify add_binding_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_binding_again.changed == nm_add_binding_again.changed == false
|
||||
- cm_add_binding_again is not changed
|
||||
- nm_add_binding_again is not changed
|
||||
|
||||
|
||||
# QUERY ALL BINDINGS
|
||||
|
@ -117,7 +119,8 @@
|
|||
- name: Verify query_all_bindings
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_bindings.changed == nm_query_all_bindings.changed == false
|
||||
- cm_query_all_bindings is not changed
|
||||
- nm_query_all_bindings is not changed
|
||||
- cm_query_all_bindings == nm_query_all_bindings
|
||||
- nm_query_all_bindings.current|length >= 1
|
||||
|
||||
|
@ -143,7 +146,8 @@
|
|||
- name: Verify query_binding
|
||||
assert:
|
||||
that:
|
||||
- cm_query_binding.changed == nm_query_binding.changed == false
|
||||
- cm_query_binding is not changed
|
||||
- nm_query_binding is not changed
|
||||
- cm_query_binding == nm_query_binding
|
||||
- nm_query_binding.current.0.physDomP.attributes.dn == 'uni/phys-phys_dom'
|
||||
- nm_query_binding.current.0.physDomP.attributes.name == 'phys_dom'
|
||||
|
@ -164,7 +168,8 @@
|
|||
- name: Verify remove_binding
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_binding.changed == nm_remove_binding.changed == true
|
||||
- cm_remove_binding is changed
|
||||
- nm_remove_binding is changed
|
||||
- 'cm_remove_binding.current == cm_remove_binding.previous == nm_remove_binding.previous == [{"physDomP": {"attributes": {"dn": "uni/phys-phys_dom", "name": "phys_dom", "nameAlias": "", "ownerKey": "", "ownerTag": ""}, "children": [{"infraRsVlanNs": {"attributes": {"tDn": "uni/infra/vlanns-[test_pool]-dynamic"}}}]}}]'
|
||||
- nm_remove_binding.current == []
|
||||
|
||||
|
@ -180,7 +185,8 @@
|
|||
- name: Verify remove_binding_again
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_binding_again.changed == nm_remove_binding_again.changed == false
|
||||
- cm_remove_binding_again is not changed
|
||||
- nm_remove_binding_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING BINDING
|
||||
|
@ -204,6 +210,7 @@
|
|||
- name: Verify query_non_binding
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_binding.changed == nm_query_non_binding.changed == false
|
||||
- cm_query_non_binding is not changed
|
||||
- nm_query_non_binding is not changed
|
||||
- cm_query_non_binding == nm_query_non_binding
|
||||
- nm_query_non_binding.current == []
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- create_check_mode.changed == true
|
||||
- create_check_mode is changed
|
||||
- 'create_check_mode.sent == {"fvnsVlanInstP": {"attributes": {"allocMode": "static", "descr": "Ansible Test", "name": "anstest"}}}'
|
||||
|
||||
- name: create static vlan pool - creation works
|
||||
|
@ -40,7 +40,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- create_static.changed == true
|
||||
- create_static is changed
|
||||
- create_static.previous == []
|
||||
- create_static.sent == create_check_mode.sent
|
||||
|
||||
|
@ -54,7 +54,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- create_dynamic.changed == true
|
||||
- create_dynamic is changed
|
||||
- create_dynamic.previous == []
|
||||
- 'create_dynamic.sent == {"fvnsVlanInstP": {"attributes": {"allocMode": "dynamic", "descr": "Ansible Test", "name": "anstest"}}}'
|
||||
|
||||
|
@ -66,7 +66,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- idempotent_static.changed == false
|
||||
- idempotent_static is not changed
|
||||
- 'idempotent_static.previous == [{"fvnsVlanInstP": {"attributes": {"allocMode": "static", "descr": "Ansible Test", "dn": "uni/infra/vlanns-[anstest]-static", "name": "anstest", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
- idempotent_static.sent == {}
|
||||
|
||||
|
@ -78,7 +78,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- idempotent_dynamic.changed == false
|
||||
- idempotent_dynamic is not changed
|
||||
- 'idempotent_dynamic.previous == [{"fvnsVlanInstP": {"attributes": {"allocMode": "dynamic", "descr": "Ansible Test", "dn": "uni/infra/vlanns-[anstest]-dynamic", "name": "anstest", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
- idempotent_dynamic.sent == {}
|
||||
|
||||
|
@ -91,7 +91,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- update_static.changed == true
|
||||
- update_static is changed
|
||||
- 'update_static.sent == {"fvnsVlanInstP": {"attributes": {"descr": "Ansible Test Change"}}}'
|
||||
|
||||
- name: update dynamic vlan pool - update works
|
||||
|
@ -103,7 +103,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- update_dynamic.changed == true
|
||||
- update_dynamic is changed
|
||||
- 'update_dynamic.sent == {"fvnsVlanInstP": {"attributes": {"descr": "Ansible Test Change"}}}'
|
||||
|
||||
- name: missing param - failure message works
|
||||
|
@ -116,7 +116,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- vlan_alloc_fail.failed == true
|
||||
- vlan_alloc_fail is failed
|
||||
- "vlan_alloc_fail.msg == 'ACI requires parameter \\'pool_allocation_mode\\' for \\'pool_type\\' of \\'vlan\\' and \\'vsan\\' when parameter \\'pool\\' is provided'"
|
||||
|
||||
- name: missing param - failure message works
|
||||
|
@ -129,7 +129,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- vlan_pool_fail.failed == true
|
||||
- vlan_pool_fail is failed
|
||||
- 'vlan_pool_fail.msg == "state is present but all of the following are missing: pool"'
|
||||
|
||||
- name: missing param - failure message works
|
||||
|
@ -142,7 +142,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- vlan_pool_type_fail.failed == true
|
||||
- vlan_pool_type_fail is failed
|
||||
- 'vlan_pool_type_fail.msg == "missing required arguments: pool_type"'
|
||||
|
||||
- name: get all vlan pools - get class works
|
||||
|
@ -156,7 +156,7 @@
|
|||
- name: assertion test - query
|
||||
assert:
|
||||
that:
|
||||
- get_all_pools.changed == false
|
||||
- get_all_pools is not changed
|
||||
- get_all_pools.method == "GET"
|
||||
- get_all_pools.current | length > 1
|
||||
|
||||
|
@ -169,7 +169,7 @@
|
|||
- name: assertion test - query
|
||||
assert:
|
||||
that:
|
||||
- get_static_pool.changed == false
|
||||
- get_static_pool is not changed
|
||||
- get_static_pool.method == "GET"
|
||||
- get_static_pool.current | length == 1
|
||||
- get_static_pool.current.0.fvnsVlanInstP.attributes.allocMode == "static"
|
||||
|
@ -184,7 +184,7 @@
|
|||
- name: assertion test - query
|
||||
assert:
|
||||
that:
|
||||
- get_dynamic_pool.changed == false
|
||||
- get_dynamic_pool is not changed
|
||||
- get_dynamic_pool.method == "GET"
|
||||
- get_dynamic_pool.current | length == 1
|
||||
- get_dynamic_pool.current.0.fvnsVlanInstP.attributes.allocMode == "dynamic"
|
||||
|
@ -201,7 +201,7 @@
|
|||
- name: assertion test - query
|
||||
assert:
|
||||
that:
|
||||
- vlan_query_pool_type_fail.failed == true
|
||||
- vlan_query_pool_type_fail is failed
|
||||
- 'vlan_query_pool_type_fail.msg == "missing required arguments: pool_type"'
|
||||
|
||||
- name: delete static vlan pool - deletion works
|
||||
|
@ -212,7 +212,7 @@
|
|||
- name: assertion test - absent
|
||||
assert:
|
||||
that:
|
||||
- delete_static.changed == true
|
||||
- delete_static is changed
|
||||
- delete_static.method == "DELETE"
|
||||
- delete_static.previous.0.fvnsVlanInstP.attributes.allocMode == "static"
|
||||
- delete_static.previous.0.fvnsVlanInstP.attributes.name == "anstest"
|
||||
|
@ -226,7 +226,7 @@
|
|||
- name: assertion test - absent
|
||||
assert:
|
||||
that:
|
||||
- delete_check_mode.changed == true
|
||||
- delete_check_mode is changed
|
||||
|
||||
- name: delete dynamic vlan pool - deletion works
|
||||
aci_encap_pool:
|
||||
|
@ -236,7 +236,7 @@
|
|||
- name: assertion test - absent
|
||||
assert:
|
||||
that:
|
||||
- delete_dynamic.changed == true
|
||||
- delete_dynamic is changed
|
||||
- delete_dynamic.method == "DELETE"
|
||||
- delete_dynamic.previous.0.fvnsVlanInstP.attributes.allocMode == "dynamic"
|
||||
- delete_dynamic.previous.0.fvnsVlanInstP.attributes.name == "anstest"
|
||||
|
@ -249,7 +249,7 @@
|
|||
- name: assertion test - absent
|
||||
assert:
|
||||
that:
|
||||
- idempotent_delete_static.changed == false
|
||||
- idempotent_delete_static is not changed
|
||||
- idempotent_delete_static.previous == []
|
||||
|
||||
- name: delete dynamic vlan pool again - idempotency works
|
||||
|
@ -260,5 +260,5 @@
|
|||
- name: assertion test - absent
|
||||
assert:
|
||||
that:
|
||||
- idempotent_delete_dynamic.changed == false
|
||||
- idempotent_delete_dynamic is not changed
|
||||
- idempotent_delete_dynamic.previous == []
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- create_vxlan_check_mode.changed == true
|
||||
- create_vxlan_check_mode is changed
|
||||
- 'create_vxlan_check_mode.sent == {"fvnsVxlanInstP": {"attributes": {"descr": "Ansible Test", "name": "anstest"}}}'
|
||||
|
||||
- name: create vxlan pool - creation works
|
||||
|
@ -44,7 +44,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- create_vxlan.changed == true
|
||||
- create_vxlan is changed
|
||||
- create_vxlan.previous == []
|
||||
- create_vxlan.sent == create_vxlan_check_mode.sent
|
||||
|
||||
|
@ -56,7 +56,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- idempotent_vxlan.changed == false
|
||||
- idempotent_vxlan is not changed
|
||||
- 'idempotent_vxlan.previous.0.fvnsVxlanInstP.attributes.name == "anstest"'
|
||||
- idempotent_vxlan.sent == {}
|
||||
|
||||
|
@ -69,7 +69,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- update_vxlan.changed == true
|
||||
- update_vxlan is changed
|
||||
- 'update_vxlan.sent == {"fvnsVxlanInstP": {"attributes": {"descr": "Ansible Test Change"}}}'
|
||||
|
||||
- name: create vxlan pool - used for query
|
||||
|
@ -81,7 +81,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- create_vxlan_2.changed == true
|
||||
- create_vxlan_2 is changed
|
||||
|
||||
- name: create vxlan pool with pool allocation mode - failure message works
|
||||
aci_encap_pool:
|
||||
|
@ -94,7 +94,7 @@
|
|||
- name: assertion test - present
|
||||
assert:
|
||||
that:
|
||||
- create_vxlan_alloc_mode.failed == true
|
||||
- create_vxlan_alloc_mode is failed
|
||||
- "create_vxlan_alloc_mode.msg == 'vxlan pools do not support setting the \\'pool_allocation_mode\\'; please remove this parameter from the task'"
|
||||
|
||||
- name: get vxlan pool - get object works
|
||||
|
@ -106,7 +106,7 @@
|
|||
- name: assertion test - query
|
||||
assert:
|
||||
that:
|
||||
- query_vxlan.changed == false
|
||||
- query_vxlan is not changed
|
||||
- query_vxlan.current | length == 1
|
||||
- '"infra/vxlanns-anstest.json" in query_vxlan.url'
|
||||
|
||||
|
@ -119,7 +119,7 @@
|
|||
- name: assertion test - query
|
||||
assert:
|
||||
that:
|
||||
- query_vxlan_all.changed == false
|
||||
- query_vxlan_all is not changed
|
||||
- query_vxlan_all.current | length > 1
|
||||
- '"class/fvnsVxlanInstP.json" in query_vxlan_all.url'
|
||||
|
||||
|
@ -132,7 +132,7 @@
|
|||
- name: assertion test - absent
|
||||
assert:
|
||||
that:
|
||||
- delete_vxlan_check_mode.changed == true
|
||||
- delete_vxlan_check_mode is changed
|
||||
- delete_vxlan_check_mode.previous != []
|
||||
|
||||
- name: delete vxlan pool - deletion works
|
||||
|
@ -143,7 +143,7 @@
|
|||
- name: assertion test - absent
|
||||
assert:
|
||||
that:
|
||||
- delete_vxlan.changed == true
|
||||
- delete_vxlan is changed
|
||||
- delete_vxlan.previous == delete_vxlan_check_mode.previous
|
||||
- delete_vxlan.previous.0.fvnsVxlanInstP.attributes.name == "anstest"
|
||||
|
||||
|
@ -162,7 +162,7 @@
|
|||
- name: assertion test - absent
|
||||
assert:
|
||||
that:
|
||||
- delete_vxlan_idempotent.changed == false
|
||||
- delete_vxlan_idempotent is not changed
|
||||
- delete_vxlan_idempotent.previous == []
|
||||
|
||||
- name: delete vxlan pool - cleanup
|
||||
|
@ -173,5 +173,5 @@
|
|||
- name: assertion test - absent
|
||||
assert:
|
||||
that:
|
||||
- delete_vxlan_pool_fail.failed == true
|
||||
- delete_vxlan_pool_fail is failed
|
||||
- 'delete_vxlan_pool_fail.msg == "state is absent but all of the following are missing: pool"'
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_present_check_mode.changed == true
|
||||
- range_present_check_mode is changed
|
||||
- 'range_present_check_mode.sent == {"fvnsEncapBlk": {"attributes": {"allocMode": "inherit", "descr": "Ansible Test", "from": "vlan-20", "name": "anstest", "to": "vlan-40"}}}'
|
||||
|
||||
- name: create vlan pool range - creation works
|
||||
|
@ -56,7 +56,7 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_present.changed == true
|
||||
- range_present is changed
|
||||
- range_present.previous == []
|
||||
- range_present.sent == range_present_check_mode.sent
|
||||
- range_present.sent == range_present.proposed
|
||||
|
@ -69,8 +69,8 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_present_idempotent.changed == false
|
||||
- 'range_present_idempotent.previous.0.fvnsEncapBlk.attributes.name == "anstest"'
|
||||
- range_present_idempotent is not changed
|
||||
- range_present_idempotent.previous.0.fvnsEncapBlk.attributes.name == "anstest"
|
||||
|
||||
- name: update vlan pool range - update works
|
||||
aci_encap_pool_range:
|
||||
|
@ -82,7 +82,7 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_present_update.changed == true
|
||||
- range_present_update is changed
|
||||
- range_present_update.previous != []
|
||||
- range_present_update.sent != range_present.sent
|
||||
|
||||
|
@ -97,7 +97,7 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_present_2.changed == true
|
||||
- range_present_2 is changed
|
||||
- range_present_2.previous == []
|
||||
|
||||
- name: invalid range_start - error message works
|
||||
|
@ -110,8 +110,8 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_start_low.failed == true
|
||||
- 'range_start_low.msg == "vlan pools must have \"range_start\" and \"range_end\" values between 1 and 4094"'
|
||||
- range_start_low is failed
|
||||
- range_start_low.msg == 'vlan pools must have "range_start" and "range_end" values between 1 and 4094'
|
||||
|
||||
- name: invalid range_start - error message works
|
||||
aci_encap_pool_range:
|
||||
|
@ -123,8 +123,8 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_start_high.failed == true
|
||||
- 'range_start_high.msg == "vlan pools must have \"range_start\" and \"range_end\" values between 1 and 4094"'
|
||||
- range_start_high is failed
|
||||
- range_start_high.msg == 'vlan pools must have "range_start" and "range_end" values between 1 and 4094'
|
||||
|
||||
- name: invalid range_end - error message works
|
||||
aci_encap_pool_range:
|
||||
|
@ -136,8 +136,8 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_end_low.failed == true
|
||||
- 'range_end_low.msg == "vlan pools must have \"range_start\" and \"range_end\" values between 1 and 4094"'
|
||||
- range_end_low is failed
|
||||
- range_end_low.msg == 'vlan pools must have "range_start" and "range_end" values between 1 and 4094'
|
||||
|
||||
- name: invalid range_end - error message works
|
||||
aci_encap_pool_range:
|
||||
|
@ -149,8 +149,8 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_end_high.failed == true
|
||||
- 'range_end_high.msg == "vlan pools must have \"range_start\" and \"range_end\" values between 1 and 4094"'
|
||||
- range_end_high is failed
|
||||
- range_end_high.msg == 'vlan pools must have "range_start" and "range_end" values between 1 and 4094'
|
||||
|
||||
- name: range start higher than range end - error message works
|
||||
aci_encap_pool_range:
|
||||
|
@ -162,8 +162,8 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_start_end.failed == true
|
||||
- 'range_start_end.msg == "The \"range_start\" must be less than or equal to the \"range_end\""'
|
||||
- range_start_end is failed
|
||||
- range_start_end.msg == 'The "range_start" must be less than or equal to the "range_end"'
|
||||
|
||||
- name: missing required param - error message works
|
||||
aci_encap_pool_range:
|
||||
|
@ -175,8 +175,8 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_present_pool_type.failed == true
|
||||
- 'range_present_pool_type.msg == "missing required arguments: pool_type"'
|
||||
- range_present_pool_type is failed
|
||||
- "range_present_pool_type.msg == 'missing required arguments: pool_type'"
|
||||
|
||||
- name: missing required param - error message works
|
||||
aci_encap_pool_range:
|
||||
|
@ -187,8 +187,8 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_present_missing_param.failed == true
|
||||
- 'range_present_missing_param.msg == "state is present but all of the following are missing: range_end, range_name, range_start"'
|
||||
- range_present_missing_param is failed
|
||||
- "range_present_missing_param.msg == 'state is present but all of the following are missing: range_end, range_name, range_start'"
|
||||
|
||||
- name: missing required param - error message works
|
||||
aci_encap_pool_range:
|
||||
|
@ -200,8 +200,8 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- range_present_allocation.failed == true
|
||||
- 'range_present_allocation.msg == "ACI requires the \"pool_allocation_mode\" for \"pool_type\" of \"vlan\" and \"vsan\" when the \"pool\" is provided"'
|
||||
- range_present_allocation is failed
|
||||
- range_present_allocation.msg == 'ACI requires the "pool_allocation_mode" for "pool_type" of "vlan" and "vsan" when the "pool" is provided'
|
||||
|
||||
- name: query specific vlan pool range
|
||||
aci_encap_pool_range: &aci_range_query
|
||||
|
@ -212,10 +212,10 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- range_query.changed == false
|
||||
- range_query is not changed
|
||||
- range_query.url.endswith("infra/vlanns-[anstest]-static/from-[vlan-20]-to-[vlan-40].json")
|
||||
- range_query.current | length == 1
|
||||
- 'range_query.current.0.fvnsEncapBlk.attributes.name == "anstest"'
|
||||
- range_query.current.0.fvnsEncapBlk.attributes.name == "anstest"
|
||||
|
||||
- name: query vlan pool range - from, to, and name are filtered
|
||||
aci_encap_pool_range: &aci_range_query_filter
|
||||
|
@ -226,12 +226,14 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- range_query_from_to_name.changed == false
|
||||
- 'range_query_from_to_name.url.endswith("class/fvnsEncapBlk.json")'
|
||||
- '"query-target-filter=and(eq(fvnsEncapBlk.from, \"vlan-20\"),eq(fvnsEncapBlk.to, \"vlan-40\"),eq(fvnsEncapBlk.name, \"anstest\"))" in range_query_from_to_name.filter_string'
|
||||
- 'range_query_from_to_name.current.0.fvnsEncapBlk.attributes.name == "anstest"'
|
||||
- 'range_query_from_to_name.current.0.fvnsEncapBlk.attributes.from == "vlan-20"'
|
||||
- 'range_query_from_to_name.current.0.fvnsEncapBlk.attributes.to == "vlan-40"'
|
||||
- range_query_from_to_name is not changed
|
||||
- range_query_from_to_name.url.endswith("class/fvnsEncapBlk.json")
|
||||
- '"eq(fvnsEncapBlk.from, \"vlan-20\")" in range_query_from_to_name.filter_string'
|
||||
- '"eq(fvnsEncapBlk.name, \"anstest\")" in range_query_from_to_name.filter_string'
|
||||
- '"eq(fvnsEncapBlk.to, \"vlan-40\")" in range_query_from_to_name.filter_string'
|
||||
- range_query_from_to_name.current.0.fvnsEncapBlk.attributes.name == "anstest"
|
||||
- range_query_from_to_name.current.0.fvnsEncapBlk.attributes.from == "vlan-20"
|
||||
- range_query_from_to_name.current.0.fvnsEncapBlk.attributes.to == "vlan-40"
|
||||
|
||||
- name: query vlan pool range - from and name are filtered
|
||||
aci_encap_pool_range:
|
||||
|
@ -242,11 +244,12 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- range_query_from_name.changed == false
|
||||
- 'range_query_from_name.url.endswith("class/fvnsEncapBlk.json")'
|
||||
- '"query-target-filter=and(eq(fvnsEncapBlk.from, \"vlan-20\"),eq(fvnsEncapBlk.name, \"anstest\"))" in range_query_from_name.filter_string'
|
||||
- 'range_query_from_name.current.0.fvnsEncapBlk.attributes.name == "anstest"'
|
||||
- 'range_query_from_name.current.0.fvnsEncapBlk.attributes.from == "vlan-20"'
|
||||
- range_query_from_name is not changed
|
||||
- range_query_from_name.url.endswith("class/fvnsEncapBlk.json")
|
||||
- '"eq(fvnsEncapBlk.from, \"vlan-20\")" in range_query_from_name.filter_string'
|
||||
- '"eq(fvnsEncapBlk.name, \"anstest\")" in range_query_from_name.filter_string'
|
||||
- range_query_from_name.current.0.fvnsEncapBlk.attributes.name == "anstest"
|
||||
- range_query_from_name.current.0.fvnsEncapBlk.attributes.from == "vlan-20"
|
||||
|
||||
- name: query vlan pool range - to and name are filtered
|
||||
aci_encap_pool_range:
|
||||
|
@ -257,11 +260,12 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- range_query_to_name.changed == false
|
||||
- 'range_query_to_name.url.endswith("class/fvnsEncapBlk.json")'
|
||||
- '"query-target-filter=and(eq(fvnsEncapBlk.to, \"vlan-40\"),eq(fvnsEncapBlk.name, \"anstest\"))" in range_query_to_name.filter_string'
|
||||
- 'range_query_to_name.current.0.fvnsEncapBlk.attributes.name == "anstest"'
|
||||
- 'range_query_to_name.current.0.fvnsEncapBlk.attributes.to == "vlan-40"'
|
||||
- range_query_to_name is not changed
|
||||
- range_query_to_name.url.endswith('class/fvnsEncapBlk.json')
|
||||
- '"eq(fvnsEncapBlk.name, \"anstest\")" in range_query_to_name.filter_string'
|
||||
- '"eq(fvnsEncapBlk.to, \"vlan-40\")" in range_query_to_name.filter_string'
|
||||
- range_query_to_name.current.0.fvnsEncapBlk.attributes.name == "anstest"
|
||||
- range_query_to_name.current.0.fvnsEncapBlk.attributes.to == "vlan-40"
|
||||
|
||||
- name: query vlan pool range - name is filtered
|
||||
aci_encap_pool_range:
|
||||
|
@ -273,10 +277,10 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- range_query_name.changed == false
|
||||
- 'range_query_name.url.endswith("class/fvnsEncapBlk.json")'
|
||||
- '"query-target-filter=eq(fvnsEncapBlk.name, \"anstest\")" in range_query_name.filter_string'
|
||||
- 'range_query_name.current.0.fvnsEncapBlk.attributes.name == "anstest"'
|
||||
- range_query_name is not changed
|
||||
- range_query_name.url.endswith("class/fvnsEncapBlk.json")
|
||||
- '"eq(fvnsEncapBlk.name, \"anstest\")" in range_query_name.filter_string'
|
||||
- range_query_name.current.0.fvnsEncapBlk.attributes.name == "anstest"
|
||||
|
||||
- name: query vlan pool range - from and to are filtered
|
||||
aci_encap_pool_range:
|
||||
|
@ -287,11 +291,12 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- range_query_from_to.changed == false
|
||||
- 'range_query_from_to.url.endswith("class/fvnsEncapBlk.json")'
|
||||
- '"query-target-filter=and(eq(fvnsEncapBlk.from, \"vlan-20\"),eq(fvnsEncapBlk.to, \"vlan-40\"))" in range_query_from_to.filter_string'
|
||||
- 'range_query_from_to.current.0.fvnsEncapBlk.attributes.from == "vlan-20"'
|
||||
- 'range_query_from_to.current.0.fvnsEncapBlk.attributes.to == "vlan-40"'
|
||||
- range_query_from_to is not changed
|
||||
- range_query_from_to.url.endswith("class/fvnsEncapBlk.json")
|
||||
- '"eq(fvnsEncapBlk.from, \"vlan-20\")" in range_query_from_to.filter_string'
|
||||
- '"eq(fvnsEncapBlk.to, \"vlan-40\")" in range_query_from_to.filter_string'
|
||||
- range_query_from_to.current.0.fvnsEncapBlk.attributes.from == "vlan-20"
|
||||
- range_query_from_to.current.0.fvnsEncapBlk.attributes.to == "vlan-40"
|
||||
|
||||
- name: query all ranges in a vlan pool
|
||||
aci_encap_pool_range:
|
||||
|
@ -304,9 +309,9 @@
|
|||
assert:
|
||||
that:
|
||||
- range_query_pool.current | length == 1
|
||||
- 'range_query_pool.current.0.fvnsVlanInstP.attributes.name == "anstest"'
|
||||
- range_query_pool.current.0.fvnsVlanInstP.attributes.name == "anstest"
|
||||
- range_query_pool.current.0.fvnsVlanInstP.children | length > 1
|
||||
- 'range_query_pool.url.endswith("infra/vlanns-[anstest]-static.json")'
|
||||
- range_query_pool.url.endswith("infra/vlanns-[anstest]-static.json")
|
||||
|
||||
- name: query all ranges
|
||||
aci_encap_pool_range:
|
||||
|
@ -318,10 +323,10 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- range_query_all.changed == false
|
||||
- range_query_all is not changed
|
||||
- range_query_all.current | length > 1
|
||||
- range_query_all.current.0.fvnsEncapBlk is defined
|
||||
- 'range_query_all.url.endswith("class/fvnsEncapBlk.json")'
|
||||
- range_query_all.url.endswith("class/fvnsEncapBlk.json")
|
||||
|
||||
- name: delete vlan pool range - deletion works
|
||||
aci_encap_pool_range:
|
||||
|
@ -332,9 +337,9 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- delete_range.changed == true
|
||||
- delete_range is changed
|
||||
- delete_range.proposed == {}
|
||||
- 'delete_range.previous.0.fvnsEncapBlk.attributes.name == "anstest"'
|
||||
- delete_range.previous.0.fvnsEncapBlk.attributes.name == "anstest"
|
||||
|
||||
- name: delete vlan pool range - check mode works
|
||||
aci_encap_pool_range: &aci_range_absent
|
||||
|
@ -346,7 +351,7 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- delete_check_mode.changed == true
|
||||
- delete_check_mode is changed
|
||||
- delete_check_mode.previous != []
|
||||
|
||||
- name: delete vlan pool range - deletion works
|
||||
|
@ -357,7 +362,7 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- delete_range_2.changed == true
|
||||
- delete_range_2 is changed
|
||||
- delete_range_2.previous == delete_check_mode.previous
|
||||
|
||||
- name: delete vlan pool range again - idempotency works
|
||||
|
@ -368,11 +373,11 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- delete_idempotent.changed == false
|
||||
- delete_idempotent is not changed
|
||||
- delete_idempotent.previous == []
|
||||
|
||||
- name: cleanup vlan pool
|
||||
aci_encap_pool:
|
||||
<<: *aci_pool_present
|
||||
state: absent
|
||||
when: pool_present.changed == true
|
||||
when: pool_present is changed
|
||||
|
|
|
@ -17,4 +17,4 @@
|
|||
aci_encap_pool:
|
||||
<<: *aci_pool_present
|
||||
state: absent
|
||||
when: pool_present.changed == true
|
||||
when: pool_present is changed
|
||||
|
|
|
@ -16,4 +16,4 @@
|
|||
aci_encap_pool:
|
||||
<<: *aci_pool_present
|
||||
state: absent
|
||||
when: pool_present.changed == true
|
||||
when: pool_present is changed
|
||||
|
|
|
@ -73,17 +73,17 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- epg_present_check_mode.changed == true
|
||||
- epg_present_check_mode is changed
|
||||
- epg_present_check_mode.previous == []
|
||||
- epg_present_check_mode.sent.fvAEPg.attributes != {}
|
||||
- 'epg_present_check_mode.sent.fvAEPg.children.0.fvRsBd.attributes.tnFvBDName == "anstest"'
|
||||
- epg_present.changed == true
|
||||
- epg_present_check_mode.sent.fvAEPg.children.0.fvRsBd.attributes.tnFvBDName == "anstest"
|
||||
- epg_present is changed
|
||||
- epg_present.sent == epg_present_check_mode.sent
|
||||
- epg_present_idempotent.changed == false
|
||||
- epg_present_idempotent is not changed
|
||||
- epg_present_idempotent.sent == {}
|
||||
- epg_present_update.changed == true
|
||||
- epg_present_update is changed
|
||||
- 'epg_present_update.sent == {"fvAEPg": {"attributes": {"descr": "Ansible Test Update"}}}'
|
||||
- epg_present_missing_param.failed == true
|
||||
- epg_present_missing_param is failed
|
||||
- 'epg_present_missing_param.msg == "state is present but all of the following are missing: ap"'
|
||||
|
||||
- name: get specific epg
|
||||
|
@ -102,11 +102,11 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- epg_query.changed == false
|
||||
- epg_query is not changed
|
||||
- epg_query.current | length == 1
|
||||
- 'epg_query.current.0.fvAEPg.attributes.name == "anstest"'
|
||||
- epg_query.current.0.fvAEPg.attributes.name == "anstest"
|
||||
- '"tn-anstest/ap-anstest/epg-anstest.json" in epg_query.url'
|
||||
- epg_query_all.changed == false
|
||||
- epg_query_all is not changed
|
||||
- epg_query_all.current | length > 1
|
||||
- '"rsp-subtree-class=fvRsBd" in epg_query_all.filter_string'
|
||||
- '"class/fvAEPg.json" in epg_query_all.url'
|
||||
|
@ -143,13 +143,13 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- delete_epg_check_mode.changed == true
|
||||
- delete_epg_check_mode is changed
|
||||
- delete_epg_check_mode.previous != []
|
||||
- delete_epg.changed == true
|
||||
- delete_epg is changed
|
||||
- delete_epg.previous == delete_epg_check_mode.previous
|
||||
- delete_epg_idempotent.changed == false
|
||||
- delete_epg_idempotent is not changed
|
||||
- delete_epg_idempotent.previous == []
|
||||
- delete_epg_missing_param.failed == true
|
||||
- delete_epg_missing_param is failed
|
||||
- 'delete_epg_missing_param.msg == "state is absent but all of the following are missing: tenant"'
|
||||
|
||||
- name: cleanup bd
|
||||
|
|
|
@ -8,6 +8,22 @@
|
|||
msg: 'Please define the following variables: aci_hostname, aci_username and aci_password.'
|
||||
when: aci_hostname is not defined or aci_username is not defined or aci_password is not defined
|
||||
|
||||
- name: Ensure contract binding does not exist prior to testing
|
||||
aci_epg_to_contract:
|
||||
host: "{{ aci_hostname }}"
|
||||
username: "{{ aci_username }}"
|
||||
password: "{{ aci_password }}"
|
||||
validate_certs: '{{ aci_validate_certs | default(false) }}'
|
||||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: '{{ aci_output_level | default("info") }}'
|
||||
tenant: anstest
|
||||
ap: anstest
|
||||
epg: anstest
|
||||
contract_type: provider
|
||||
contract: "anstest_http"
|
||||
state: absent
|
||||
|
||||
- name: ensure tenant exists for tests to kick off
|
||||
aci_tenant: &aci_tenant_present
|
||||
host: "{{ aci_hostname }}"
|
||||
|
@ -43,7 +59,7 @@
|
|||
aci_epg_to_contract: &aci_epg_provide_present
|
||||
<<: *aci_epg_present
|
||||
contract_type: provider
|
||||
contract: "anstest_http"
|
||||
contract: anstest_http
|
||||
check_mode: yes
|
||||
register: provide_present_check_mode
|
||||
|
||||
|
@ -94,21 +110,21 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- provide_present_check_mode.changed == true
|
||||
- provide_present_check_mode is changed
|
||||
- 'provide_present_check_mode.sent == {"fvRsProv": {"attributes": {"tnVzBrCPName": "anstest_http"}}}'
|
||||
- provide_present.changed == true
|
||||
- provide_present is changed
|
||||
- provide_present.sent == provide_present_check_mode.sent
|
||||
- provide_present.previous == []
|
||||
- consume_present.changed == true
|
||||
- consume_present is changed
|
||||
- consume_present.previous == []
|
||||
- 'consume_present.sent == {"fvRsCons": {"attributes": {"tnVzBrCPName": "anstest_db"}}}'
|
||||
- provide_present2.changed == true
|
||||
- provide_present2 is changed
|
||||
- provide_present2.previous == []
|
||||
- missing_param_present.failed == true
|
||||
- missing_param_present is failed
|
||||
- 'missing_param_present.msg == "state is present but all of the following are missing: ap, contract, epg"'
|
||||
- missing_required_present.failed == true
|
||||
- missing_required_present is failed
|
||||
- 'missing_required_present.msg == "missing required arguments: contract_type"'
|
||||
- incompatible_present.failed == true
|
||||
- incompatible_present is failed
|
||||
- incompatible_present.msg == "the 'provider_match' is only configurable for Provided Contracts"
|
||||
|
||||
- name: get binding
|
||||
|
@ -141,15 +157,15 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- query_provide_contract.changed == false
|
||||
- query_provide_contract is not changed
|
||||
- query_provide_contract.current != []
|
||||
- '"class/fvRsProv.json" in query_provide_contract.url'
|
||||
- query_consume_contract.changed == false
|
||||
- '"uni/tn-anstest/ap-anstest/epg-anstest/rsprov-anstest_https.json" in query_provide_contract.url'
|
||||
- query_consume_contract is not changed
|
||||
- query_consume_contract.current != []
|
||||
- '"class/fvRsCons.json" in query_consume_contract.url'
|
||||
- query_all.changed == false
|
||||
- '"uni/tn-anstest/ap-anstest/epg-anstest/rscons-anstest_db.json" in query_consume_contract.url'
|
||||
- query_all is not changed
|
||||
- '"class/fvRsProv.json" in query_all.url'
|
||||
- missing_required_query.failed == true
|
||||
- missing_required_query is failed
|
||||
- 'missing_required_query.msg == "missing required arguments: contract_type"'
|
||||
|
||||
- name: delete consume binding - check mode works
|
||||
|
@ -198,18 +214,18 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- consume_absent_check_mode.changed == true
|
||||
- consume_absent_check_mode is changed
|
||||
- consume_absent_check_mode.previous.0.fvRsCons is defined
|
||||
- consume_absent.changed == true
|
||||
- consume_absent is changed
|
||||
- consume_absent.previous == consume_absent_check_mode.previous
|
||||
- provide_absent.changed == true
|
||||
- provide_absent is changed
|
||||
- provide_absent.previous.0.fvRsProv is defined
|
||||
- provide_absent2.changed == true
|
||||
- consume_absent_idempotent.changed == false
|
||||
- provide_absent2 is changed
|
||||
- consume_absent_idempotent is not changed
|
||||
- consume_absent_idempotent.previous == []
|
||||
- missing_param_absent.failed == true
|
||||
- missing_param_absent is failed
|
||||
- 'missing_param_absent.msg == "state is absent but all of the following are missing: contract"'
|
||||
- missing_required_absent.failed == true
|
||||
- missing_required_absent is failed
|
||||
- 'missing_required_absent.msg == "missing required arguments: contract_type"'
|
||||
|
||||
- name: cleanup contracts
|
||||
|
@ -223,16 +239,16 @@
|
|||
aci_epg:
|
||||
<<: *aci_epg_present
|
||||
state: absent
|
||||
when: epg_present.changed == true
|
||||
when: epg_present is changed
|
||||
|
||||
- name: cleanup ap
|
||||
aci_ap:
|
||||
<<: *aci_ap_present
|
||||
state: absent
|
||||
when: ap_present.changed == true
|
||||
when: ap_present is changed
|
||||
|
||||
- name: cleanup tenant
|
||||
aci_tenant:
|
||||
<<: *aci_tenant_present
|
||||
state: absent
|
||||
when: tenant_present.changed == true
|
||||
when: tenant_present is changed
|
||||
|
|
|
@ -110,23 +110,23 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- phys_check_mode_present.changed == true
|
||||
- phys_present.changed == true
|
||||
- phys_check_mode_present is changed
|
||||
- phys_present is changed
|
||||
- phys_present.previous == []
|
||||
- 'phys_present.sent == {"fvRsDomAtt": {"attributes": {}}}'
|
||||
- '"[uni/phys-anstest].json" in phys_present.url'
|
||||
- phys_idempotent.changed == false
|
||||
- phys_idempotent is not changed
|
||||
- phys_idempotent.sent == {}
|
||||
- phys_update.changed == true
|
||||
- phys_update is changed
|
||||
- 'phys_update.sent == {"fvRsDomAtt": {"attributes": {"instrImedcy": "immediate"}}}'
|
||||
- vmm_present.changed == true
|
||||
- vmm_present is changed
|
||||
- 'vmm_present.sent == {"fvRsDomAtt": {"attributes": {"resImedcy": "pre-provision"}}}'
|
||||
- '"[uni/vmmp-VMware/dom-anstest].json" in vmm_present.url'
|
||||
- present_missing_params.failed == true
|
||||
- present_missing_params is failed
|
||||
- 'present_missing_params.msg == "domain_type is vmm but all of the following are missing: vm_provider"'
|
||||
- invalid_vlan.failed == true
|
||||
- 'invalid_vlan.msg == "Valid VLAN assigments are from 1 to 4096"'
|
||||
- incompatible_params.failed == true
|
||||
- invalid_vlan is failed
|
||||
- invalid_vlan.msg == "Valid VLAN assigments are from 1 to 4096"
|
||||
- incompatible_params is failed
|
||||
- incompatible_params.msg == "Domain type 'phys' cannot have a 'vm_provider'"
|
||||
|
||||
- name: get domain epg binding
|
||||
|
@ -139,7 +139,7 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- binding_query.changed == false
|
||||
- binding_query is not changed
|
||||
- binding_query.current | length > 1
|
||||
- '"class/fvRsDomAtt.json" in binding_query.url'
|
||||
|
||||
|
@ -176,42 +176,42 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- epg_domain_check_mode_absent.changed == true
|
||||
- epg_domain_check_mode_absent is changed
|
||||
- epg_domain_check_mode_absent.previous != []
|
||||
- epg_domain_absent.changed == true
|
||||
- epg_domain_absent is changed
|
||||
- epg_domain_absent.previous == epg_domain_check_mode_absent.previous
|
||||
- epg_vmm_domain_absent.changed == true
|
||||
- idempotency_absent.changed == false
|
||||
- epg_vmm_domain_absent is changed
|
||||
- idempotency_absent is not changed
|
||||
- idempotency_absent.previous == []
|
||||
- absent_missing_param.failed == true
|
||||
- absent_missing_param is failed
|
||||
- 'absent_missing_param.msg == "state is absent but all of the following are missing: ap, domain, domain_type, epg"'
|
||||
|
||||
- name: remove vmm domain - cleanup
|
||||
aci_rest:
|
||||
<<: *aci_rest_vmm_domain
|
||||
method: delete
|
||||
when: vmm_domain_post.changed == true
|
||||
when: vmm_domain_post is changed
|
||||
|
||||
- name: remove phys domain - cleanup
|
||||
aci_rest:
|
||||
<<: *aci_rest_phys_domain
|
||||
method: delete
|
||||
when: phys_domain_post.changed == true
|
||||
when: phys_domain_post is changed
|
||||
|
||||
- name: remove epg - cleanup
|
||||
aci_epg:
|
||||
<<: *aci_epg_present
|
||||
state: absent
|
||||
when: epg_present.changed == true
|
||||
when: epg_present is changed
|
||||
|
||||
- name: remove ap - cleanup
|
||||
aci_ap:
|
||||
<<: *aci_ap_present
|
||||
state: absent
|
||||
when: ap_present.changed == true
|
||||
when: ap_present is changed
|
||||
|
||||
- name: remove tenant - cleanup
|
||||
aci_tenant:
|
||||
<<: *aci_tenant_present
|
||||
state: absent
|
||||
when: tenant_present.changed == true
|
||||
when: tenant_present is changed
|
||||
|
|
|
@ -57,9 +57,11 @@
|
|||
- name: Verify add_fabric_node
|
||||
assert:
|
||||
that:
|
||||
- cm_add_fabric_node.changed == nm_add_fabric_node.changed == true
|
||||
- cm_add_fabric_node is changed
|
||||
- nm_add_fabric_node is changed
|
||||
# FIXME: Module is not idempotent
|
||||
- cm_add_fabric_node_again.changed == nm_add_fabric_node_again.changed == false
|
||||
- cm_add_fabric_node_again is not changed
|
||||
- nm_add_fabric_node_again is not changed
|
||||
|
||||
|
||||
# CHANGE FABRIC NODE
|
||||
|
@ -92,9 +94,11 @@
|
|||
- name: Verify add_fabric_node_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_fabric_node_descr.changed == nm_add_fabric_node_descr.changed == true
|
||||
- cm_add_fabric_node_descr is changed
|
||||
- nm_add_fabric_node_descr is changed
|
||||
# FIXME: Module is not idempotent
|
||||
- cm_add_fabric_node_descr_again.changed == nm_add_fabric_node_descr_again.changed == false
|
||||
- cm_add_fabric_node_descr_again is not changed
|
||||
- nm_add_fabric_node_descr_again is not changed
|
||||
|
||||
|
||||
# ADD FABRIC NODE AGAIN
|
||||
|
@ -111,7 +115,8 @@
|
|||
assert:
|
||||
that:
|
||||
# FIXME: Module is not idempotent
|
||||
- cm_add_fabric_node_again_no_descr.changed == nm_add_fabric_node_again_no_descr.changed == false
|
||||
- cm_add_fabric_node_again_no_descr is not changed
|
||||
- nm_add_fabric_node_again_no_descr is not changed
|
||||
|
||||
|
||||
# QUERY ALL FABRIC NODES
|
||||
|
@ -135,7 +140,8 @@
|
|||
- name: Verify query_all_fabric_nodes
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_fabric_nodes.changed == nm_query_all_fabric_nodes.changed == false
|
||||
- cm_query_all_fabric_nodes is not changed
|
||||
- nm_query_all_fabric_nodes is not changed
|
||||
- cm_query_all_fabric_nodes == nm_query_all_fabric_nodes
|
||||
|
||||
|
||||
|
@ -156,7 +162,8 @@
|
|||
- name: Verify query_fabric_node
|
||||
assert:
|
||||
that:
|
||||
- cm_query_fabric_node.changed == nm_query_fabric_node.changed == false
|
||||
- cm_query_fabric_node is not changed
|
||||
- nm_query_fabric_node is not changed
|
||||
- cm_query_fabric_node == nm_query_fabric_node
|
||||
|
||||
|
||||
|
@ -182,8 +189,10 @@
|
|||
- name: Verify remove_fabric_node
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_fabric_node.changed == nm_remove_fabric_node.changed == true
|
||||
- cm_remove_fabric_node_again.changed == nm_remove_fabric_node_again.changed == false
|
||||
- cm_remove_fabric_node is changed
|
||||
- nm_remove_fabric_node is changed
|
||||
- cm_remove_fabric_node_again is not changed
|
||||
- nm_remove_fabric_node_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING LEAF PROFILE
|
||||
|
@ -203,5 +212,6 @@
|
|||
- name: Verify query_non_fabric_node
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_fabric_node.changed == nm_query_non_fabric_node.changed == false
|
||||
- cm_query_non_fabric_node is not changed
|
||||
- nm_query_non_fabric_node is not changed
|
||||
- cm_query_non_fabric_node == nm_query_non_fabric_node
|
||||
|
|
|
@ -66,10 +66,10 @@
|
|||
- name: Verify add_filter
|
||||
assert:
|
||||
that:
|
||||
- cm_add_filter.changed == true
|
||||
- cm_add_filter_again.changed == true
|
||||
- nm_add_filter.changed == true
|
||||
- nm_add_filter_again.changed == false
|
||||
- cm_add_filter is changed
|
||||
- cm_add_filter_again is changed
|
||||
- nm_add_filter is changed
|
||||
- nm_add_filter_again is not changed
|
||||
|
||||
# CHANGE FILTER
|
||||
- name: Change description of filter (check_mode)
|
||||
|
@ -101,10 +101,10 @@
|
|||
- name: Verify add_filter_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_filter_descr.changed == true
|
||||
- cm_add_filter_descr_again.changed == true
|
||||
- nm_add_filter_descr.changed == true
|
||||
- nm_add_filter_descr_again.changed == false
|
||||
- cm_add_filter_descr is changed
|
||||
- cm_add_filter_descr_again is changed
|
||||
- nm_add_filter_descr is changed
|
||||
- nm_add_filter_descr_again is not changed
|
||||
|
||||
# ADD FILTER AGAIN
|
||||
- name: Add filter again with no description (check_mode)
|
||||
|
@ -119,8 +119,8 @@
|
|||
- name: Verify add_filter_again_no_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_filter_again_no_descr.changed == false
|
||||
- nm_add_filter_again_no_descr.changed == false
|
||||
- cm_add_filter_again_no_descr is not changed
|
||||
- nm_add_filter_again_no_descr is not changed
|
||||
|
||||
# QUERY ALL FILTERS
|
||||
- name: Query all filters (check_mode)
|
||||
|
@ -143,8 +143,8 @@
|
|||
- name: Verify query_all_filters
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_filters.changed == false
|
||||
- nm_query_all_filters.changed == false
|
||||
- cm_query_all_filters is not changed
|
||||
- nm_query_all_filters is not changed
|
||||
# NOTE: Order of filters is not stable between calls
|
||||
#- cm_query_all_filters == nm_query_all_filters
|
||||
|
||||
|
@ -167,8 +167,8 @@
|
|||
- name: Verify query_filter
|
||||
assert:
|
||||
that:
|
||||
- cm_query_filter.changed == false
|
||||
- nm_query_filter.changed == false
|
||||
- cm_query_filter is not changed
|
||||
- nm_query_filter is not changed
|
||||
- cm_query_filter == nm_query_filter
|
||||
|
||||
# REMOVE FILTER
|
||||
|
@ -193,10 +193,10 @@
|
|||
- name: Verify remove_filter
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_filter.changed == true
|
||||
- cm_remove_filter_again.changed == true
|
||||
- nm_remove_filter.changed == true
|
||||
- nm_remove_filter_again.changed == false
|
||||
- cm_remove_filter is changed
|
||||
- cm_remove_filter_again is changed
|
||||
- nm_remove_filter is changed
|
||||
- nm_remove_filter_again is not changed
|
||||
|
||||
# QUERY NON-EXISTING FILTER
|
||||
# FIXME: Should this fail or return empty values ?
|
||||
|
@ -218,6 +218,6 @@
|
|||
- name: Verify query_non_filter
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_filter.changed == false
|
||||
- nm_query_non_filter.changed == false
|
||||
- cm_query_non_filter is not changed
|
||||
- nm_query_non_filter is not changed
|
||||
- cm_query_non_filter == nm_query_non_filter
|
||||
|
|
|
@ -111,27 +111,27 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- entry_present_check_mode.changed == true
|
||||
- entry_present_check_mode is changed
|
||||
- entry_present_check_mode.previous == []
|
||||
- 'entry_present_check_mode.sent == {"vzEntry": {"attributes": {"dFromPort": "http","dToPort": "88","descr": "Ansible Test","etherT": "ip","name": "anstest","prot": "tcp"}}}'
|
||||
- entry_present.changed == true
|
||||
- entry_present is changed
|
||||
- entry_present.previous == []
|
||||
- entry_present.sent == entry_present_check_mode.sent
|
||||
- entry_present_idempotent.changed == false
|
||||
- entry_present_idempotent is not changed
|
||||
- entry_present_idempotent.previous != []
|
||||
- entry_present_idempotent.sent == {}
|
||||
- entry_present_update.changed == true
|
||||
- entry_present_update is changed
|
||||
- entry_present_update.previous != []
|
||||
- entry_present_update.sent != entry_present_update.proposed
|
||||
- entry_present_2.changed == true
|
||||
- entry_present_2 is changed
|
||||
- 'entry_present_2.sent.vzEntry.attributes == {"arpOpc": "reply", "etherT": "arp", "name": "anstest2"}'
|
||||
- entry_present_3.changed == true
|
||||
- entry_present_3 is changed
|
||||
- 'entry_present_3.sent.vzEntry.attributes == {"etherT": "ip", "icmpv4T": "echo", "name": "anstest3", "prot": "icmp"}'
|
||||
- entry_present_4.changed == true
|
||||
- entry_present_4 is changed
|
||||
- 'entry_present_4.sent.vzEntry.attributes == {"dFromPort": "1000", "dToPort": "1000", "etherT": "ip", "name": "anstest4", "prot": "udp"}'
|
||||
- present_missing_param.failed == true
|
||||
- present_missing_param is failed
|
||||
- 'present_missing_param.msg == "state is present but all of the following are missing: entry"'
|
||||
- present_incompatible_params.failed == true
|
||||
- present_incompatible_params is failed
|
||||
- present_incompatible_params.msg.startswith("Parameter")
|
||||
|
||||
- name: query tenant filter entry
|
||||
|
@ -188,43 +188,43 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- query_tenant_filter_entry.changed == false
|
||||
- query_tenant_filter_entry is not changed
|
||||
- query_tenant_filter_entry.current | length == 1
|
||||
- 'query_tenant_filter_entry.current.0.vzEntry.attributes.name == "anstest"'
|
||||
- query_tenant_filter_entry.current.0.vzEntry.attributes.name == "anstest"
|
||||
- '"tn-anstest/flt-anstest/e-anstest.json" in query_tenant_filter_entry.url'
|
||||
- query_filter_entry.changed == false
|
||||
- 'query_filter_entry.current.0.vzFilter.attributes.name == "anstest"'
|
||||
- query_filter_entry is not changed
|
||||
- query_filter_entry.current.0.vzFilter.attributes.name == "anstest"
|
||||
- query_filter_entry.current.0.vzFilter.children | length == 1
|
||||
- '"query-target-filter=eq(vzFilter.name, \"anstest\")" in query_filter_entry.filter_string'
|
||||
- '"rsp-subtree-filter=eq(vzEntry.name, \"anstest\")" in query_filter_entry.filter_string'
|
||||
- '"class/vzFilter.json" in query_filter_entry.url'
|
||||
- query_tenant_entry.changed == false
|
||||
- query_tenant_entry is not changed
|
||||
- query_tenant_entry.current | length == 1
|
||||
- 'query_tenant_entry.current.0.fvTenant.attributes.name == "anstest"'
|
||||
- query_tenant_entry.current.0.fvTenant.attributes.name == "anstest"
|
||||
- '"rsp-subtree-filter=eq(vzEntry.name, \"anstest\")" in query_tenant_entry.filter_string'
|
||||
- '"rsp-subtree-class=vzEntry" in query_tenant_entry.filter_string'
|
||||
- '"tn-anstest.json" in query_tenant_entry.url'
|
||||
- query_tenant_filter.changed == false
|
||||
- query_tenant_filter is not changed
|
||||
- query_tenant_filter.current | length == 1
|
||||
- 'query_tenant_filter.current.0.vzFilter.attributes.name == "anstest"'
|
||||
- query_tenant_filter.current.0.vzFilter.attributes.name == "anstest"
|
||||
- query_tenant_filter.current.0.vzFilter.children | length == 4
|
||||
- '"rsp-subtree-class=vzEntry" in query_tenant_filter.filter_string'
|
||||
- '"tn-anstest/flt-anstest.json" in query_tenant_filter.url'
|
||||
- query_entry.changed == false
|
||||
- 'query_entry.current.0.vzEntry.attributes.name == "anstest"'
|
||||
- query_entry is not changed
|
||||
- query_entry.current.0.vzEntry.attributes.name == "anstest"
|
||||
- '"query-target-filter=eq(vzEntry.name, \"anstest\")" in query_entry.filter_string'
|
||||
- '"class/vzEntry.json" in query_entry.url'
|
||||
- query_filter.changed == false
|
||||
- 'query_filter.current.0.vzFilter.attributes.name == "anstest"'
|
||||
- query_filter is not changed
|
||||
- query_filter.current.0.vzFilter.attributes.name == "anstest"
|
||||
- '"query-target-filter=eq(vzFilter.name, \"anstest\")" in query_filter.filter_string'
|
||||
- '"rsp-subtree-class=vzEntry" in query_filter.filter_string'
|
||||
- '"class/vzFilter.json" in query_filter.url'
|
||||
- query_tenant.changed == false
|
||||
- query_tenant is not changed
|
||||
- query_tenant.current | length == 1
|
||||
- 'query_tenant.current.0.fvTenant.attributes.name == "anstest"'
|
||||
- '"rsp-subtree-class=vzFilter,vzEntry" in query_tenant.filter_string'
|
||||
- query_tenant.current.0.fvTenant.attributes.name == "anstest"
|
||||
- '"rsp-subtree-class=vzEntry,vzFilter" in query_tenant.filter_string'
|
||||
- '"tn-anstest.json" in query_tenant.url'
|
||||
- query_all.changed == false
|
||||
- query_all is not changed
|
||||
- query_all.current | length > 1
|
||||
- query_all.current.0.vzEntry is defined
|
||||
- '"class/vzEntry.json" in query_all.url'
|
||||
|
@ -262,24 +262,24 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- entry_absent_check_mode.changed == true
|
||||
- entry_absent_check_mode is changed
|
||||
- entry_absent_check_mode.previous != []
|
||||
- entry_absent.changed == true
|
||||
- entry_absent is changed
|
||||
- entry_absent.previous == entry_absent_check_mode.previous
|
||||
- entry_absent.proposed == {}
|
||||
- entry_absent_idempotent.changed == false
|
||||
- entry_absent_idempotent is not changed
|
||||
- entry_absent_idempotent.previous == []
|
||||
- absent_missing_param.failed == true
|
||||
- absent_missing_param is failed
|
||||
- 'absent_missing_param.msg == "state is absent but all of the following are missing: entry, filter"'
|
||||
|
||||
- name: cleanup filter
|
||||
aci_filter:
|
||||
<<: *aci_filter_present
|
||||
state: absent
|
||||
when: filter_present.changed == true
|
||||
when: filter_present is changed
|
||||
|
||||
- name: cleanup tenant
|
||||
aci_tenant:
|
||||
<<: *aci_tenant_present
|
||||
state: absent
|
||||
when: tenant_present.changed == true
|
||||
when: tenant_present is changed
|
||||
|
|
|
@ -42,7 +42,8 @@
|
|||
#- name: Verify add_source
|
||||
# assert:
|
||||
# that:
|
||||
# - cm_add_source.changed == nm_add_source.changed == true
|
||||
# - cm_add_source is changed
|
||||
# - nm_add_source is changed
|
||||
# - 'cm_add_source.sent == nm_add_source.sent == {"firmwareOSource": {"attributes": {"name": "aci-msft-pkg-3.1.1i.zip", "proto": "http", "url": "foobar.cisco.com/download/cisco/aci/aci-msft-pkg-3.1.1i.zip"}}}'
|
||||
# - 'cm_add_source.proposed == nm_add_source.proposed == {"firmwareOSource": {"attributes": {"name": "aci-msft-pkg-3.1.1i.zip", "proto": "http", "url": "foobar.cisco.com/download/cisco/aci/aci-msft-pkg-3.1.1i.zip"}}}'
|
||||
# - cm_add_source.current == cm_add_source.previous == nm_add_source.previous == []
|
||||
|
@ -62,7 +63,8 @@
|
|||
#- name: Verify add_source_again
|
||||
# assert:
|
||||
# that:
|
||||
# - cm_add_source_again.changed == nm_add_source_again.changed == false
|
||||
# - cm_add_source_again is not changed
|
||||
# - nm_add_source_again is not changed
|
||||
|
||||
|
||||
# QUERY ALL SOURCES
|
||||
|
@ -86,7 +88,8 @@
|
|||
- name: Verify query_all_sources
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_sources.changed == nm_query_all_sources.changed == false
|
||||
- cm_query_all_sources is not changed
|
||||
- nm_query_all_sources is not changed
|
||||
- cm_query_all_sources == nm_query_all_sources
|
||||
# - nm_query_all_sources.current|length >= 1
|
||||
|
||||
|
@ -108,7 +111,8 @@
|
|||
#- name: Verify query_source
|
||||
# assert:
|
||||
# that:
|
||||
# - cm_query_source.changed == nm_query_source.changed == false
|
||||
# - cm_query_source is not changed
|
||||
# - nm_query_source is not changed
|
||||
# - cm_query_source == nm_query_source
|
||||
# - nm_query_source.current.0.infraRsDomP.attributes.dn == 'uni/infra/attentp-test_aep/rsdomP-[uni/phys-phys_dom]'
|
||||
# - nm_query_source.current.0.infraRsDomP.attributes.tCl == 'physDomP'
|
||||
|
@ -128,7 +132,8 @@
|
|||
#- name: Verify remove_source
|
||||
# assert:
|
||||
# that:
|
||||
# - cm_remove_source.changed == nm_remove_source.changed == true
|
||||
# - cm_remove_source is changed
|
||||
# - nm_remove_source is changed
|
||||
# - 'cm_remove_source.current == cm_remove_source.previous == nm_remove_source.previous == [{"infraRsDomP": {"attributes": {"dn": "uni/infra/attentp-test_aep/rsdomP-[uni/phys-phys_dom]", "tDn": "uni/phys-phys_dom"}}}]'
|
||||
# - nm_remove_source.current == []
|
||||
#
|
||||
|
@ -144,7 +149,8 @@
|
|||
#- name: Verify remove_source_again
|
||||
# assert:
|
||||
# that:
|
||||
# - cm_remove_source_again.changed == nm_remove_source_again.changed == false
|
||||
# - cm_remove_source_again is not changed
|
||||
# - nm_remove_source_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING SOURCE
|
||||
|
@ -164,7 +170,8 @@
|
|||
#- name: Verify query_non_source
|
||||
# assert:
|
||||
# that:
|
||||
# - cm_query_non_source.changed == nm_query_non_source.changed == false
|
||||
# - cm_query_non_source is not changed
|
||||
# - nm_query_non_source is not changed
|
||||
# - cm_query_non_source == nm_query_non_source
|
||||
# - nm_query_non_source.current == []
|
||||
|
||||
|
@ -186,5 +193,5 @@
|
|||
- name: Verify error_on_missing_required_param
|
||||
assert:
|
||||
that:
|
||||
- error_on_missing_required_param.failed == true
|
||||
- error_on_missing_required_param is failed
|
||||
- 'error_on_missing_required_param.msg == "state is present but all of the following are missing: source, url"'
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
msg: 'Please define the following variables: aci_hostname, aci_username and aci_password.'
|
||||
when: aci_hostname is not defined or aci_username is not defined or aci_password is not defined
|
||||
|
||||
- name: Making sure interface_policy_leaf_policy_group doesn't exist at beggining of test (PC)
|
||||
- name: Making sure interface_policy_leaf_policy_group doesn't exist at beginning of test (PC)
|
||||
aci_interface_policy_leaf_policy_group: &aci_interface_policy_leaf_policy_group_link_absent
|
||||
host: '{{ aci_hostname }}'
|
||||
username: '{{ aci_username }}'
|
||||
|
@ -17,11 +17,11 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_link
|
||||
lag_type: link
|
||||
state: absent
|
||||
|
||||
- name: Making sure interface_policy_leaf_policy_group doesn't exist at beggining of test (VPC)
|
||||
- name: Making sure interface_policy_leaf_policy_group doesn't exist at beginning of test (VPC)
|
||||
aci_interface_policy_leaf_policy_group: &aci_interface_policy_leaf_policy_group_node_absent
|
||||
host: '{{ aci_hostname }}'
|
||||
username: '{{ aci_username }}'
|
||||
|
@ -30,11 +30,11 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_node
|
||||
lag_type: node
|
||||
state: absent
|
||||
|
||||
- name: Making sure interface_policy_leaf_policy_group doesn't exist at beggining of test (Leaf Access Port)
|
||||
- name: Making sure interface_policy_leaf_policy_group doesn't exist at beginning of test (Leaf Access Port)
|
||||
aci_interface_policy_leaf_policy_group: &aci_interface_policy_leaf_policy_group_leaf_absent
|
||||
host: '{{ aci_hostname }}'
|
||||
username: '{{ aci_username }}'
|
||||
|
@ -43,7 +43,7 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_leaf
|
||||
lag_type: leaf
|
||||
state: absent
|
||||
|
||||
|
@ -59,7 +59,7 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_link
|
||||
lag_type: link
|
||||
link_level_policy: linklevelpolicy
|
||||
fibre_channel_interface_policy: fiberchannelpolicy
|
||||
|
@ -87,13 +87,13 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- intf_policy_leaf_polgrp_check_mode_present.changed == true
|
||||
- intf_policy_leaf_polgrp_present.changed == true
|
||||
- intf_policy_leaf_polgrp_check_mode_present is changed
|
||||
- intf_policy_leaf_polgrp_present is changed
|
||||
- intf_policy_leaf_polgrp_present.previous == []
|
||||
- 'intf_policy_leaf_polgrp_present.sent == {"infraAccBndlGrp": {"attributes": {"lagT": "link","name": "policygroupname"},"children": [{"infraRsAttEntP": {"attributes": {"tDn": "uni/infra/attentp-None"}}},{"infraRsFcIfPol": {"attributes": {"tnFcIfPolName": "fiberchannelpolicy"}}},{"infraRsHIfPol": {"attributes": {"tnFabricHIfPolName": "linklevelpolicy"}}}]}}'
|
||||
- intf_policy_leaf_polgrp_idempotent.changed == false
|
||||
- 'intf_policy_leaf_polgrp_present.sent == {"infraAccBndlGrp": {"attributes": {"lagT": "link","name": "policygroupname_link"},"children": [{"infraRsAttEntP": {"attributes": {"tDn": "uni/infra/attentp-None"}}},{"infraRsFcIfPol": {"attributes": {"tnFcIfPolName": "fiberchannelpolicy"}}},{"infraRsHIfPol": {"attributes": {"tnFabricHIfPolName": "linklevelpolicy"}}}]}}'
|
||||
- intf_policy_leaf_polgrp_idempotent is not changed
|
||||
- intf_policy_leaf_polgrp_idempotent.sent == {}
|
||||
- intf_policy_leaf_polgrp_update.changed == true
|
||||
- intf_policy_leaf_polgrp_update is changed
|
||||
- 'intf_policy_leaf_polgrp_update.sent == {"infraAccBndlGrp": {"attributes": {"descr": "policygroup description"}}}'
|
||||
|
||||
- name: Query interface policy leaf policy group (PC)
|
||||
|
@ -105,7 +105,7 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_link
|
||||
lag_type: link
|
||||
state: query
|
||||
register: binding_query
|
||||
|
@ -113,9 +113,9 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- binding_query.changed == false
|
||||
- binding_query is not changed
|
||||
- binding_query.current | length >= 1
|
||||
- '"/api/mo/uni/infra/funcprof/accbundle-policygroupname.json" in binding_query.url'
|
||||
- '"/api/mo/uni/infra/funcprof/accbundle-policygroupname_link.json" in binding_query.url'
|
||||
|
||||
- name: Remove interface policy leaf policy group (PC) - check mode
|
||||
aci_interface_policy_leaf_policy_group:
|
||||
|
@ -142,7 +142,7 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_link
|
||||
#lag_type: link
|
||||
state: absent
|
||||
ignore_errors: yes
|
||||
|
@ -151,21 +151,21 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- intf_policy_leaf_polgrp_check_mode_absent.changed == true
|
||||
- intf_policy_leaf_polgrp_check_mode_absent is changed
|
||||
- intf_policy_leaf_polgrp_check_mode_absent.previous != []
|
||||
- intf_policy_leaf_polgrp_absent.changed == true
|
||||
- intf_policy_leaf_polgrp_absent is changed
|
||||
- intf_policy_leaf_polgrp_absent.previous == intf_policy_leaf_polgrp_absent.previous
|
||||
- intf_policy_leaf_polgrp_absent_idempotent.changed == false
|
||||
- intf_policy_leaf_polgrp_absent_idempotent is not changed
|
||||
- intf_policy_leaf_polgrp_absent_idempotent.previous == []
|
||||
- intf_policy_leaf_polgrp_absent_missing_param.failed == true
|
||||
- 'intf_policy_leaf_polgrp_absent_missing_param.msg == "state is absent but all of the following are missing: lag_type"'
|
||||
- intf_policy_leaf_polgrp_absent_missing_param is failed
|
||||
- 'intf_policy_leaf_polgrp_absent_missing_param.msg == "missing required arguments: lag_type"'
|
||||
|
||||
# ==== END TESTING Port Channel (PC), lag_type: link ====
|
||||
|
||||
|
||||
# ==== START TESTING Virtual Port Channel (VPC), lag_type: node ====
|
||||
|
||||
- name: Making sure interface_policy_leaf_policy_group doesn't exist at beggining of test (VPC)
|
||||
- name: Making sure interface_policy_leaf_policy_group doesn't exist at beginning of test (VPC)
|
||||
aci_interface_policy_leaf_policy_group:
|
||||
<<: *aci_interface_policy_leaf_policy_group_node_absent
|
||||
|
||||
|
@ -178,7 +178,7 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_node
|
||||
lag_type: node
|
||||
link_level_policy: linklevelpolicy
|
||||
fibre_channel_interface_policy: fiberchannelpolicy
|
||||
|
@ -206,13 +206,13 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- intf_policy_leaf_polgrp_check_mode_present.changed == true
|
||||
- intf_policy_leaf_polgrp_present.changed == true
|
||||
- intf_policy_leaf_polgrp_check_mode_present is changed
|
||||
- intf_policy_leaf_polgrp_present is changed
|
||||
- intf_policy_leaf_polgrp_present.previous == []
|
||||
- 'intf_policy_leaf_polgrp_present.sent == {"infraAccBndlGrp": {"attributes": {"lagT": "node","name": "policygroupname"},"children": [{"infraRsAttEntP": {"attributes": {"tDn": "uni/infra/attentp-None"}}},{"infraRsFcIfPol": {"attributes": {"tnFcIfPolName": "fiberchannelpolicy"}}},{"infraRsHIfPol": {"attributes": {"tnFabricHIfPolName": "linklevelpolicy"}}}]}}'
|
||||
- intf_policy_leaf_polgrp_idempotent.changed == false
|
||||
- 'intf_policy_leaf_polgrp_present.sent == {"infraAccBndlGrp": {"attributes": {"lagT": "node","name": "policygroupname_node"},"children": [{"infraRsAttEntP": {"attributes": {"tDn": "uni/infra/attentp-None"}}},{"infraRsFcIfPol": {"attributes": {"tnFcIfPolName": "fiberchannelpolicy"}}},{"infraRsHIfPol": {"attributes": {"tnFabricHIfPolName": "linklevelpolicy"}}}]}}'
|
||||
- intf_policy_leaf_polgrp_idempotent is not changed
|
||||
- intf_policy_leaf_polgrp_idempotent.sent == {}
|
||||
- intf_policy_leaf_polgrp_update.changed == true
|
||||
- intf_policy_leaf_polgrp_update is changed
|
||||
- 'intf_policy_leaf_polgrp_update.sent == {"infraAccBndlGrp": {"attributes": {"descr": "policygroup description"}}}'
|
||||
|
||||
- name: Query interface policy leaf policy group (VPC)
|
||||
|
@ -224,7 +224,7 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_node
|
||||
lag_type: node
|
||||
state: query
|
||||
register: binding_query
|
||||
|
@ -232,9 +232,35 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- binding_query.changed == false
|
||||
- binding_query is not changed
|
||||
- binding_query.current | length >= 1
|
||||
- '"/api/mo/uni/infra/funcprof/accbundle-policygroupname.json" in binding_query.url'
|
||||
- '"/api/mo/uni/infra/funcprof/accbundle-policygroupname_node.json" in binding_query.url'
|
||||
|
||||
# Add lag_type link to see what we get back
|
||||
- name: Adding a interface policy leaf policy group (PC) - creation works
|
||||
aci_interface_policy_leaf_policy_group:
|
||||
<<: *aci_interface_policy_leaf_policy_group_link_present
|
||||
register: intf_policy_leaf_polgrp_present
|
||||
|
||||
- name: Query interface policy leaf policy group (VPC)
|
||||
aci_interface_policy_leaf_policy_group:
|
||||
host: '{{ aci_hostname }}'
|
||||
username: '{{ aci_username }}'
|
||||
password: '{{ aci_password }}'
|
||||
validate_certs: '{{ aci_validate_certs | default(false) }}'
|
||||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
lag_type: node
|
||||
state: query
|
||||
register: binding_query_node_all
|
||||
|
||||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- binding_query_node_all is not changed
|
||||
- binding_query_node_all.current | length >= 1
|
||||
- '"/api/class/infraAccBndlGrp.json" in binding_query_node_all.url'
|
||||
|
||||
- name: Remove interface policy leaf policy group (VPC) - check mode
|
||||
aci_interface_policy_leaf_policy_group:
|
||||
|
@ -261,7 +287,7 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_node
|
||||
#lag_type: node
|
||||
state: absent
|
||||
ignore_errors: yes
|
||||
|
@ -270,21 +296,21 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- intf_policy_leaf_polgrp_check_mode_absent.changed == true
|
||||
- intf_policy_leaf_polgrp_check_mode_absent is changed
|
||||
- intf_policy_leaf_polgrp_check_mode_absent.previous != []
|
||||
- intf_policy_leaf_polgrp_absent.changed == true
|
||||
- intf_policy_leaf_polgrp_absent is changed
|
||||
- intf_policy_leaf_polgrp_absent.previous == intf_policy_leaf_polgrp_absent.previous
|
||||
- intf_policy_leaf_polgrp_absent_idempotent.changed == false
|
||||
- intf_policy_leaf_polgrp_absent_idempotent is not changed
|
||||
- intf_policy_leaf_polgrp_absent_idempotent.previous == []
|
||||
- intf_policy_leaf_polgrp_absent_missing_param.failed == true
|
||||
- 'intf_policy_leaf_polgrp_absent_missing_param.msg == "state is absent but all of the following are missing: lag_type"'
|
||||
- intf_policy_leaf_polgrp_absent_missing_param is failed
|
||||
- 'intf_policy_leaf_polgrp_absent_missing_param.msg == "missing required arguments: lag_type"'
|
||||
|
||||
# ==== END TESTING Virtual Port Channel (VPC), lag_type: node ====
|
||||
|
||||
|
||||
# ==== START TESTING Virtual Port Channel (VPC), lag_type: leaf ====
|
||||
|
||||
- name: Making sure interface_policy_leaf_policy_group doesn't exist at beggining of test (Leaf Access Port)
|
||||
- name: Making sure interface_policy_leaf_policy_group doesn't exist at beginning of test (Leaf Access Port)
|
||||
aci_interface_policy_leaf_policy_group:
|
||||
<<: *aci_interface_policy_leaf_policy_group_leaf_absent
|
||||
|
||||
|
@ -297,7 +323,7 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_leaf
|
||||
lag_type: leaf
|
||||
link_level_policy: linklevelpolicy
|
||||
fibre_channel_interface_policy: fiberchannelpolicy
|
||||
|
@ -333,13 +359,13 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- intf_policy_leaf_polgrp_check_mode_present.changed == true
|
||||
- intf_policy_leaf_polgrp_present.changed == true
|
||||
- intf_policy_leaf_polgrp_check_mode_present is changed
|
||||
- intf_policy_leaf_polgrp_present is changed
|
||||
- intf_policy_leaf_polgrp_present.previous == []
|
||||
- 'intf_policy_leaf_polgrp_present.sent == {"infraAccPortGrp": {"attributes": {"name": "policygroupname"},"children": [{"infraRsAttEntP": {"attributes": {"tDn": "uni/infra/attentp-None"}}},{"infraRsFcIfPol": {"attributes": {"tnFcIfPolName": "fiberchannelpolicy"}}},{"infraRsHIfPol": {"attributes": {"tnFabricHIfPolName": "linklevelpolicy"}}}]}}'
|
||||
- intf_policy_leaf_polgrp_idempotent.changed == false
|
||||
- 'intf_policy_leaf_polgrp_present.sent == {"infraAccPortGrp": {"attributes": {"name": "policygroupname_leaf"},"children": [{"infraRsAttEntP": {"attributes": {"tDn": "uni/infra/attentp-None"}}},{"infraRsFcIfPol": {"attributes": {"tnFcIfPolName": "fiberchannelpolicy"}}},{"infraRsHIfPol": {"attributes": {"tnFabricHIfPolName": "linklevelpolicy"}}}]}}'
|
||||
- intf_policy_leaf_polgrp_idempotent is not changed
|
||||
- intf_policy_leaf_polgrp_idempotent.sent == {}
|
||||
- intf_policy_leaf_polgrp_update.changed == true
|
||||
- intf_policy_leaf_polgrp_update is changed
|
||||
- 'intf_policy_leaf_polgrp_update.sent == {"infraAccPortGrp": {"attributes": {"descr": "policygroup description"}}}'
|
||||
|
||||
- name: Query interface policy leaf policy group (Leaf Access Port)
|
||||
|
@ -351,7 +377,7 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_leaf
|
||||
lag_type: leaf
|
||||
state: query
|
||||
register: binding_query
|
||||
|
@ -359,9 +385,9 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- binding_query.changed == false
|
||||
- binding_query is not changed
|
||||
- binding_query.current | length >= 1
|
||||
- '"/api/mo/uni/infra/funcprof/accportgrp-policygroupname.json" in binding_query.url'
|
||||
- '"/api/mo/uni/infra/funcprof/accportgrp-policygroupname_leaf.json" in binding_query.url'
|
||||
|
||||
- name: Remove interface policy leaf policy group (Leaf Access Port) - check mode
|
||||
aci_interface_policy_leaf_policy_group:
|
||||
|
@ -388,7 +414,7 @@
|
|||
use_ssl: '{{ aci_use_ssl | default(true) }}'
|
||||
use_proxy: '{{ aci_use_proxy | default(true) }}'
|
||||
output_level: debug
|
||||
policy_group: policygroupname
|
||||
policy_group: policygroupname_leaf
|
||||
#lag_type: leaf
|
||||
state: absent
|
||||
ignore_errors: yes
|
||||
|
@ -397,13 +423,13 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- intf_policy_leaf_polgrp_check_mode_absent.changed == true
|
||||
- intf_policy_leaf_polgrp_check_mode_absent is changed
|
||||
- intf_policy_leaf_polgrp_check_mode_absent.previous != []
|
||||
- intf_policy_leaf_polgrp_absent.changed == true
|
||||
- intf_policy_leaf_polgrp_absent is changed
|
||||
- intf_policy_leaf_polgrp_absent.previous == intf_policy_leaf_polgrp_absent.previous
|
||||
- intf_policy_leaf_polgrp_absent_idempotent.changed == false
|
||||
- intf_policy_leaf_polgrp_absent_idempotent is not changed
|
||||
- intf_policy_leaf_polgrp_absent_idempotent.previous == []
|
||||
- intf_policy_leaf_polgrp_absent_missing_param.failed == true
|
||||
- 'intf_policy_leaf_polgrp_absent_missing_param.msg == "state is absent but all of the following are missing: lag_type"'
|
||||
- intf_policy_leaf_polgrp_absent_missing_param is failed
|
||||
- 'intf_policy_leaf_polgrp_absent_missing_param.msg == "missing required arguments: lag_type"'
|
||||
|
||||
# ==== END TESTING Virtual Port Channel (VPC), lag_type: leaf ====
|
||||
|
|
|
@ -54,8 +54,10 @@
|
|||
- name: Verify add_leaf_interface_profile
|
||||
assert:
|
||||
that:
|
||||
- cm_add_leaf_interface_profile.changed == nm_add_leaf_interface_profile.changed == true
|
||||
- cm_add_leaf_interface_profile_again.changed == nm_add_leaf_interface_profile_again.changed == false
|
||||
- cm_add_leaf_interface_profile is changed
|
||||
- nm_add_leaf_interface_profile is changed
|
||||
- cm_add_leaf_interface_profile_again is not changed
|
||||
- nm_add_leaf_interface_profile_again is not changed
|
||||
|
||||
|
||||
# CHANGE LEAF INTERFACE PROFILE
|
||||
|
@ -88,8 +90,10 @@
|
|||
- name: Verify add_leaf_interface_profile_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_leaf_interface_profile_descr.changed == nm_add_leaf_interface_profile_descr.changed == true
|
||||
- cm_add_leaf_interface_profile_descr_again.changed == nm_add_leaf_interface_profile_descr_again.changed == false
|
||||
- cm_add_leaf_interface_profile_descr is changed
|
||||
- nm_add_leaf_interface_profile_descr is changed
|
||||
- cm_add_leaf_interface_profile_descr_again is not changed
|
||||
- nm_add_leaf_interface_profile_descr_again is not changed
|
||||
|
||||
|
||||
# ADD LEAF INTERFACE PROFILE AGAIN
|
||||
|
@ -105,7 +109,8 @@
|
|||
- name: Verify add_leaf_interface_profile_again_no_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_leaf_interface_profile_again_no_descr.changed == nm_add_leaf_interface_profile_again_no_descr.changed == false
|
||||
- cm_add_leaf_interface_profile_again_no_descr is not changed
|
||||
- nm_add_leaf_interface_profile_again_no_descr is not changed
|
||||
|
||||
|
||||
# QUERY ALL LEAF INTERFACE PROFILES
|
||||
|
@ -129,7 +134,8 @@
|
|||
- name: Verify query_all_leaf_interface_profiles
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_leaf_interface_profiles.changed == nm_query_all_leaf_interface_profiles.changed == false
|
||||
- cm_query_all_leaf_interface_profiles is not changed
|
||||
- nm_query_all_leaf_interface_profiles is not changed
|
||||
# NOTE: Order of leaf_interface_profiles is not stable between calls
|
||||
#- cm_query_all_leaf_interface_profiles == nm_query_all_leaf_interface_profiles
|
||||
|
||||
|
@ -151,7 +157,8 @@
|
|||
- name: Verify query_leaf_interface_profile
|
||||
assert:
|
||||
that:
|
||||
- cm_query_leaf_interface_profile.changed == nm_query_leaf_interface_profile.changed == false
|
||||
- cm_query_leaf_interface_profile is not changed
|
||||
- nm_query_leaf_interface_profile is not changed
|
||||
- cm_query_leaf_interface_profile == nm_query_leaf_interface_profile
|
||||
|
||||
|
||||
|
@ -177,8 +184,10 @@
|
|||
- name: Verify remove_leaf_interface_profile
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_leaf_interface_profile.changed == nm_remove_leaf_interface_profile.changed == true
|
||||
- cm_remove_leaf_interface_profile_again.changed == nm_remove_leaf_interface_profile_again.changed == false
|
||||
- cm_remove_leaf_interface_profile is changed
|
||||
- nm_remove_leaf_interface_profile is changed
|
||||
- cm_remove_leaf_interface_profile_again is not changed
|
||||
- nm_remove_leaf_interface_profile_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING LEAF INTERFACE PROFILE
|
||||
|
@ -199,5 +208,6 @@
|
|||
- name: Verify query_non_leaf_interface_profile
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_leaf_interface_profile.changed == nm_query_non_leaf_interface_profile.changed == false
|
||||
- cm_query_non_leaf_interface_profile is not changed
|
||||
- nm_query_non_leaf_interface_profile is not changed
|
||||
- cm_query_non_leaf_interface_profile == nm_query_non_leaf_interface_profile
|
||||
|
|
|
@ -69,8 +69,10 @@
|
|||
- name: Verify add_ospf_interface_policy
|
||||
assert:
|
||||
that:
|
||||
- cm_add_ospf_interface_policy.changed == nm_add_ospf_interface_policy.changed == true
|
||||
- cm_add_ospf_interface_policy_again.changed == nm_add_ospf_interface_policy_again.changed == false
|
||||
- cm_add_ospf_interface_policy is changed
|
||||
- nm_add_ospf_interface_policy is changed
|
||||
- cm_add_ospf_interface_policy_again is not changed
|
||||
- nm_add_ospf_interface_policy_again is not changed
|
||||
|
||||
|
||||
# CHANGE OSPF INTERFACE POLICY
|
||||
|
@ -103,8 +105,10 @@
|
|||
- name: Verify add_ospf_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_ospf_descr.changed == nm_add_ospf_descr.changed == true
|
||||
- cm_add_ospf_descr_again.changed == nm_add_ospf_descr_again.changed == false
|
||||
- cm_add_ospf_descr is changed
|
||||
- nm_add_ospf_descr is changed
|
||||
- cm_add_ospf_descr_again is not changed
|
||||
- nm_add_ospf_descr_again is not changed
|
||||
|
||||
|
||||
# ADD OSPF INTERFACE POLICY AGAIN
|
||||
|
@ -120,7 +124,8 @@
|
|||
- name: Verify add_ospf_again_no_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_ospf_again_no_descr.changed == nm_add_ospf_again_no_descr.changed == false
|
||||
- cm_add_ospf_again_no_descr is not changed
|
||||
- nm_add_ospf_again_no_descr is not changed
|
||||
|
||||
|
||||
# QUERY ALL OSPF INTERFACE POLICIES
|
||||
|
@ -145,7 +150,8 @@
|
|||
- name: Verify query_all_ospfs
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_ospfs.changed == nm_query_all_ospfs.changed == false
|
||||
- cm_query_all_ospfs is not changed
|
||||
- nm_query_all_ospfs is not changed
|
||||
# NOTE: Order of ospfs is not stable between calls
|
||||
#- cm_query_all_ospfs == nm_query_all_ospfs
|
||||
|
||||
|
@ -169,7 +175,8 @@
|
|||
- name: Verify query_ospf
|
||||
assert:
|
||||
that:
|
||||
- cm_query_ospf.changed == nm_query_ospf.changed == false
|
||||
- cm_query_ospf is not changed
|
||||
- nm_query_ospf is not changed
|
||||
- cm_query_ospf == nm_query_ospf
|
||||
|
||||
|
||||
|
@ -195,8 +202,10 @@
|
|||
- name: Verify remove_ospf
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_ospf.changed == nm_remove_ospf.changed == true
|
||||
- cm_remove_ospf_again.changed == nm_remove_ospf_again.changed == false
|
||||
- cm_remove_ospf is changed
|
||||
- nm_remove_ospf is changed
|
||||
- cm_remove_ospf_again is not changed
|
||||
- nm_remove_ospf_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING OSPF INTERFACE POLICY
|
||||
|
@ -217,5 +226,6 @@
|
|||
- name: Verify query_non_ospf
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_ospf.changed == nm_query_non_ospf.changed == false
|
||||
- cm_query_non_ospf is not changed
|
||||
- nm_query_non_ospf is not changed
|
||||
- cm_query_non_ospf == nm_query_non_ospf
|
||||
|
|
|
@ -79,11 +79,11 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- intftoleaf_check_mode_present.changed == true
|
||||
- intftoleaf_present.changed == true
|
||||
- intftoleaf_check_mode_present is changed
|
||||
- intftoleaf_present is changed
|
||||
- intftoleaf_present.previous == []
|
||||
- 'intftoleaf_present.sent == {"infraRsAccPortP": {"attributes": {"tDn": "uni/infra/accportprof-leafintprftest"}}}'
|
||||
- intftoleaf_idempotent.changed == false
|
||||
- intftoleaf_idempotent is not changed
|
||||
- intftoleaf_idempotent.sent == {}
|
||||
|
||||
- name: Query an interface selector profile associated with a switch policy leaf profile
|
||||
|
@ -96,7 +96,7 @@
|
|||
- name: query assertions
|
||||
assert:
|
||||
that:
|
||||
- binding_query.changed == false
|
||||
- binding_query is not changed
|
||||
- binding_query.current | length >= 1
|
||||
- '"api/mo/uni/infra/nprof-swleafprftest/rsaccPortP-[uni/infra/accportprof-leafintprftest].json" in binding_query.url'
|
||||
|
||||
|
@ -128,13 +128,13 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- intftoleaf_check_mode_absent.changed == true
|
||||
- intftoleaf_check_mode_absent is changed
|
||||
- intftoleaf_check_mode_absent.previous != []
|
||||
- intftoleaf_absent.changed == true
|
||||
- intftoleaf_absent is changed
|
||||
- intftoleaf_absent.previous == intftoleaf_check_mode_absent.previous
|
||||
- intftoleaf_absent_idempotent.changed == false
|
||||
- intftoleaf_absent_idempotent is not changed
|
||||
- intftoleaf_absent_idempotent.previous == []
|
||||
- intftoleaf_absent_missing_param.failed == true
|
||||
- intftoleaf_absent_missing_param is failed
|
||||
- 'intftoleaf_absent_missing_param.msg == "state is absent but all of the following are missing: interface_selector"'
|
||||
|
||||
- name: Remove an interface selector associated with a Switch Policy Leaf Profile - Clean up
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
- name: Verify error_on_name_resolution
|
||||
assert:
|
||||
that:
|
||||
- error_on_name_resolution.failed == true
|
||||
- error_on_name_resolution is failed
|
||||
- "error_on_name_resolution.msg == 'Connection failed for https://foo.bar.cisco.com/api/aaaLogin.json. Request failed: <urlopen error [Errno -2] Name or service not known>'"
|
||||
- "'current' not in error_on_name_resolution"
|
||||
- "'previous' not in error_on_name_resolution"
|
||||
|
@ -54,7 +54,7 @@
|
|||
- name: Verify error_on_missing_required_param
|
||||
assert:
|
||||
that:
|
||||
- error_on_missing_required_param.failed == true
|
||||
- error_on_missing_required_param is failed
|
||||
- 'error_on_missing_required_param.msg == "missing required arguments: path"'
|
||||
- "'current' not in error_on_missing_required_param"
|
||||
- "'previous' not in error_on_missing_required_param"
|
||||
|
@ -82,7 +82,7 @@
|
|||
- name: Verify error_on_missing_attributes
|
||||
assert:
|
||||
that:
|
||||
- error_on_missing_attributes.failed == true
|
||||
- error_on_missing_attributes is failed
|
||||
- error_on_missing_attributes.method == 'POST'
|
||||
- "error_on_missing_attributes.msg == 'APIC Error 400: invalid data at line \\'1\\'. Attributes are missing, tag \\'attributes\\' must be specified first, before any other tag'"
|
||||
- 'error_on_missing_attributes.response == "HTTP Error 400: Bad Request"'
|
||||
|
@ -115,7 +115,7 @@
|
|||
- name: Verify error_on_input_validation
|
||||
assert:
|
||||
that:
|
||||
- error_on_input_validation.failed == true
|
||||
- error_on_input_validation is failed
|
||||
- error_on_input_validation.method == 'POST'
|
||||
- "error_on_input_validation.msg == 'APIC Error 801: property descr of tn-ansible_test failed validation for value \\'This is an [invalid] description\\''"
|
||||
- 'error_on_input_validation.response == "HTTP Error 400: Bad Request"'
|
||||
|
@ -148,7 +148,7 @@
|
|||
- name: Verify error_on_invalid_attributes
|
||||
assert:
|
||||
that:
|
||||
- error_on_invalid_attributes.failed == true
|
||||
- error_on_invalid_attributes is failed
|
||||
- error_on_invalid_attributes.method == 'POST'
|
||||
- "error_on_invalid_attributes.msg == 'APIC Error 400: unknown attribute \\'description\\' in element \\'fvTenant\\''"
|
||||
- 'error_on_invalid_attributes.response == "HTTP Error 400: Bad Request"'
|
||||
|
@ -180,7 +180,7 @@
|
|||
- name: Verify error_on_invalid_object
|
||||
assert:
|
||||
that:
|
||||
- error_on_invalid_object.failed == true
|
||||
- error_on_invalid_object is failed
|
||||
- error_on_invalid_object.method == 'POST'
|
||||
- "error_on_invalid_object.msg == 'APIC Error 122: unknown managed object class fvFoobar'"
|
||||
- 'error_on_invalid_object.response == "HTTP Error 400: Bad Request"'
|
||||
|
|
|
@ -48,8 +48,8 @@
|
|||
- name: Verify add_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant.changed == true
|
||||
- nm_add_tenant_again.changed == false
|
||||
- nm_add_tenant is changed
|
||||
- nm_add_tenant_again is not changed
|
||||
|
||||
# CHANGE TENANT
|
||||
- name: Change description of tenant (normal mode)
|
||||
|
@ -83,8 +83,8 @@
|
|||
- name: Verify add_tenant_descr
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant_descr.changed == true
|
||||
- nm_add_tenant_descr_again.changed == false
|
||||
- nm_add_tenant_descr is changed
|
||||
- nm_add_tenant_descr_again is not changed
|
||||
|
||||
# ADD TENANT AGAIN
|
||||
- name: Add tenant again with no description (normal mode)
|
||||
|
@ -95,7 +95,7 @@
|
|||
- name: Verify add_tenant_again_no_descr
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant_again_no_descr.changed == false
|
||||
- nm_add_tenant_again_no_descr is not changed
|
||||
|
||||
# QUERY ALL TENANTS
|
||||
- name: Query all tenants (normal mode)
|
||||
|
@ -115,7 +115,7 @@
|
|||
- name: Verify query_all_tenants
|
||||
assert:
|
||||
that:
|
||||
- nm_query_all_tenants.changed == false
|
||||
- nm_query_all_tenants is not changed
|
||||
|
||||
# QUERY A TENANT
|
||||
- name: Query our tenant
|
||||
|
@ -135,7 +135,7 @@
|
|||
- name: Verify query_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_query_tenant.changed == false
|
||||
- nm_query_tenant is not changed
|
||||
|
||||
# REMOVE TENANT
|
||||
- name: Remove tenant (normal mode)
|
||||
|
@ -151,8 +151,8 @@
|
|||
- name: Verify remove_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_remove_tenant.changed == true
|
||||
- nm_remove_tenant_again.changed == false
|
||||
- nm_remove_tenant is changed
|
||||
- nm_remove_tenant_again is not changed
|
||||
|
||||
# QUERY NON-EXISTING TENANT
|
||||
- name: Query non-existing tenant (normal mode)
|
||||
|
@ -163,4 +163,4 @@
|
|||
- name: Verify query_non_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_query_non_tenant.changed == false
|
||||
- nm_query_non_tenant is not changed
|
||||
|
|
|
@ -46,8 +46,8 @@
|
|||
- name: Verify add_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant.changed == true
|
||||
- nm_add_tenant_again.changed == false
|
||||
- nm_add_tenant is changed
|
||||
- nm_add_tenant_again is not changed
|
||||
|
||||
# CHANGE TENANT
|
||||
- name: Change description of tenant (normal mode)
|
||||
|
@ -79,8 +79,8 @@
|
|||
- name: Verify add_tenant_descr
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant_descr.changed == true
|
||||
- nm_add_tenant_descr_again.changed == false
|
||||
- nm_add_tenant_descr is changed
|
||||
- nm_add_tenant_descr_again is not changed
|
||||
|
||||
# ADD TENANT AGAIN
|
||||
- name: Add tenant again with no description (normal mode)
|
||||
|
@ -90,7 +90,7 @@
|
|||
- name: Verify add_tenant_again_no_descr
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant_again_no_descr.changed == false
|
||||
- nm_add_tenant_again_no_descr is not changed
|
||||
|
||||
# QUERY ALL TENANTS
|
||||
- name: Query all tenants (normal mode)
|
||||
|
@ -109,7 +109,7 @@
|
|||
- name: Verify query_all_tenants
|
||||
assert:
|
||||
that:
|
||||
- nm_query_all_tenants.changed == false
|
||||
- nm_query_all_tenants is not changed
|
||||
|
||||
# QUERY A TENANT
|
||||
- name: Query our tenant
|
||||
|
@ -128,7 +128,7 @@
|
|||
- name: Verify query_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_query_tenant.changed == false
|
||||
- nm_query_tenant is not changed
|
||||
|
||||
# REMOVE TENANT
|
||||
- name: Remove tenant (normal mode)
|
||||
|
@ -142,8 +142,8 @@
|
|||
- name: Verify remove_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_remove_tenant.changed == true
|
||||
- nm_remove_tenant_again.changed == false
|
||||
- nm_remove_tenant is changed
|
||||
- nm_remove_tenant_again is not changed
|
||||
|
||||
# QUERY NON-EXISTING TENANT
|
||||
- name: Query non-existing tenant (normal mode)
|
||||
|
@ -153,4 +153,4 @@
|
|||
- name: Verify query_non_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_query_non_tenant.changed == false
|
||||
- nm_query_non_tenant is not changed
|
||||
|
|
|
@ -40,8 +40,8 @@
|
|||
- name: Verify add_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant.changed == true
|
||||
- nm_add_tenant_again.changed == false
|
||||
- nm_add_tenant is changed
|
||||
- nm_add_tenant_again is not changed
|
||||
|
||||
# CHANGE TENANT
|
||||
- name: Change description of tenant (normal mode)
|
||||
|
@ -66,8 +66,8 @@
|
|||
- name: Verify add_tenant_descr
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant_descr.changed == true
|
||||
- nm_add_tenant_descr_again.changed == false
|
||||
- nm_add_tenant_descr is changed
|
||||
- nm_add_tenant_descr_again is not changed
|
||||
|
||||
# ADD TENANT AGAIN
|
||||
- name: Add tenant again with no description (normal mode)
|
||||
|
@ -77,7 +77,7 @@
|
|||
- name: Verify add_tenant_again_no_descr
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant_again_no_descr.changed == false
|
||||
- nm_add_tenant_again_no_descr is not changed
|
||||
|
||||
# QUERY ALL TENANTS
|
||||
- name: Query all tenants (normal mode)
|
||||
|
@ -96,7 +96,7 @@
|
|||
- name: Verify query_all_tenants
|
||||
assert:
|
||||
that:
|
||||
- nm_query_all_tenants.changed == false
|
||||
- nm_query_all_tenants is not changed
|
||||
|
||||
# QUERY A TENANT
|
||||
- name: Query our tenant
|
||||
|
@ -115,7 +115,7 @@
|
|||
- name: Verify query_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_query_tenant.changed == false
|
||||
- nm_query_tenant is not changed
|
||||
|
||||
# REMOVE TENANT
|
||||
- name: Remove tenant (normal mode)
|
||||
|
@ -129,8 +129,8 @@
|
|||
- name: Verify remove_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_remove_tenant.changed == true
|
||||
- nm_remove_tenant_again.changed == false
|
||||
- nm_remove_tenant is changed
|
||||
- nm_remove_tenant_again is not changed
|
||||
|
||||
# QUERY NON-EXISTING TENANT
|
||||
- name: Query non-existing tenant (normal mode)
|
||||
|
@ -140,4 +140,4 @@
|
|||
- name: Verify query_non_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_query_non_tenant.changed == false
|
||||
- nm_query_non_tenant is not changed
|
||||
|
|
|
@ -42,8 +42,8 @@
|
|||
- name: Verify add_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant.changed == true
|
||||
- nm_add_tenant_again.changed == false
|
||||
- nm_add_tenant is changed
|
||||
- nm_add_tenant_again is not changed
|
||||
|
||||
# CHANGE TENANT
|
||||
- name: Change description of tenant (normal mode)
|
||||
|
@ -71,8 +71,8 @@
|
|||
- name: Verify add_tenant_descr
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant_descr.changed == true
|
||||
- nm_add_tenant_descr_again.changed == false
|
||||
- nm_add_tenant_descr is changed
|
||||
- nm_add_tenant_descr_again is not changed
|
||||
|
||||
# ADD TENANT AGAIN
|
||||
- name: Add tenant again with no description (normal mode)
|
||||
|
@ -82,7 +82,7 @@
|
|||
- name: Verify add_tenant_again_no_descr
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant_again_no_descr.changed == false
|
||||
- nm_add_tenant_again_no_descr is not changed
|
||||
|
||||
# QUERY ALL TENANTS
|
||||
- name: Query all tenants (normal mode)
|
||||
|
@ -101,7 +101,7 @@
|
|||
- name: Verify query_all_tenants
|
||||
assert:
|
||||
that:
|
||||
- nm_query_all_tenants.changed == false
|
||||
- nm_query_all_tenants is not changed
|
||||
|
||||
# QUERY A TENANT
|
||||
- name: Query our tenant
|
||||
|
@ -120,7 +120,7 @@
|
|||
- name: Verify query_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_query_tenant.changed == false
|
||||
- nm_query_tenant is not changed
|
||||
|
||||
# REMOVE TENANT
|
||||
- name: Remove tenant (normal mode)
|
||||
|
@ -134,8 +134,8 @@
|
|||
- name: Verify remove_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_remove_tenant.changed == true
|
||||
- nm_remove_tenant_again.changed == false
|
||||
- nm_remove_tenant is changed
|
||||
- nm_remove_tenant_again is not changed
|
||||
|
||||
# QUERY NON-EXISTING TENANT
|
||||
- name: Query non-existing tenant (normal mode)
|
||||
|
@ -145,4 +145,4 @@
|
|||
- name: Verify query_non_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_query_non_tenant.changed == false
|
||||
- nm_query_non_tenant is not changed
|
||||
|
|
|
@ -42,8 +42,8 @@
|
|||
- name: Verify add_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant.changed == true
|
||||
- nm_add_tenant_again.changed == false
|
||||
- nm_add_tenant is changed
|
||||
- nm_add_tenant_again is not changed
|
||||
|
||||
# CHANGE TENANT
|
||||
- name: Change description of tenant (normal mode)
|
||||
|
@ -71,8 +71,8 @@
|
|||
- name: Verify add_tenant_descr
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant_descr.changed == true
|
||||
- nm_add_tenant_descr_again.changed == false
|
||||
- nm_add_tenant_descr is changed
|
||||
- nm_add_tenant_descr_again is not changed
|
||||
|
||||
# ADD TENANT AGAIN
|
||||
- name: Add tenant again with no description (normal mode)
|
||||
|
@ -82,7 +82,7 @@
|
|||
- name: Verify add_tenant_again_no_descr
|
||||
assert:
|
||||
that:
|
||||
- nm_add_tenant_again_no_descr.changed == false
|
||||
- nm_add_tenant_again_no_descr is not changed
|
||||
|
||||
# QUERY ALL TENANTS
|
||||
- name: Query all tenants (normal mode)
|
||||
|
@ -101,7 +101,7 @@
|
|||
- name: Verify query_all_tenants
|
||||
assert:
|
||||
that:
|
||||
- nm_query_all_tenants.changed == false
|
||||
- nm_query_all_tenants is not changed
|
||||
|
||||
# QUERY A TENANT
|
||||
- name: Query our tenant
|
||||
|
@ -120,7 +120,7 @@
|
|||
- name: Verify query_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_query_tenant.changed == false
|
||||
- nm_query_tenant is not changed
|
||||
|
||||
# REMOVE TENANT
|
||||
- name: Remove tenant (normal mode)
|
||||
|
@ -134,8 +134,8 @@
|
|||
- name: Verify remove_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_remove_tenant.changed == true
|
||||
- nm_remove_tenant_again.changed == false
|
||||
- nm_remove_tenant is changed
|
||||
- nm_remove_tenant_again is not changed
|
||||
|
||||
# QUERY NON-EXISTING TENANT
|
||||
- name: Query non-existing tenant (normal mode)
|
||||
|
@ -145,4 +145,4 @@
|
|||
- name: Verify query_non_tenant
|
||||
assert:
|
||||
that:
|
||||
- nm_query_non_tenant.changed == false
|
||||
- nm_query_non_tenant is not changed
|
||||
|
|
|
@ -115,20 +115,20 @@
|
|||
- name: Present assertions
|
||||
assert:
|
||||
that:
|
||||
- provide_present_check_mode.changed == true
|
||||
- provide_present_check_mode is changed
|
||||
- 'provide_present_check_mode.sent == {"fvRsPathAtt": {"attributes": { "encap": "vlan-222", "instrImedcy": "lazy", "mode": "regular", "tDn": "topology/pod-1/paths-101/pathep-[eth1/7]"}}}'
|
||||
- provide_present.changed == true
|
||||
- provide_present is changed
|
||||
- provide_present.sent == provide_present_check_mode.sent
|
||||
- provide_present.previous == []
|
||||
- primary_ecap_id_present.changed == true
|
||||
- primary_ecap_id_present is changed
|
||||
- 'primary_ecap_id_present.sent == {"fvRsPathAtt": {"attributes": {"primaryEncap": "vlan-50"}}}'
|
||||
- description_cm.changed == true
|
||||
- description.changed == true
|
||||
- idempotent_description_cm.changed == false
|
||||
- idempotent_description.changed == false
|
||||
- missing_required_present.failed == true
|
||||
- description_cm is changed
|
||||
- description is changed
|
||||
- idempotent_description_cm is not changed
|
||||
- idempotent_description is not changed
|
||||
- missing_required_present is failed
|
||||
- 'missing_required_present.msg == "state is present but all of the following are missing: ap, encap_id, epg, interface, leafs, pod_id"'
|
||||
- missing_required_present.failed == true
|
||||
- missing_required_present is failed
|
||||
|
||||
|
||||
- name: Query specific binding
|
||||
|
@ -146,11 +146,11 @@
|
|||
- name: Query assertions
|
||||
assert:
|
||||
that:
|
||||
- query_static_binding.changed == false
|
||||
- query_static_binding is not changed
|
||||
- query_static_binding.current != []
|
||||
- '"class/fvRsPathAtt.json" in query_static_binding.url'
|
||||
- query_all.changed == false
|
||||
- '"class/fvRsPathAtt.json" in query_all.url'
|
||||
- '"uni/tn-anstest/ap-anstest/epg-anstest/rspathAtt-[topology/pod-1/paths-101/pathep-[eth1/7]]" in query_static_binding.url'
|
||||
- query_all is not changed
|
||||
- '"uni/tn-anstest.json" in query_all.url'
|
||||
|
||||
|
||||
- name: Delete provide binding - deletion works
|
||||
|
@ -175,12 +175,12 @@
|
|||
- name: Absent assertions
|
||||
assert:
|
||||
that:
|
||||
- provide_absent.changed == true
|
||||
- provide_absent is changed
|
||||
- provide_absent.previous.0.fvRsPathAtt is defined
|
||||
- provide_absent_idempotent.changed == false
|
||||
- provide_absent_idempotent is not changed
|
||||
- provide_absent_idempotent.previous == []
|
||||
- missing_param_absent.failed == true
|
||||
- missing_param_absent.failed == true
|
||||
- missing_param_absent is failed
|
||||
- missing_param_absent is failed
|
||||
- 'missing_param_absent.msg == "state is absent but all of the following are missing: ap, epg, interface, leafs, pod_id"'
|
||||
|
||||
- name: Cleanup binding
|
||||
|
|
|
@ -54,8 +54,10 @@
|
|||
- name: Verify add_switch_leaf_profile
|
||||
assert:
|
||||
that:
|
||||
- cm_add_switch_leaf_profile.changed == nm_add_switch_leaf_profile.changed == true
|
||||
- cm_add_switch_leaf_profile_again.changed == nm_add_switch_leaf_profile_again.changed == false
|
||||
- cm_add_switch_leaf_profile is changed
|
||||
- nm_add_switch_leaf_profile is changed
|
||||
- cm_add_switch_leaf_profile_again is not changed
|
||||
- nm_add_switch_leaf_profile_again is not changed
|
||||
|
||||
|
||||
# CHANGE SWITCH LEAF PROFILE
|
||||
|
@ -88,8 +90,10 @@
|
|||
- name: Verify add_switch_leaf_profile_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_switch_leaf_profile_descr.changed == nm_add_switch_leaf_profile_descr.changed == true
|
||||
- cm_add_switch_leaf_profile_descr_again.changed == nm_add_switch_leaf_profile_descr_again.changed == false
|
||||
- cm_add_switch_leaf_profile_descr is changed
|
||||
- nm_add_switch_leaf_profile_descr is changed
|
||||
- cm_add_switch_leaf_profile_descr_again is not changed
|
||||
- nm_add_switch_leaf_profile_descr_again is not changed
|
||||
|
||||
|
||||
# ADD LEAF PROFILE AGAIN
|
||||
|
@ -105,7 +109,8 @@
|
|||
- name: Verify add_switch_leaf_profile_again_no_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_switch_leaf_profile_again_no_descr.changed == nm_add_switch_leaf_profile_again_no_descr.changed == false
|
||||
- cm_add_switch_leaf_profile_again_no_descr is not changed
|
||||
- nm_add_switch_leaf_profile_again_no_descr is not changed
|
||||
|
||||
|
||||
# QUERY ALL LEAF PROFILES
|
||||
|
@ -129,7 +134,8 @@
|
|||
- name: Verify query_all_switch_leaf_profiles
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_switch_leaf_profiles.changed == nm_query_all_switch_leaf_profiles.changed == false
|
||||
- cm_query_all_switch_leaf_profiles is not changed
|
||||
- nm_query_all_switch_leaf_profiles is not changed
|
||||
# NOTE: Order of switch_leaf_profiles is not stable between calls
|
||||
#- cm_query_all_switch_leaf_profiles == nm_query_all_switch_leaf_profiles
|
||||
|
||||
|
@ -151,7 +157,8 @@
|
|||
- name: Verify query_switch_leaf_profile
|
||||
assert:
|
||||
that:
|
||||
- cm_query_switch_leaf_profile.changed == nm_query_switch_leaf_profile.changed == false
|
||||
- cm_query_switch_leaf_profile is not changed
|
||||
- nm_query_switch_leaf_profile is not changed
|
||||
- cm_query_switch_leaf_profile == nm_query_switch_leaf_profile
|
||||
|
||||
|
||||
|
@ -177,8 +184,10 @@
|
|||
- name: Verify remove_switch_leaf_profile
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_switch_leaf_profile.changed == nm_remove_switch_leaf_profile.changed == true
|
||||
- cm_remove_switch_leaf_profile_again.changed == nm_remove_switch_leaf_profile_again.changed == false
|
||||
- cm_remove_switch_leaf_profile is changed
|
||||
- nm_remove_switch_leaf_profile is changed
|
||||
- cm_remove_switch_leaf_profile_again is not changed
|
||||
- nm_remove_switch_leaf_profile_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING LEAF PROFILE
|
||||
|
@ -199,5 +208,6 @@
|
|||
- name: Verify query_non_switch_leaf_profile
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_switch_leaf_profile.changed == nm_query_non_switch_leaf_profile.changed == false
|
||||
- cm_query_non_switch_leaf_profile is not changed
|
||||
- nm_query_non_switch_leaf_profile is not changed
|
||||
- cm_query_non_switch_leaf_profile == nm_query_non_switch_leaf_profile
|
||||
|
|
|
@ -65,13 +65,13 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- sw_leaf_selec_check_mode_present.changed == true
|
||||
- sw_leaf_selec_present.changed == true
|
||||
- sw_leaf_selec_check_mode_present is changed
|
||||
- sw_leaf_selec_present is changed
|
||||
- sw_leaf_selec_present.previous == []
|
||||
- 'sw_leaf_selec_present.sent == {"infraLeafS": {"attributes": {"name": "leaf_selector_name"}, "children": [{"infraNodeBlk": {"attributes": {"from_": "1011", "name": "node_blk_name", "to_": "1011"}}},{"infraRsAccNodePGrp": {"attributes": {"tDn": "uni/infra/funcprof/accnodepgrp-None"}}}]}}'
|
||||
- sw_leaf_selec_idempotent.changed == false
|
||||
- sw_leaf_selec_idempotent is not changed
|
||||
- sw_leaf_selec_idempotent.sent == {}
|
||||
- sw_leaf_selec_update.changed == true
|
||||
- sw_leaf_selec_update is changed
|
||||
- 'sw_leaf_selec_update.sent == {"infraLeafS": {"attributes": {},"children": [{"infraRsAccNodePGrp": {"attributes": {"tDn": "uni/infra/funcprof/accnodepgrp-anstest_policygroupname"}}}]}}'
|
||||
|
||||
- name: Query Specific switch policy leaf profile selector
|
||||
|
@ -84,7 +84,7 @@
|
|||
- name: present assertions
|
||||
assert:
|
||||
that:
|
||||
- binding_query.changed == false
|
||||
- binding_query is not changed
|
||||
- binding_query.current | length >= 1
|
||||
- '"api/mo/uni/infra/nprof-sw_name_test/leaves-leaf_selector_name-typ-range.json" in binding_query.url'
|
||||
|
||||
|
@ -117,13 +117,13 @@
|
|||
- name: absent assertions
|
||||
assert:
|
||||
that:
|
||||
- sw_leaf_selec_check_mode_absent.changed == true
|
||||
- sw_leaf_selec_check_mode_absent is changed
|
||||
- sw_leaf_selec_check_mode_absent.previous != []
|
||||
- sw_leaf_selec_absent.changed == true
|
||||
- sw_leaf_selec_absent is changed
|
||||
- sw_leaf_selec_absent.previous == sw_leaf_selec_check_mode_absent.previous
|
||||
- sw_leaf_selec_absent_idempotent.changed == false
|
||||
- sw_leaf_selec_absent_idempotent is not changed
|
||||
- sw_leaf_selec_absent_idempotent.previous == []
|
||||
- sw_leaf_selec_absent_missing_param.failed == true
|
||||
- sw_leaf_selec_absent_missing_param is failed
|
||||
- 'sw_leaf_selec_absent_missing_param.msg == "state is absent but all of the following are missing: leaf"'
|
||||
|
||||
|
||||
|
|
|
@ -56,9 +56,11 @@
|
|||
- name: Verify add_vpc_prot_grp_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_vpc_prot_grp.changed == nm_add_vpc_prot_grp.changed == true
|
||||
- cm_add_vpc_prot_grp is changed
|
||||
- nm_add_vpc_prot_grp is changed
|
||||
# FIXME: Not idempotent !
|
||||
#- cm_add_vpc_prot_grp_again.changed == nm_add_vpc_prot_grp_again.changed == false
|
||||
#- cm_add_vpc_prot_grp_again is not changed
|
||||
#- nm_add_vpc_prot_grp_again is not changed
|
||||
|
||||
|
||||
# CHANGE VPC PROTECTION GROUP
|
||||
|
@ -91,13 +93,15 @@
|
|||
- name: Verify add_vpc_prot_grp_pol
|
||||
assert:
|
||||
that:
|
||||
- cm_add_vpc_prot_grp_pol.changed == nm_add_vpc_prot_grp_pol.changed == true
|
||||
- cm_add_vpc_prot_grp_pol is changed
|
||||
- nm_add_vpc_prot_grp_pol is changed
|
||||
# FIXME: Not idempotent !!
|
||||
#- cm_add_vpc_prot_grp_pol_again.changed == nm_add_vpc_prot_grp_pol_again.changed == false
|
||||
#- cm_add_vpc_prot_grp_pol_again is not changed
|
||||
#- nm_add_vpc_prot_grp_pol_again is not changed
|
||||
|
||||
|
||||
# ADD FABRIC NODE AGAIN
|
||||
- name: Add vpc protectio group again with no domain policy (check_mode)
|
||||
- name: Add vpc protection group again with no domain policy (check_mode)
|
||||
aci_switch_policy_vpc_protection_group: *aci_switch_policy_vpc_protection_group_present
|
||||
check_mode: yes
|
||||
register: cm_add_vpc_prot_grp_again_no_pol
|
||||
|
@ -110,7 +114,8 @@
|
|||
assert:
|
||||
that:
|
||||
# FIXME: Not idempoten !!
|
||||
#- cm_add_vpc_prot_grp_again_no_pol.changed == nm_add_vpc_prot_grp_again_no_pol.changed == false
|
||||
#- cm_add_vpc_prot_grp_again_no_pol is not changed
|
||||
#- nm_add_vpc_prot_grp_again_no_pol is not changed
|
||||
|
||||
|
||||
# QUERY ALL VPC PROTECTION GROUPS
|
||||
|
@ -134,7 +139,8 @@
|
|||
- name: Verify query_all_vpc_prot_grps
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_vpc_prot_grps.changed == nm_query_all_vpc_prot_grps.changed == false
|
||||
- cm_query_all_vpc_prot_grps is not changed
|
||||
- nm_query_all_vpc_prot_grps is not changed
|
||||
- cm_query_all_vpc_prot_grps == nm_query_all_vpc_prot_grps
|
||||
|
||||
|
||||
|
@ -155,7 +161,8 @@
|
|||
- name: Verify query_vpc_prot_grp
|
||||
assert:
|
||||
that:
|
||||
- cm_query_vpc_prot_grp.changed == nm_query_vpc_prot_grp.changed == false
|
||||
- cm_query_vpc_prot_grp is not changed
|
||||
- nm_query_vpc_prot_grp is not changed
|
||||
- cm_query_vpc_prot_grp == nm_query_vpc_prot_grp
|
||||
|
||||
|
||||
|
@ -181,8 +188,10 @@
|
|||
- name: Verify remove_vpc_prot_grp
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_vpc_prot_grp.changed == nm_remove_vpc_prot_grp.changed == true
|
||||
- cm_remove_vpc_prot_grp_again.changed == nm_remove_vpc_prot_grp_again.changed == false
|
||||
- cm_remove_vpc_prot_grp is changed
|
||||
- nm_remove_vpc_prot_grp is changed
|
||||
- cm_remove_vpc_prot_grp_again is not changed
|
||||
- nm_remove_vpc_prot_grp_again is not changed
|
||||
|
||||
|
||||
# QUERY NON-EXISTING LEAF PROFILE
|
||||
|
@ -202,5 +211,6 @@
|
|||
- name: Verify query_non_vpc_prot_grp
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_vpc_prot_grp.changed == nm_query_non_vpc_prot_grp.changed == false
|
||||
- cm_query_non_vpc_prot_grp is not changed
|
||||
- nm_query_non_vpc_prot_grp is not changed
|
||||
- cm_query_non_vpc_prot_grp == nm_query_non_vpc_prot_grp
|
||||
|
|
|
@ -54,7 +54,8 @@
|
|||
- name: Verify add_taboo_contract
|
||||
assert:
|
||||
that:
|
||||
- cm_add_taboo_contract.changed == nm_add_taboo_contract.changed == true
|
||||
- cm_add_taboo_contract is changed
|
||||
- nm_add_taboo_contract is changed
|
||||
- 'cm_add_taboo_contract.sent == nm_add_taboo_contract.sent == {"vzTaboo": {"attributes": {"name": "taboo_contract_test"}}}'
|
||||
- 'cm_add_taboo_contract.proposed == nm_add_taboo_contract.proposed == {"vzTaboo": {"attributes": {"name": "taboo_contract_test"}}}'
|
||||
- cm_add_taboo_contract.previous == nm_add_taboo_contract.previous == []
|
||||
|
@ -76,7 +77,8 @@
|
|||
- name: Verify add_taboo_contract_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_taboo_contract_again.changed == nm_add_taboo_contract_again.changed == false
|
||||
- cm_add_taboo_contract_again is not changed
|
||||
- nm_add_taboo_contract_again is not changed
|
||||
- cm_add_taboo_contract_again.current == nm_add_taboo_contract_again.current == nm_add_taboo_contract.current
|
||||
|
||||
|
||||
|
@ -97,7 +99,8 @@
|
|||
- name: Verify add_taboo_contract_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_taboo_contract_descr.changed == nm_add_taboo_contract_descr.changed == true
|
||||
- cm_add_taboo_contract_descr is changed
|
||||
- nm_add_taboo_contract_descr is changed
|
||||
- 'cm_add_taboo_contract_descr.sent == nm_add_taboo_contract_descr.sent == {"vzTaboo": {"attributes": {"descr": "Ansible test taboo contract"}}}'
|
||||
- 'cm_add_taboo_contract_descr.proposed == nm_add_taboo_contract_descr.proposed == {"vzTaboo": {"attributes": {"descr": "Ansible test taboo contract", "name": "taboo_contract_test"}}}'
|
||||
- cm_add_taboo_contract_descr.previous == nm_add_taboo_contract_descr.previous == cm_add_taboo_contract_descr.current == nm_add_taboo_contract.current
|
||||
|
@ -121,7 +124,8 @@
|
|||
- name: Verify add_taboo_contract_descr_again
|
||||
assert:
|
||||
that:
|
||||
- cm_add_taboo_contract_descr_again.changed == nm_add_taboo_contract_descr_again.changed == false
|
||||
- cm_add_taboo_contract_descr_again is not changed
|
||||
- nm_add_taboo_contract_descr_again is not changed
|
||||
- cm_add_taboo_contract_descr_again.current == nm_add_taboo_contract_descr_again.current == nm_add_taboo_contract_descr.current
|
||||
|
||||
|
||||
|
@ -138,7 +142,8 @@
|
|||
- name: Verify add_taboo_contract_again_no_descr
|
||||
assert:
|
||||
that:
|
||||
- cm_add_taboo_contract_again_no_descr.changed == nm_add_taboo_contract_again_no_descr.changed == false
|
||||
- cm_add_taboo_contract_again_no_descr is not changed
|
||||
- nm_add_taboo_contract_again_no_descr is not changed
|
||||
- cm_add_taboo_contract_again_no_descr.current == nm_add_taboo_contract_again_no_descr.current == nm_add_taboo_contract_descr.current
|
||||
|
||||
|
||||
|
@ -163,7 +168,8 @@
|
|||
- name: Verify query_all_taboo_contracts
|
||||
assert:
|
||||
that:
|
||||
- cm_query_all_taboo_contracts.changed == nm_query_all_taboo_contracts.changed == false
|
||||
- cm_query_all_taboo_contracts is not changed
|
||||
- nm_query_all_taboo_contracts is not changed
|
||||
- cm_query_all_taboo_contracts == nm_query_all_taboo_contracts
|
||||
- cm_query_all_taboo_contracts.current|length >= 1
|
||||
|
||||
|
@ -187,7 +193,8 @@
|
|||
- name: Verify query_taboo_contract
|
||||
assert:
|
||||
that:
|
||||
- cm_query_taboo_contract.changed == nm_query_taboo_contract.changed == false
|
||||
- cm_query_taboo_contract is not changed
|
||||
- nm_query_taboo_contract is not changed
|
||||
- cm_query_taboo_contract == nm_query_taboo_contract
|
||||
- nm_query_taboo_contract.current.0.vzTaboo.attributes.descr == 'Ansible test taboo contract'
|
||||
- nm_query_taboo_contract.current.0.vzTaboo.attributes.dn == 'uni/tn-ansible_test/taboo-taboo_contract_test'
|
||||
|
@ -207,7 +214,8 @@
|
|||
- name: Verify remove_taboo_contract
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_taboo_contract.changed == nm_remove_taboo_contract.changed == true
|
||||
- cm_remove_taboo_contract is changed
|
||||
- nm_remove_taboo_contract is changed
|
||||
- 'cm_remove_taboo_contract.current == cm_remove_taboo_contract.previous == nm_remove_taboo_contract.previous == [{"vzTaboo": {"attributes": {"descr": "Ansible test taboo contract", "dn": "uni/tn-ansible_test/taboo-taboo_contract_test", "name": "taboo_contract_test", "nameAlias": "", "ownerKey": "", "ownerTag": ""}}}]'
|
||||
- nm_remove_taboo_contract.current == []
|
||||
|
||||
|
@ -223,7 +231,8 @@
|
|||
- name: Verify remove_taboo_contract_again
|
||||
assert:
|
||||
that:
|
||||
- cm_remove_taboo_contract_again.changed == nm_remove_taboo_contract_again.changed == false
|
||||
- cm_remove_taboo_contract_again is not changed
|
||||
- nm_remove_taboo_contract_again is not changed
|
||||
- cm_remove_taboo_contract_again.proposed == nm_remove_taboo_contract_again.proposed == {}
|
||||
- cm_remove_taboo_contract_again.sent == nm_remove_taboo_contract_again.sent == {}
|
||||
- cm_remove_taboo_contract_again.previous == nm_remove_taboo_contract_again.previous == []
|
||||
|
@ -250,7 +259,8 @@
|
|||
- name: Verify query_non_taboo_contract
|
||||
assert:
|
||||
that:
|
||||
- cm_query_non_taboo_contract.changed == nm_query_non_taboo_contract.changed == false
|
||||
- cm_query_non_taboo_contract is not changed
|
||||
- nm_query_non_taboo_contract is not changed
|
||||
- cm_remove_taboo_contract_again.previous == nm_remove_taboo_contract_again.previous == []
|
||||
- cm_remove_taboo_contract_again.current == nm_remove_taboo_contract_again.current == []
|
||||
|
||||
|
@ -272,5 +282,5 @@
|
|||
- name: Verify error_on_missing_required_param
|
||||
assert:
|
||||
that:
|
||||
- error_on_missing_required_param.failed == true
|
||||
- error_on_missing_required_param is failed
|
||||
- 'error_on_missing_required_param.msg == "state is present but all of the following are missing: tenant, taboo_contract"'
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue