+ def scale_vnf(self, ns_name, vnf_name, scaling_group, scale_in, scale_out, wait=False, timeout=None):
+ """Scales a VNF by adding/removing VDUs
+ """
+ self._logger.debug("")
+ self._client.get_token()
+ try:
+ op_data={}
+ op_data["scaleType"] = "SCALE_VNF"
+ op_data["scaleVnfData"] = {}
+ if scale_in and not scale_out:
+ op_data["scaleVnfData"]["scaleVnfType"] = "SCALE_IN"
+ elif not scale_in and scale_out:
+ op_data["scaleVnfData"]["scaleVnfType"] = "SCALE_OUT"
+ else:
+ raise ClientException("you must set either 'scale_in' or 'scale_out'")
+ op_data["scaleVnfData"]["scaleByStepData"] = {
+ "member-vnf-index": vnf_name,
+ "scaling-group-descriptor": scaling_group,
+ }
+ if timeout:
+ op_data["timeout_ns_scale"] = timeout
+ op_id = self.exec_op(ns_name, op_name='scale', op_data=op_data, wait=wait)
+ print(str(op_id))
+ except ClientException as exc:
+ message="failed to scale vnf {} of ns {}:\nerror:\n{}".format(
+ vnf_name, ns_name, str(exc))
+ raise ClientException(message)
+
+ def create_alarm(self, alarm):
+ self._logger.debug("")
+ self._client.get_token()
+ data = {}
+ data["create_alarm_request"] = {}
+ data["create_alarm_request"]["alarm_create_request"] = alarm
+ try:
+ http_code, resp = self._http.post_cmd(endpoint='/test/message/alarm_request',
+ postfields_dict=data)
+ #print('HTTP CODE: {}'.format(http_code))
+ #print('RESP: {}'.format(resp))
+ # if http_code in (200, 201, 202, 204):
+ # resp = json.loads(resp)
+ print('Alarm created')
+ #else:
+ # msg = ""
+ # if resp:
+ # try:
+ # msg = json.loads(resp)
+ # except ValueError:
+ # msg = resp
+ # raise ClientException('error: code: {}, resp: {}'.format(
+ # http_code, msg))
+ except ClientException as exc:
+ message="failed to create alarm: alarm {}\n{}".format(
+ alarm,
+ str(exc))
+ raise ClientException(message)
+
+ def delete_alarm(self, name):
+ self._logger.debug("")
+ self._client.get_token()
+ data = {}
+ data["delete_alarm_request"] = {}
+ data["delete_alarm_request"]["alarm_delete_request"] = {}
+ data["delete_alarm_request"]["alarm_delete_request"]["alarm_uuid"] = name
+ try:
+ http_code, resp = self._http.post_cmd(endpoint='/test/message/alarm_request',
+ postfields_dict=data)
+ #print('HTTP CODE: {}'.format(http_code))
+ #print('RESP: {}'.format(resp))
+ # if http_code in (200, 201, 202, 204):
+ # resp = json.loads(resp)
+ print('Alarm deleted')
+ #else:
+ # msg = ""
+ # if resp:
+ # try:
+ # msg = json.loads(resp)
+ # except ValueError:
+ # msg = resp
+ # raise ClientException('error: code: {}, resp: {}'.format(
+ # http_code, msg))
+ except ClientException as exc:
+ message="failed to delete alarm: alarm {}\n{}".format(
+ name,
+ str(exc))
+ raise ClientException(message)
+
+ def export_metric(self, metric):
+ self._logger.debug("")
+ self._client.get_token()
+ data = {}
+ data["read_metric_data_request"] = metric
+ try:
+ http_code, resp = self._http.post_cmd(endpoint='/test/message/metric_request',
+ postfields_dict=data)
+ #print('HTTP CODE: {}'.format(http_code))
+ #print('RESP: {}'.format(resp))
+ # if http_code in (200, 201, 202, 204):
+ # resp = json.loads(resp)
+ return 'Metric exported'
+ #else:
+ # msg = ""
+ # if resp:
+ # try:
+ # msg = json.loads(resp)
+ # except ValueError:
+ # msg = resp
+ # raise ClientException('error: code: {}, resp: {}'.format(
+ # http_code, msg))
+ except ClientException as exc:
+ message="failed to export metric: metric {}\n{}".format(
+ metric,
+ str(exc))
+ raise ClientException(message)
+
+ def get_field(self, ns_name, field):
+ self._logger.debug("")
+ nsr = self.get(ns_name)
+ print(yaml.safe_dump(nsr))
+ if nsr is None:
+ raise NotFound("failed to retrieve ns {}".format(ns_name))
+
+ if field in nsr:
+ return nsr[field]
+
+ raise NotFound("failed to find {} in ns {}".format(field, ns_name))
+