Merge "Add API(v2) to get all test case info"
[yardstick.git] / api / resources / v2 / pods.py
1 import uuid
2 import yaml
3 import logging
4
5 from oslo_serialization import jsonutils
6
7 from api import ApiResource
8 from api.database.v2.handlers import V2PodHandler
9 from api.database.v2.handlers import V2EnvironmentHandler
10 from yardstick.common import constants as consts
11 from yardstick.common.utils import result_handler
12 from yardstick.common.task_template import TaskTemplate
13
14 LOG = logging.getLogger(__name__)
15 LOG.setLevel(logging.DEBUG)
16
17
18 class V2Pods(ApiResource):
19
20     def post(self):
21         return self._dispatch_post()
22
23     def upload_pod_file(self, args):
24         try:
25             upload_file = args['file']
26         except KeyError:
27             return result_handler(consts.API_ERROR, 'file must be provided')
28
29         try:
30             environment_id = args['environment_id']
31         except KeyError:
32             return result_handler(consts.API_ERROR, 'environment_id must be provided')
33
34         try:
35             uuid.UUID(environment_id)
36         except ValueError:
37             return result_handler(consts.API_ERROR, 'invalid environment id')
38
39         LOG.info('writing pod file: %s', consts.POD_FILE)
40         upload_file.save(consts.POD_FILE)
41
42         with open(consts.POD_FILE) as f:
43             data = yaml.safe_load(TaskTemplate.render(f.read()))
44         LOG.debug('pod content is: %s', data)
45
46         LOG.info('create pod in database')
47         pod_id = str(uuid.uuid4())
48         pod_handler = V2PodHandler()
49         pod_init_data = {
50             'uuid': pod_id,
51             'environment_id': environment_id,
52             'content': jsonutils.dumps(data)
53         }
54         pod_handler.insert(pod_init_data)
55
56         LOG.info('update pod in environment')
57         environment_handler = V2EnvironmentHandler()
58         environment_handler.update_attr(environment_id, {'pod_id': pod_id})
59
60         return result_handler(consts.API_SUCCESS, {'uuid': pod_id, 'pod': data})
61
62
63 class V2Pod(ApiResource):
64
65     def get(self, pod_id):
66         try:
67             uuid.UUID(pod_id)
68         except ValueError:
69             return result_handler(consts.API_ERROR, 'invalid pod id')
70
71         pod_handler = V2PodHandler()
72         try:
73             pod = pod_handler.get_by_uuid(pod_id)
74         except ValueError:
75             return result_handler(consts.API_ERROR, 'no such pod')
76
77         content = jsonutils.loads(pod.content)
78
79         return result_handler(consts.API_SUCCESS, {'pod': content})
80
81     def delete(self, pod_id):
82         try:
83             uuid.UUID(pod_id)
84         except ValueError:
85             return result_handler(consts.API_ERROR, 'invalid pod id')
86
87         pod_handler = V2PodHandler()
88         try:
89             pod = pod_handler.get_by_uuid(pod_id)
90         except ValueError:
91             return result_handler(consts.API_ERROR, 'no such pod')
92
93         LOG.info('update pod in environment')
94         environment_handler = V2EnvironmentHandler()
95         environment_handler.update_attr(pod.environment_id, {'pod_id': None})
96
97         LOG.info('delete pod in database')
98         pod_handler.delete_by_uuid(pod_id)
99
100         return result_handler(consts.API_SUCCESS, {'pod': pod_id})