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
"name-ref": ns_request["nsName"],
"short-name": ns_request["nsName"],
"admin-status": "ENABLED",
+ "nsState": "NOT_INSTANTIATED",
+ "currentOperation": "IDLE",
+ "currentOperationID": None,
+ "errorDescription": None,
+ "errorDetail": None,
+ "deploymentStatus": None,
+ "configurationStatus": None,
+ "vcaStatus": None,
"nsd": nsd,
"datacenter": ns_request["vimAccountId"],
"resource-orchestrator": "osmopenmano",
"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"),
"id": _id,
"_id": _id,
"operationState": "PROCESSING", # COMPLETED,PARTIALLY_COMPLETED,FAILED_TEMP,FAILED,ROLLING_BACK,ROLLED_BACK
+ "queuePosition": None,
+ "stage": None,
+ "errorMessage": None,
+ "detailedStatus": None,
"statusEnteredTime": now,
"nsInstanceId": nsr_id,
"lcmOperationType": operation,
}
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: