5 from oslo_serialization import jsonutils
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
14 LOG = logging.getLogger(__name__)
15 LOG.setLevel(logging.DEBUG)
18 class V2Pods(ApiResource):
21 return self._dispatch_post()
23 def upload_pod_file(self, args):
25 upload_file = args['file']
27 return result_handler(consts.API_ERROR, 'file must be provided')
30 environment_id = args['environment_id']
32 return result_handler(consts.API_ERROR, 'environment_id must be provided')
35 uuid.UUID(environment_id)
37 return result_handler(consts.API_ERROR, 'invalid environment id')
39 LOG.info('writing pod file: %s', consts.POD_FILE)
40 upload_file.save(consts.POD_FILE)
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)
46 LOG.info('create pod in database')
47 pod_id = str(uuid.uuid4())
48 pod_handler = V2PodHandler()
51 'environment_id': environment_id,
52 'content': jsonutils.dumps(data)
54 pod_handler.insert(pod_init_data)
56 LOG.info('update pod in environment')
57 environment_handler = V2EnvironmentHandler()
58 environment_handler.update_attr(environment_id, {'pod_id': pod_id})
60 return result_handler(consts.API_SUCCESS, {'uuid': pod_id, 'pod': data})
63 class V2Pod(ApiResource):
65 def get(self, pod_id):
69 return result_handler(consts.API_ERROR, 'invalid pod id')
71 pod_handler = V2PodHandler()
73 pod = pod_handler.get_by_uuid(pod_id)
75 return result_handler(consts.API_ERROR, 'no such pod')
77 content = jsonutils.loads(pod.content)
79 return result_handler(consts.API_SUCCESS, {'pod': content})
81 def delete(self, pod_id):
85 return result_handler(consts.API_ERROR, 'invalid pod id')
87 pod_handler = V2PodHandler()
89 pod = pod_handler.get_by_uuid(pod_id)
91 return result_handler(consts.API_ERROR, 'no such pod')
93 LOG.info('update pod in environment')
94 environment_handler = V2EnvironmentHandler()
95 environment_handler.update_attr(pod.environment_id, {'pod_id': None})
97 LOG.info('delete pod in database')
98 pod_handler.delete_by_uuid(pod_id)
100 return result_handler(consts.API_SUCCESS, {'pod': pod_id})