)
# NS '--wait' option
- def _wait(self, id, wait_time, deleteFlag=False):
+ def _wait(self, id, wait_time, deleteFlag=False, entity="NS"):
self._logger.debug("")
# Endpoint to get operation status
apiUrlStatus = "{}{}{}".format(
if isinstance(wait_time, bool):
wait_time = WaitForStatus.TIMEOUT_NS_OPERATION
WaitForStatus.wait_for_status(
- "NS",
+ entity,
str(id),
wait_time,
apiUrlStatus,
)
headers = self._client._headers
headers["Content-Type"] = "application/yaml"
- http_header = [
- "{}: {}".format(key, val) for (key, val) in list(headers.items())
- ]
- self._http.set_http_header(http_header)
+ self._http.set_http_header(headers)
http_code, resp = self._http.post_cmd(
endpoint=self._apiBase, postfields_dict=ns
)
message = "failed to exec operation {}:\nerror:\n{}".format(name, str(exc))
raise ClientException(message)
+ def cancel_op(self, operation_id, cancel_mode, wait=False):
+ """Cancels an LCM operation"""
+ self._client.get_token()
+ self._apiResource = "/ns_lcm_op_occs"
+ self._apiBase = "{}{}{}".format(
+ self._apiName, self._apiVersion, self._apiResource
+ )
+ endpoint = "{}/{}/cancel".format(self._apiBase, operation_id)
+ op_data = {"cancelMode": cancel_mode}
+ try:
+ http_code, resp = self._http.post_cmd(
+ endpoint=endpoint, postfields_dict=op_data
+ )
+ if http_code == 202:
+ if wait:
+ self._wait(operation_id, wait, deleteFlag=True, entity="OPCANCEL")
+ else:
+ print("Cancellation in progress")
+ else:
+ msg = resp or ""
+ raise ClientException(msg)
+ except ClientException as exc:
+ message = "failed to exec operation {}:\nerror:\n{}".format(
+ operation_id, str(exc)
+ )
+ raise ClientException(message)
+
def scale_vnf(
self,
ns_name,
)
raise ClientException(message)
+ def update(self, ns_name, data, wait=False):
+ """Update NS instance.
+
+ This function calls the NBI in order to perform an update operation
+ on a Network Service instance.
+
+ Args:
+ ns_name: (str)
+ data: (dict)
+ wait: (boolean)
+
+ Returns:
+ None
+
+ """
+ self._logger.debug("")
+ self._client.get_token()
+ try:
+ op_data = {"updateType": data.pop("updateType")}
+
+ # Check update parameters availability according to update type
+ if op_data["updateType"] == "CHANGE_VNFPKG":
+ if not (
+ data["config"]["changeVnfPackageData"][0].get("vnfInstanceId")
+ and data["config"]["changeVnfPackageData"][0].get("vnfdId")
+ ):
+ raise ClientException("you must set both vnfInstanceId and vnfdId")
+
+ # Fill up op_data
+ op_data["changeVnfPackageData"] = {}
+ op_data["changeVnfPackageData"]["vnfInstanceId"] = data["config"][
+ "changeVnfPackageData"
+ ][0].get("vnfInstanceId")
+
+ op_data["changeVnfPackageData"]["vnfdId"] = data["config"][
+ "changeVnfPackageData"
+ ][0].get("vnfdId")
+
+ if data.get("timeout"):
+ op_data["timeout_ns_update"] = data["timeout"]
+
+ op_id = self.exec_op(ns_name, op_name="update", op_data=op_data, wait=wait)
+ print(str(op_id))
+
+ except ClientException as exc:
+ message = "failed to update ns {}:\nerror:\n{}".format(ns_name, str(exc))
+ raise ClientException(message)
+
def create_alarm(self, alarm):
self._logger.debug("")
self._client.get_token()
http_code, resp = self._http.get2_cmd(
"{}/{}".format(self._apiBase, uuid)
)
- if not uuid:
+ else: # if not uuid
http_code, resp = self._http.get2_cmd(
"{}/{}/{}/{}".format(self._apiBase, uuid, project_name, ns_id)
)
return nsr[field]
raise NotFound("failed to find {} in ns {}".format(field, ns_name))
+
+ def heal(
+ self,
+ ns_name,
+ heal_dict,
+ wait=False,
+ timeout=None,
+ ):
+ """Heals a NS"""
+ self._logger.debug("")
+ self._client.get_token()
+ try:
+ op_data = heal_dict
+ if timeout:
+ op_data["timeout_ns_heal"] = timeout
+ op_id = self.exec_op(ns_name, op_name="heal", op_data=op_data, wait=wait)
+ print(str(op_id))
+ except ClientException as exc:
+ message = "failed to heal ns {}:\nerror:\n{}".format(ns_name, str(exc))
+ raise ClientException(message)