From 85eb8c30a64a51690b1dba6656db68643597676f Mon Sep 17 00:00:00 2001 From: Dag Wieers Date: Mon, 4 Mar 2019 01:26:47 +0100 Subject: [PATCH] MSO: Clean up internal references (#53242) During the development of the new site modules the use of references is more common and this urged making the mechanism more simple overall. --- lib/ansible/module_utils/network/aci/mso.py | 32 +++++++++++++------ .../mso_schema_template_anp_epg_contract.py | 2 +- .../mso_schema_template_contract_filter.py | 17 +++++----- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/lib/ansible/module_utils/network/aci/mso.py b/lib/ansible/module_utils/network/aci/mso.py index 1d3f4783dcf..71dca1bf47c 100644 --- a/lib/ansible/module_utils/network/aci/mso.py +++ b/lib/ansible/module_utils/network/aci/mso.py @@ -97,7 +97,7 @@ def mso_reference_spec(): def mso_subnet_spec(): return dict( - ip=dict(type='str', required=True), + subnet=dict(type='str', required=True, aliases=['ip']), description=dict(type='str'), scope=dict(type='str', choices=['private', 'public']), shared=dict(type='bool'), @@ -393,19 +393,33 @@ class MSOModule(object): ids.append(l['id']) return ids - def contract_ref(self, contract): + def anp_ref(self, **data): + ''' Create anpRef string ''' + return '/schemas/{schema_id}/templates/{template}/anps/{anp}'.format(**data) + + def epg_ref(self, **data): + ''' Create epgRef string ''' + return '/schemas/{schema_id}/templates/{template}/anps/{anp}/epgs/{epg}'.format(**data) + + def bd_ref(self, **data): + ''' Create bdRef string ''' + return '/schemas/{schema_id}/templates/{template}/bds/{bd}'.format(**data) + + def contract_ref(self, **data): ''' Create contractRef string ''' - return '/schemas/{schema_id}/templates/{template}/contracts/{name}'.format(**contract) + # Support the contract argspec + if 'name' in data: + data['contract'] = data['name'] + return '/schemas/{schema_id}/templates/{template}/contracts/{contract}'.format(**data) - def filter_ref(self, schema_id, template, filter_name): + def filter_ref(self, **data): ''' Create a filterRef string ''' - data = dict( - schema_id=schema_id, - template=template, - filter=filter_name, - ) return '/schemas/{schema_id}/templates/{template}/filters/{filter}'.format(**data) + def vrf_ref(self, **data): + ''' Create vrfRef string ''' + return '/schemas/{schema_id}/templates/{template}/vrfs/{vrf}'.format(**data) + def make_reference(self, data, reftype, schema_id, template): ''' Create a reference from a dictionary ''' # Removes entry from payload diff --git a/lib/ansible/modules/network/aci/mso_schema_template_anp_epg_contract.py b/lib/ansible/modules/network/aci/mso_schema_template_anp_epg_contract.py index 51219629089..4ea8666c5e4 100644 --- a/lib/ansible/modules/network/aci/mso_schema_template_anp_epg_contract.py +++ b/lib/ansible/modules/network/aci/mso_schema_template_anp_epg_contract.py @@ -211,7 +211,7 @@ def main(): if contract: contracts = [(c['contractRef'], c['relationshipType']) for c in schema_obj['templates'][template_idx]['anps'][anp_idx]['epgs'][epg_idx]['contractRelationships']] - contract_ref = mso.contract_ref(contract) + contract_ref = mso.contract_ref(**contract) if (contract_ref, contract['type']) in contracts: contract_idx = contracts.index((contract_ref, contract['type'])) # FIXME: Changes based on index are DANGEROUS diff --git a/lib/ansible/modules/network/aci/mso_schema_template_contract_filter.py b/lib/ansible/modules/network/aci/mso_schema_template_contract_filter.py index 3818479cc73..ac0a4d1547f 100644 --- a/lib/ansible/modules/network/aci/mso_schema_template_contract_filter.py +++ b/lib/ansible/modules/network/aci/mso_schema_template_contract_filter.py @@ -234,7 +234,7 @@ def main(): contract_idx = contracts.index(contract) filters = [f['filterRef'] for f in schema_obj['templates'][template_idx]['contracts'][contract_idx][filter_key]] - filter_ref = mso.filter_ref(filter_schema_id, filter_template, filter_name) + filter_ref = mso.filter_ref(schema_id=filter_schema_id, template=filter_template, filter=filter_name) if filter_ref in filters: filter_idx = filters.index(filter_ref) # FIXME: Changes based on index are DANGEROUS @@ -289,13 +289,14 @@ def main(): mso.existing = mso.sent if contract_idx is None: - # COntract does not exist, so we have to create it - if contract_display_name is None: - contract_display_name = contract - if contract_filter_type is None: - contract_ftype = 'bothWay' - if contract_scope is None: - contract_scope = 'context' + if not mso.existing: + # Contract does not exist, so we have to create it + if contract_display_name is None: + contract_display_name = contract + if contract_filter_type is None: + contract_ftype = 'bothWay' + if contract_scope is None: + contract_scope = 'context' payload = { 'name': contract,