for vdu_index, vdu in enumerate(get_iterable(vnfd, 'vdu')):
if vdu["id"] == vdu_id:
initial_config_primitive_list = vdu['vdu-configuration'].get(
- 'initial-config-primitive', ())
- break
+ 'initial-config-primitive', [])
+ break
else:
raise LcmException("Not found vdu_id={} at vnfd:vdu".format(vdu_id))
vdur = db_vnfrs[vnf_index]["vdur"][vdu_index]
add_params["rw_mgmt_ip"] = vdur["ip-address"]
else:
add_params["rw_mgmt_ip"] = db_vnfrs[vnf_index]["ip-address"]
- initial_config_primitive_list = vnfd["vnf-configuration"].get('initial-config-primitive', ())
+ initial_config_primitive_list = vnfd["vnf-configuration"].get('initial-config-primitive', [])
else:
if db_nsr.get("additionalParamsForNs"):
add_params = db_nsr["additionalParamsForNs"].copy()
if isinstance(v, str) and v.startswith("!!yaml "):
add_params[k] = yaml.safe_load(v[7:])
add_params["rw_mgmt_ip"] = None
+ initial_config_primitive_list = nsd["ns-configuration"].get('initial-config-primitive', [])
# add primitive verify-ssh-credentials to the list after config only when is a vnf or vdu charm
initial_config_primitive_list = initial_config_primitive_list.copy()
if initial_config_primitive_list and vnf_index:
- initial_config_primitive_list.insert(1, {"name": "verify-ssh-credentials", "paramter": []})
+ initial_config_primitive_list.insert(1, {"name": "verify-ssh-credentials", "parameter": []})
for initial_config_primitive in initial_config_primitive_list:
+ primitive_params_ = self._map_primitive_params(initial_config_primitive, {}, add_params)
+ self.logger.debug(logging_text + step + " primitive '{}' params '{}'"
+ .format(initial_config_primitive["name"], primitive_params_))
primitive_result, primitive_detail = await self._ns_execute_primitive(
db_nsr["_admin"]["deployed"], vnf_index, vdu_id, vdu_name, vdu_count_index,
initial_config_primitive["name"],
- self._map_primitive_params(initial_config_primitive, {}, add_params))
+ primitive_params_,
+ retries=10 if initial_config_primitive["name"] == "verify-ssh-credentials" else 0,
+ retries_interval=30)
if primitive_result != "COMPLETED":
- raise LcmException("charm error executing primitive {} for member_vnf_index={} vdu_id={}: '{}'"
+ raise LcmException("charm error executing primitive {} for member_vnf_index={} vdu_id={}: '{}'"
.format(initial_config_primitive["name"], vca_deployed["member-vnf-index"],
vca_deployed["vdu_id"], primitive_detail))
# waiting all charms are ok
configuration_failed = False
if number_to_configure:
+ step = "Waiting all charms are active"
old_status = "configuring: init: {}".format(number_to_configure)
db_nsr_update["config-status"] = old_status
db_nsr_update["detailed-status"] = old_status
return calculated_params
async def _ns_execute_primitive(self, db_deployed, member_vnf_index, vdu_id, vdu_name, vdu_count_index,
- primitive, primitive_params):
+ primitive, primitive_params, retries=0, retries_interval=30):
start_primitive_time = time()
try:
for vca_deployed in db_deployed["VCA"]:
await self.n2vc.login()
if primitive == "config":
primitive_params = {"params": primitive_params}
- primitive_id = await self.n2vc.ExecutePrimitive(
- model_name,
- application_name,
- primitive,
- callback,
- *callback_args,
- **primitive_params
- )
- while time() - start_primitive_time < self.timeout_primitive:
- primitive_result_ = await self.n2vc.GetPrimitiveStatus(model_name, primitive_id)
- if primitive_result_ in ("completed", "failed"):
- primitive_result = "COMPLETED" if primitive_result_ == "completed" else "FAILED"
- detailed_result = await self.n2vc.GetPrimitiveOutput(model_name, primitive_id)
- break
- elif primitive_result_ is None and primitive == "config":
- primitive_result = "COMPLETED"
- detailed_result = None
+ while retries >= 0:
+ primitive_id = await self.n2vc.ExecutePrimitive(
+ model_name,
+ application_name,
+ primitive,
+ callback,
+ *callback_args,
+ **primitive_params
+ )
+ while time() - start_primitive_time < self.timeout_primitive:
+ primitive_result_ = await self.n2vc.GetPrimitiveStatus(model_name, primitive_id)
+ if primitive_result_ in ("completed", "failed"):
+ primitive_result = "COMPLETED" if primitive_result_ == "completed" else "FAILED"
+ detailed_result = await self.n2vc.GetPrimitiveOutput(model_name, primitive_id)
+ break
+ elif primitive_result_ is None and primitive == "config":
+ primitive_result = "COMPLETED"
+ detailed_result = None
+ break
+ else: # ("running", "pending", None):
+ pass
+ await asyncio.sleep(5)
+ else:
+ raise LcmException("timeout after {} seconds".format(self.timeout_primitive))
+ if primitive_result == "COMPLETED":
break
- else: # ("running", "pending", None):
- pass
- await asyncio.sleep(5)
- else:
- raise LcmException("timeout after {} seconds".format(self.timeout_primitive))
+ retries -= 1
+ if retries >= 0:
+ await asyncio.sleep(retries_interval)
+
return primitive_result, detailed_result
except (N2VCPrimitiveExecutionFailed, LcmException) as e:
return "FAILED", str(e)
raise LcmException("Timeout waiting related tasks to be completed")
step = "Getting nslcmop from database"
- scale_process = "RO"
self.logger.debug(step + " after having waited for previous tasks to be completed")
db_nslcmop = self.db.get_one("nslcmops", {"_id": nslcmop_id})
step = "Getting nsr from database"
old_operational_status = db_nsr["operational-status"]
old_config_status = db_nsr["config-status"]
step = "Parsing scaling parameters"
- self.logger.debug(step)
+ # self.logger.debug(step)
db_nsr_update["operational-status"] = "scaling"
self.update_db_2("nsrs", nsr_id, db_nsr_update)
nsr_deployed = db_nsr["_admin"].get("deployed")
if "max-instance-count" in scaling_descriptor and scaling_descriptor["max-instance-count"] is not None:
max_instance_count = int(scaling_descriptor["max-instance-count"])
- self.logger.debug("MAX_INSTANCE_COUNT is {}".format(scaling_descriptor["max-instance-count"]))
+ # self.logger.debug("MAX_INSTANCE_COUNT is {}".format(scaling_descriptor["max-instance-count"]))
if nb_scale_op >= max_instance_count:
raise LcmException("reached the limit of {} (max-instance-count) "
"scaling-out operations for the "
"scaling-group-descriptor '{}'".format(nb_scale_op, scaling_group))
- # TODO: if we have more than one vdus # then it must be fixed.to get the correct # vdu_count
nb_scale_op += 1
vdu_scaling_info["scaling_direction"] = "OUT"
vdu_scaling_info["vdu-create"] = {}
min_instance_count = 0
if "min-instance-count" in scaling_descriptor and scaling_descriptor["min-instance-count"] is not None:
min_instance_count = int(scaling_descriptor["min-instance-count"])
- if nb_scale_op <= min_instance_count:
- raise LcmException("reached the limit of {} (min-instance-count) scaling-in operations for the "
- "scaling-group-descriptor '{}'".format(nb_scale_op, scaling_group))
+ if nb_scale_op <= min_instance_count:
+ raise LcmException("reached the limit of {} (min-instance-count) scaling-in operations for the "
+ "scaling-group-descriptor '{}'".format(nb_scale_op, scaling_group))
nb_scale_op -= 1
vdu_scaling_info["scaling_direction"] = "IN"
vdu_scaling_info["vdu-delete"] = {}