Fix Bug 934. OSM CLI crashes for listing operations with insufficient permissions
[osm/osmclient.git] / osmclient / sol005 / ns.py
index 12c5416..c8e2a77 100644 (file)
@@ -22,6 +22,7 @@ from osmclient.common import utils
 from osmclient.common import wait as WaitForStatus
 from osmclient.common.exceptions import ClientException
 from osmclient.common.exceptions import NotFound
 from osmclient.common import wait as WaitForStatus
 from osmclient.common.exceptions import ClientException
 from osmclient.common.exceptions import NotFound
+from osmclient.common.exceptions import OsmHttpException
 import yaml
 import json
 import logging
 import yaml
 import json
 import logging
@@ -61,9 +62,9 @@ class Ns(object):
         filter_string = ''
         if filter:
             filter_string = '?{}'.format(filter)
         filter_string = ''
         if filter:
             filter_string = '?{}'.format(filter)
-        resp = self._http.get_cmd('{}{}'.format(self._apiBase,filter_string))
+        _, resp = self._http.get2_cmd('{}{}'.format(self._apiBase,filter_string))
         if resp:
         if resp:
-            return resp
+            return json.loads(resp)
         return list()
 
     def get(self, name):
         return list()
 
     def get(self, name):
@@ -90,11 +91,11 @@ class Ns(object):
                 if name == ns['name']:
                     ns_id = ns['_id']
                     break
                 if name == ns['name']:
                     ns_id = ns['_id']
                     break
-        resp = self._http.get_cmd('{}/{}'.format(self._apiBase, ns_id))
+        _, resp = self._http.get2_cmd('{}/{}'.format(self._apiBase, ns_id))
         #resp = self._http.get_cmd('{}/{}/nsd_content'.format(self._apiBase, ns_id))
         #print(yaml.safe_dump(resp))
         if resp:
         #resp = self._http.get_cmd('{}/{}/nsd_content'.format(self._apiBase, ns_id))
         #print(yaml.safe_dump(resp))
         if resp:
-            return resp
+            return json.loads(resp)
         raise NotFound("ns {} not found".format(name))
 
     def delete(self, name, force=False, wait=False):
         raise NotFound("ns {} not found".format(name))
 
     def delete(self, name, force=False, wait=False):
@@ -123,7 +124,7 @@ class Ns(object):
                     msg = json.loads(resp)
                 except ValueError:
                     msg = resp
                     msg = json.loads(resp)
                 except ValueError:
                     msg = resp
-            raise ClientException("failed to delete ns {} - {}".format(name, msg))
+            raise OsmHttpException("failed to delete ns {} - {}".format(name, msg))
 
     def create(self, nsd_name, nsr_name, account, config=None,
                ssh_keys=None, description='default description',
 
     def create(self, nsd_name, nsr_name, account, config=None,
                ssh_keys=None, description='default description',
@@ -226,33 +227,33 @@ class Ns(object):
                           for (key,val) in list(headers.items())]
             self._http.set_http_header(http_header)
             http_code, resp = self._http.post_cmd(endpoint=self._apiBase,
                           for (key,val) in list(headers.items())]
             self._http.set_http_header(http_header)
             http_code, resp = self._http.post_cmd(endpoint=self._apiBase,
-                                       postfields_dict=ns)
+                                   postfields_dict=ns)
             # print('HTTP CODE: {}'.format(http_code))
             # print('RESP: {}'.format(resp))
             # print('HTTP CODE: {}'.format(http_code))
             # print('RESP: {}'.format(resp))
-            if http_code in (200, 201, 202, 204):
-                if resp:
-                    resp = json.loads(resp)
-                if not resp or 'id' not in resp:
-                    raise ClientException('unexpected response from server - {} '.format(
+            #if http_code in (200, 201, 202, 204):
+            if resp:
+                resp = json.loads(resp)
+            if not resp or 'id' not in resp:
+                raise ClientException('unexpected response from server - {} '.format(
                                       resp))
                                       resp))
-                if wait:
-                    # Wait for status for NS instance creation
-                    self._wait(resp.get('nslcmop_id'))
-                return resp['id']
-            else:
-                msg = ""
-                if resp:
-                    try:
-                        msg = json.loads(resp)
-                    except ValueError:
-                        msg = resp
-                raise ClientException(msg)
+            if wait:
+                # Wait for status for NS instance creation
+                self._wait(resp.get('nslcmop_id'))
+            return resp['id']
+            #else:
+            #    msg = ""
+            #    if resp:
+            #        try:
+            #            msg = json.loads(resp)
+            #        except ValueError:
+            #            msg = resp
+            #    raise ClientException(msg)
         except ClientException as exc:
             message="failed to create ns: {} nsd: {}\nerror:\n{}".format(
                     nsr_name,
                     nsd_name,
                     str(exc))
         except ClientException as exc:
             message="failed to create ns: {} nsd: {}\nerror:\n{}".format(
                     nsr_name,
                     nsd_name,
                     str(exc))
-            raise ClientException(message)
+            raise OsmHttpException(message)
 
     def list_op(self, name, filter=None):
         """Returns the list of operations of a NS
 
     def list_op(self, name, filter=None):
         """Returns the list of operations of a NS
@@ -265,32 +266,32 @@ class Ns(object):
                                       self._apiVersion, self._apiResource)
             filter_string = ''
             if filter:
                                       self._apiVersion, self._apiResource)
             filter_string = ''
             if filter:
-                filter_string = '&{}'.format(filter)
+                 filter_string = '&{}'.format(filter)
             http_code, resp = self._http.get2_cmd('{}?nsInstanceId={}'.format(
                                                        self._apiBase, ns['_id'],
                                                        filter_string) )
             #print('HTTP CODE: {}'.format(http_code))
             #print('RESP: {}'.format(resp))
             http_code, resp = self._http.get2_cmd('{}?nsInstanceId={}'.format(
                                                        self._apiBase, ns['_id'],
                                                        filter_string) )
             #print('HTTP CODE: {}'.format(http_code))
             #print('RESP: {}'.format(resp))
-            if http_code == 200:
-                if resp:
-                    resp = json.loads(resp)
-                    return resp
-                else:
-                    raise ClientException('unexpected response from server')
+            #if http_code == 200:
+            if resp:
+                resp = json.loads(resp)
+                return resp
             else:
             else:
-                msg = ""
-                if resp:
-                    try:
-                        resp = json.loads(resp)
-                        msg = resp['detail']
-                    except ValueError:
-                        msg = resp
-                raise ClientException(msg)
+                raise ClientException('unexpected response from server')
+            #else:
+            #    msg = ""
+            #    if resp:
+            #        try:
+            #            resp = json.loads(resp)
+            #            msg = resp['detail']
+            #        except ValueError:
+            #            msg = resp
+            #    raise ClientException(msg)
         except ClientException as exc:
             message="failed to get operation list of NS {}:\nerror:\n{}".format(
                     name,
                     str(exc))
         except ClientException as exc:
             message="failed to get operation list of NS {}:\nerror:\n{}".format(
                     name,
                     str(exc))
-            raise ClientException(message)
+            raise OsmHttpException(message)
 
     def get_op(self, operationId):
         """Returns the status of an operation
 
     def get_op(self, operationId):
         """Returns the status of an operation
@@ -304,26 +305,26 @@ class Ns(object):
             http_code, resp = self._http.get2_cmd('{}/{}'.format(self._apiBase, operationId))
             #print('HTTP CODE: {}'.format(http_code))
             #print('RESP: {}'.format(resp))
             http_code, resp = self._http.get2_cmd('{}/{}'.format(self._apiBase, operationId))
             #print('HTTP CODE: {}'.format(http_code))
             #print('RESP: {}'.format(resp))
-            if http_code == 200:
-                if resp:
-                    resp = json.loads(resp)
-                    return resp
-                else:
-                    raise ClientException('unexpected response from server')
+            #if http_code == 200:
+            if resp:
+                resp = json.loads(resp)
+                return resp
             else:
             else:
-                msg = ""
-                if resp:
-                    try:
-                        resp = json.loads(resp)
-                        msg = resp['detail']
-                    except ValueError:
-                        msg = resp
-                raise ClientException(msg)
+                raise ClientException('unexpected response from server')
+            #else:
+            #    msg = ""
+            #    if resp:
+            #        try:
+            #            resp = json.loads(resp)
+            #            msg = resp['detail']
+            #        except ValueError:
+            #            msg = resp
+            #    raise ClientException(msg)
         except ClientException as exc:
             message="failed to get status of operation {}:\nerror:\n{}".format(
                     operationId,
                     str(exc))
         except ClientException as exc:
             message="failed to get status of operation {}:\nerror:\n{}".format(
                     operationId,
                     str(exc))
-            raise ClientException(message)
+            raise OsmHttpException(message)
 
     def exec_op(self, name, op_name, op_data=None, wait=False, ):
         """Executes an operation on a NS
 
     def exec_op(self, name, op_name, op_data=None, wait=False, ):
         """Executes an operation on a NS
@@ -341,30 +342,30 @@ class Ns(object):
             http_code, resp = self._http.post_cmd(endpoint=endpoint, postfields_dict=op_data)
             #print('HTTP CODE: {}'.format(http_code))
             #print('RESP: {}'.format(resp))
             http_code, resp = self._http.post_cmd(endpoint=endpoint, postfields_dict=op_data)
             #print('HTTP CODE: {}'.format(http_code))
             #print('RESP: {}'.format(resp))
-            if http_code in (200, 201, 202, 204):
-                if resp:
-                    resp = json.loads(resp)
-                if not resp or 'id' not in resp:
-                    raise ClientException('unexpected response from server - {}'.format(
-                                      resp))
-                if wait:
-                    # Wait for status for NS instance action
-                    # For the 'action' operation, 'id' is used
-                    self._wait(resp.get('id'))
-                return resp['id']
-            else:
-                msg = ""
-                if resp:
-                    try:
-                        msg = json.loads(resp)
-                    except ValueError:
-                        msg = resp
-                raise ClientException(msg)
+            #if http_code in (200, 201, 202, 204):
+            if resp:
+                resp = json.loads(resp)
+            if not resp or 'id' not in resp:
+                raise ClientException('unexpected response from server - {}'.format(
+                                  resp))
+            if wait:
+                # Wait for status for NS instance action
+                # For the 'action' operation, 'id' is used
+                self._wait(resp.get('id'))
+            return resp['id']
+            #else:
+            #    msg = ""
+            #    if resp:
+            #        try:
+            #            msg = json.loads(resp)
+            #        except ValueError:
+            #            msg = resp
+            #    raise ClientException(msg)
         except ClientException as exc:
             message="failed to exec operation {}:\nerror:\n{}".format(
                     name,
                     str(exc))
         except ClientException as exc:
             message="failed to exec operation {}:\nerror:\n{}".format(
                     name,
                     str(exc))
-            raise ClientException(message)
+            raise OsmHttpException(message)
 
     def scale_vnf(self, ns_name, vnf_name, scaling_group, scale_in, scale_out, wait=False):
         """Scales a VNF by adding/removing VDUs
 
     def scale_vnf(self, ns_name, vnf_name, scaling_group, scale_in, scale_out, wait=False):
         """Scales a VNF by adding/removing VDUs
@@ -396,28 +397,28 @@ class Ns(object):
         data = {}
         data["create_alarm_request"] = {}
         data["create_alarm_request"]["alarm_create_request"] = alarm
         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)
+        #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))
             #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)
+            #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("")
 
     def delete_alarm(self, name):
         self._logger.debug("")
@@ -426,56 +427,56 @@ class Ns(object):
         data["delete_alarm_request"] = {}
         data["delete_alarm_request"]["alarm_delete_request"] = {}
         data["delete_alarm_request"]["alarm_delete_request"]["alarm_uuid"] = name
         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)
+        #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))
             #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)
+            #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
 
     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)
+        #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))
             #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)
+            #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("")
 
     def get_field(self, ns_name, field):
         self._logger.debug("")