from http import HTTPStatus
from time import time
from copy import copy, deepcopy
-from osm_nbi.validation import validate_input, ValidationError, ns_instantiate, ns_action, ns_scale, nsi_instantiate
+from osm_nbi.validation import validate_input, ValidationError, ns_instantiate, ns_terminate, ns_action, ns_scale,\
+ nsi_instantiate
from osm_nbi.base_topic import BaseTopic, EngineException, get_iterable, deep_get
# from descriptor_topics import DescriptorTopic
from yaml import safe_dump
"deploymentStatus": None,
"configurationStatus": None,
"vcaStatus": None,
- "nsd": nsd,
+ "nsd": {k: v for k, v in nsd.items() if k in ("vld", "_id", "id", "constituent-vnfd", "name")},
"datacenter": ns_request["vimAccountId"],
"resource-orchestrator": "osmopenmano",
"description": ns_request.get("nsDescription", ""),
ns_request["nsr_id"] = nsr_id
# Create vld
if nsd.get("vld"):
- nsr_descriptor["vld"] = []
- for nsd_vld in nsd.get("vld"):
- nsr_descriptor["vld"].append(
- {key: nsd_vld[key] for key in ("id", "vim-network-name", "vim-network-id") if key in nsd_vld})
+ nsr_descriptor["vld"] = nsd["vld"]
# Create VNFR
needed_vnfds = {}
"instantiate": ns_instantiate,
"action": ns_action,
"scale": ns_scale,
- "terminate": None,
+ "terminate": ns_terminate,
}
def __init__(self, db, fs, msg, auth):
vnfr_update[iface_text + ".{}".format(k)] = v
vnfr_update_rollback[iface_text + ".{}".format(k)] = vdur_interface.get(v)
if pdu_interface.get("ip-address"):
- if vdur_interface.get("mgmt-interface"):
+ if vdur_interface.get("mgmt-interface") or vdur_interface.get("mgmt-vnf"):
vnfr_update_rollback[vdu_text + ".ip-address"] = vdur.get("ip-address")
vnfr_update[vdu_text + ".ip-address"] = pdu_interface["ip-address"]
if vdur_interface.get("mgmt-vnf"):
vnfr_update_rollback["ip-address"] = vnfr.get("ip-address")
vnfr_update["ip-address"] = pdu_interface["ip-address"]
+ vnfr_update[vdu_text + ".ip-address"] = pdu_interface["ip-address"]
if pdu_interface.get("vim-network-name") or pdu_interface.get("vim-network-id"):
ifaces_forcing_vim_network.append({
"name": vdur_interface.get("vnf-vld-id") or vdur_interface.get("ns-vld-id"),
}
return nslcmop
+ def _get_enabled_vims(self, session):
+ """
+ Retrieve and return VIM accounts that are accessible by current user and has state ENABLE
+ :param session: current session with user information
+ """
+ db_filter = self._get_project_filter(session)
+ db_filter["_admin.operationalState"] = "ENABLED"
+ vims = self.db.get_list("vim_accounts", db_filter)
+ vimAccounts = []
+ for vim in vims:
+ vimAccounts.append(vim['_id'])
+ return vimAccounts
+
def new(self, rollback, session, indata=None, kwargs=None, headers=None, slice_object=False):
"""
Performs a new operation over a ns
try:
# Override descriptor with query string kwargs
- self._update_input_with_kwargs(indata, kwargs)
+ self._update_input_with_kwargs(indata, kwargs, yaml_format=True)
operation = indata["lcmOperationType"]
nsInstanceId = indata["nsInstanceId"]
nslcmop_desc = self._create_nslcmop(nsInstanceId, operation, indata)
_id = nslcmop_desc["_id"]
self.format_on_new(nslcmop_desc, session["project_id"], make_public=session["public"])
+ if indata.get("placement-engine"):
+ # Save valid vim accounts in lcm operation descriptor
+ nslcmop_desc['operationParams']['validVimAccounts'] = self._get_enabled_vims(session)
self.db.create("nslcmops", nslcmop_desc)
rollback.append({"topic": "nslcmops", "_id": _id})
if not slice_object: