Add API to get single environment info
[yardstick.git] / api / resources / v2 / environments.py
1 import uuid
2 import logging
3
4 from oslo_serialization import jsonutils
5
6 from api import ApiResource
7 from api.database.v2.handlers import V2EnvironmentHandler
8 from yardstick.common.utils import result_handler
9 from yardstick.common.utils import change_obj_to_dict
10 from yardstick.common import constants as consts
11
12 LOG = logging.getLogger(__name__)
13 LOG.setLevel(logging.DEBUG)
14
15
16 class V2Environments(ApiResource):
17
18     def get(self):
19         environment_handler = V2EnvironmentHandler()
20         environments = [change_obj_to_dict(e) for e in environment_handler.list_all()]
21
22         for e in environments:
23             container_info = e['container_id']
24             e['container_id'] = jsonutils.loads(container_info) if container_info else {}
25
26         data = {
27             'environments': environments
28         }
29
30         return result_handler(consts.API_SUCCESS, data)
31
32     def post(self):
33         return self._dispatch_post()
34
35     def create_environment(self, args):
36         try:
37             name = args['name']
38         except KeyError:
39             return result_handler(consts.API_ERROR, 'name must be provided')
40
41         env_id = str(uuid.uuid4())
42
43         environment_handler = V2EnvironmentHandler()
44
45         env_init_data = {
46             'name': name,
47             'uuid': env_id
48         }
49         environment_handler.insert(env_init_data)
50
51         return result_handler(consts.API_SUCCESS, {'uuid': env_id})
52
53
54 class V2Environment(ApiResource):
55
56     def get(self, environment_id):
57         try:
58             uuid.UUID(environment_id)
59         except ValueError:
60             return result_handler(consts.API_ERROR, 'invalid environment id')
61
62         environment_handler = V2EnvironmentHandler()
63         try:
64             environment = environment_handler.get_by_uuid(environment_id)
65         except ValueError:
66             return result_handler(consts.API_ERROR, 'no such environment id')
67
68         environment = change_obj_to_dict(environment)
69         container_id = environment['container_id']
70         environment['container_id'] = jsonutils.loads(container_id) if container_id else {}
71         return result_handler(consts.API_SUCCESS, {'environment': environment})