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.
This commit is contained in:
Dag Wieers 2019-03-04 01:26:47 +01:00 committed by GitHub
parent e4093fbad4
commit 85eb8c30a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 19 deletions

View file

@ -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):
''' Create contractRef string '''
return '/schemas/{schema_id}/templates/{template}/contracts/{name}'.format(**contract)
def anp_ref(self, **data):
''' Create anpRef string '''
return '/schemas/{schema_id}/templates/{template}/anps/{anp}'.format(**data)
def filter_ref(self, schema_id, template, filter_name):
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 '''
# 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, **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

View file

@ -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

View file

@ -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,