X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_pla%2Fplacement%2Fmznplacement.py;h=3dcf0bc659a01167ffb4a8df6e919fefd035ba13;hb=23be619282ca9f93f3bde22b0cdbb96b7e233208;hp=cf6236a91bef83af8122ec381d0488b2198dc46d;hpb=2b0e2d72595a5e25bd8f785138416d12829fbd64;p=osm%2FPLA.git diff --git a/osm_pla/placement/mznplacement.py b/osm_pla/placement/mznplacement.py index cf6236a..3dcf0bc 100755 --- a/osm_pla/placement/mznplacement.py +++ b/osm_pla/placement/mznplacement.py @@ -18,7 +18,7 @@ import itertools import pymzn from jinja2 import Environment -from jinja2.loaders import FileSystemLoader +from jinja2.loaders import FileSystemLoader, PackageLoader, ChoiceLoader class MznPlacementConductor(object): @@ -88,7 +88,8 @@ class MznModelGenerator(object): NsPlacementData objects. Uses jinja2 as templating language for the model ''' default_j2_template = "osm_pla_dynamic_template.j2" - template_search_path = ['osm_pla/placement', '../placement', '/pla/osm_pla/placement'] + template_search_path = ['osm_pla/placement', '../placement', '/pla/osm_pla/placement', + './', '/usr/lib/python3/dist-packages/osm_pla/placement'] def __init__(self, log): ''' @@ -111,7 +112,9 @@ class MznModelGenerator(object): def _load_jinja_template(self, template_name=default_j2_template): """loads the jinja template used for model generation""" - env = Environment(loader=FileSystemLoader(MznModelGenerator.template_search_path)) + loader1 = FileSystemLoader(MznModelGenerator.template_search_path) + loader2 = PackageLoader('osm_pla', '.') + env = Environment(loader=ChoiceLoader([loader1, loader2])) return env.get_template(template_name) @@ -151,12 +154,12 @@ class NsPlacementDataFactory(object): trp_link_characteristics = [[0 if col == row else 0x7fff for col in range(num_vims)] for row in range(num_vims)] for pil in self._pil_info['pil']: if characteristics in pil.keys(): - url1 = pil['pil_endpoints'][0] - url2 = pil['pil_endpoints'][1] + ep1 = pil['pil_endpoints'][0] + ep2 = pil['pil_endpoints'][1] # only consider links between applicable vims - if url1 in self._vim_accounts_info and url2 in self._vim_accounts_info: - idx1 = self._vim_accounts_info[url1]['idx'] - idx2 = self._vim_accounts_info[url2]['idx'] + if ep1 in self._vim_accounts_info and ep2 in self._vim_accounts_info: + idx1 = self._vim_accounts_info[ep1]['idx'] + idx2 = self._vim_accounts_info[ep2]['idx'] trp_link_characteristics[idx1][idx2] = pil[characteristics] trp_link_characteristics[idx2][idx1] = pil[characteristics] @@ -170,17 +173,18 @@ class NsPlacementDataFactory(object): """ vld_desc = [] for vld in self._nsd['vld']: - if vld['mgmt-network'] is False: + if vld.get('mgmt-network', False) is False: vld_desc_entry = {} cp_refs = [ep_ref['member-vnf-index-ref'] for ep_ref in vld['vnfd-connection-point-ref']] - vld_desc_entry['cp_refs'] = cp_refs - if 'link-constraint' in vld.keys(): - for constraint in vld['link-constraint']: - if constraint['constraint-type'] == 'LATENCY': - vld_desc_entry['latency'] = constraint['value'] - elif constraint['constraint-type'] == 'JITTER': - vld_desc_entry['jitter'] = constraint['value'] - vld_desc.append(vld_desc_entry) + if len(cp_refs) == 2: + vld_desc_entry['cp_refs'] = cp_refs + if 'link-constraint' in vld.keys(): + for constraint in vld['link-constraint']: + if constraint['constraint-type'] == 'LATENCY': + vld_desc_entry['latency'] = constraint['value'] + elif constraint['constraint-type'] == 'JITTER': + vld_desc_entry['jitter'] = constraint['value'] + vld_desc.append(vld_desc_entry) # create candidates from instantiate params if self._order_constraints is not None: @@ -242,8 +246,9 @@ class NsPlacementDataFactory(object): def create_ns_placement_data(self): """populate NsPlacmentData object """ - ns_placement_data = {'vim_accounts': [vim_data['id'] for - vim_data in self._vim_accounts_info.values()], + ns_placement_data = {'vim_accounts': [vim_data['id'] for _, vim_data in sorted(self._vim_accounts_info.items(), + key=lambda item: item[1][ + 'idx'])], 'trp_link_latency': self._produce_trp_link_characteristics_data('pil_latency'), 'trp_link_jitter': self._produce_trp_link_characteristics_data('pil_jitter'), 'trp_link_price_list': self._produce_trp_link_characteristics_data('pil_price'),