blob: 2042fd82a62c7df09516b3da93b3d45f1864c8a7 [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2020 Whitestack, LLC
# *************************************************************
#
# This file is part of OSM Monitoring module
# All Rights Reserved to Whitestack, LLC
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# For those usages not covered by the Apache License, Version 2.0 please
# contact: fbravo@whitestack.com
##
from osm_lcm.data_utils.database.vim_account import VimAccountDB
__author__ = (
"Lluis Gifre <lluis.gifre@cttc.es>, Ricard Vilalta <ricard.vilalta@cttc.es>"
)
def get_vims_to_connect(db_nsr, db_vnfrs, target_vld, logger):
vims_to_connect = set()
vld = next(
(vld for vld in db_nsr["vld"] if vld["id"] == target_vld["id"]),
None,
)
if vld is None:
return vims_to_connect # VLD not in NS, means it is an internal VLD within a single VIM
vim_ids = set()
if "vnfd-connection-point-ref" in vld:
# during planning of VNF, use "vnfd-connection-point-ref" since "vim_info" is not available in vld
# get VNFD connection points (if available)
# iterate over VNFs and retrieve VIM IDs they are planned to be deployed to
vnfd_connection_point_ref = vld["vnfd-connection-point-ref"]
for vld_member_vnf_index_ref in vnfd_connection_point_ref:
vld_member_vnf_index_ref = vld_member_vnf_index_ref["member-vnf-index-ref"]
vim_ids.add(db_vnfrs[vld_member_vnf_index_ref]["vim-account-id"])
elif "vim_info" in vld:
# after instantiation of VNF, use "vim_info" since "vnfd-connection-point-ref" is not available in vld
# get VIM info (if available)
# iterate over VIM info and retrieve VIM IDs they are deployed to
vim_info = vld["vim_info"]
for vim_data in vim_info.values():
vim_ids.add(vim_data["vim_account_id"])
else:
# TODO: analyze if this situation is possible
# unable to retrieve planned/executed mapping of VNFs to VIMs
# by now, drop a log message for future debugging
logger.warning(
" ".join(
[
"Unable to identify VIMs involved in VLD to check if WIM is required.",
"Dumping internal variables for further debugging:",
]
)
)
logger.warning("db_nsr={:s}".format(str(db_nsr)))
logger.warning("db_vnfrs={:s}".format(str(db_vnfrs)))
logger.warning("target_vld={:s}".format(str(target_vld)))
return vims_to_connect
for vim_id in vim_ids:
db_vim = VimAccountDB.get_vim_account_with_id(vim_id)
if db_vim is None:
continue
vims_to_connect.add(db_vim["name"])
return vims_to_connect