From cb0e5ad7ca192fdbea93902517a608bccfa427f4 Mon Sep 17 00:00:00 2001 From: Jeremy Freudberg Date: Mon, 9 Jul 2018 11:48:30 -0400 Subject: [PATCH] Final fixup to APIv2 responses Some inconsistencies still remained. Change-Id: Ic54af5433f6498488f457d8e49dae74e684e2bd2 Story: 1745294 Task: 8392 --- ...apiv2-payload-tweaks-b73c20a35263d958.yaml | 9 +++++++ sahara/api/v2/cluster_templates.py | 16 +++++++++--- sahara/api/v2/clusters.py | 26 +++++++++++++++---- sahara/api/v2/job_templates.py | 8 +++--- sahara/api/v2/jobs.py | 22 +++++++--------- sahara/api/v2/node_group_templates.py | 15 ++++++++--- sahara/utils/api.py | 5 ++++ 7 files changed, 74 insertions(+), 27 deletions(-) create mode 100644 releasenotes/notes/apiv2-payload-tweaks-b73c20a35263d958.yaml diff --git a/releasenotes/notes/apiv2-payload-tweaks-b73c20a35263d958.yaml b/releasenotes/notes/apiv2-payload-tweaks-b73c20a35263d958.yaml new file mode 100644 index 0000000000..3bbeadc008 --- /dev/null +++ b/releasenotes/notes/apiv2-payload-tweaks-b73c20a35263d958.yaml @@ -0,0 +1,9 @@ +--- +other: + - A few responses in the experimental (but nearly-stable) APIv2 have been + tweaked. To be specific, the key `hadoop_version` has been replaced with + `plugin_version`, the key `job` has been replaced with `job_template`, the + key `job_execution` has been replaced with `job`, and the key + `oozie_job_id` has been replaced with `engine_job_id`. In fact, these + changes were all previously partially implemented, and are now completely + implemented. diff --git a/sahara/api/v2/cluster_templates.py b/sahara/api/v2/cluster_templates.py index f013e496db..fd9f7d4fd7 100644 --- a/sahara/api/v2/cluster_templates.py +++ b/sahara/api/v2/cluster_templates.py @@ -31,6 +31,8 @@ rest = u.RestV2('cluster-templates', __name__) v.validate_sorting_cluster_templates) def cluster_templates_list(): result = api.get_cluster_templates(**u.get_request_args().to_dict()) + for ct in result: + u._replace_hadoop_version_plugin_version(ct) return u.render(res=result, name='cluster_templates') @@ -43,14 +45,19 @@ def cluster_templates_create(data): # this can be removed once APIv1 is deprecated data['hadoop_version'] = data['plugin_version'] del data['plugin_version'] - return u.render(api.create_cluster_template(data).to_wrapped_dict()) + result = api.create_cluster_template(data).to_wrapped_dict() + u._replace_hadoop_version_plugin_version(result['cluster_template']) + return u.render(result) @rest.get('/cluster-templates/') @acl.enforce("data-processing:cluster-templates:get") @v.check_exists(api.get_cluster_template, 'cluster_template_id') def cluster_templates_get(cluster_template_id): - return u.to_wrapped_dict(api.get_cluster_template, cluster_template_id) + result = u.to_wrapped_dict_no_render( + api.get_cluster_template, cluster_template_id) + u._replace_hadoop_version_plugin_version(result['cluster_template']) + return u.render(result) @rest.patch('/cluster-templates/') @@ -62,8 +69,10 @@ def cluster_templates_update(cluster_template_id, data): if data.get('plugin_version', None): data['hadoop_version'] = data['plugin_version'] del data['plugin_version'] - return u.to_wrapped_dict( + result = u.to_wrapped_dict_no_render( api.update_cluster_template, cluster_template_id, data) + u._replace_hadoop_version_plugin_version(result['cluster_template']) + return u.render(result) @rest.delete('/cluster-templates/') @@ -91,6 +100,7 @@ def _cluster_template_export_helper(template): def cluster_template_export(cluster_template_id): content = u.to_wrapped_dict_no_render( api.export_cluster_template, cluster_template_id) + u._replace_hadoop_version_plugin_version(content['cluster_template']) _cluster_template_export_helper(content['cluster_template']) res = u.render(content) res.headers.add('Content-Disposition', 'attachment', diff --git a/sahara/api/v2/clusters.py b/sahara/api/v2/clusters.py index b2ae32225f..72f3855907 100644 --- a/sahara/api/v2/clusters.py +++ b/sahara/api/v2/clusters.py @@ -33,6 +33,8 @@ rest = u.RestV2('clusters', __name__) @v.validate(None, v.validate_pagination_limit) def clusters_list(): result = api.get_clusters(**u.get_request_args().to_dict()) + for c in result: + u._replace_hadoop_version_plugin_version(c) return u.render(res=result, name='clusters') @@ -46,9 +48,14 @@ def clusters_create(data): data['hadoop_version'] = data['plugin_version'] del data['plugin_version'] if data.get('count', None) is not None: - return u.render(api.create_multiple_clusters(data)) + result = api.create_multiple_clusters(data) + for c in result: + u._replace_hadoop_version_plugin_version(c['cluster']) + return u.render(result) else: - return u.render(api.create_cluster(data).to_wrapped_dict()) + result = api.create_cluster(data).to_wrapped_dict() + u._replace_hadoop_version_plugin_version(c['cluster']) + return u.render(result) @rest.put('/clusters/') @@ -56,7 +63,10 @@ def clusters_create(data): @v.check_exists(api.get_cluster, 'cluster_id') @v.validate(v_c_schema.CLUSTER_SCALING_SCHEMA_V2, v_c_s.check_cluster_scaling) def clusters_scale(cluster_id, data): - return u.to_wrapped_dict(api.scale_cluster, cluster_id, data) + result = u.to_wrapped_dict_no_render( + api.scale_cluster, cluster_id, data) + u._replace_hadoop_version_plugin_version(result['cluster']) + return u.render(result) @rest.get('/clusters/') @@ -66,7 +76,10 @@ def clusters_get(cluster_id): data = u.get_request_args() show_events = six.text_type( data.get('show_progress', 'false')).lower() == 'true' - return u.to_wrapped_dict(api.get_cluster, cluster_id, show_events) + result = u.to_wrapped_dict_no_render( + api.get_cluster, cluster_id, show_events) + u._replace_hadoop_version_plugin_version(result['cluster']) + return u.render(result) @rest.patch('/clusters/') @@ -74,7 +87,10 @@ def clusters_get(cluster_id): @v.check_exists(api.get_cluster, 'cluster_id') @v.validate(v_c_schema.CLUSTER_UPDATE_SCHEMA, v_c.check_cluster_update) def clusters_update(cluster_id, data): - return u.to_wrapped_dict(api.update_cluster, cluster_id, data) + result = u.to_wrapped_dict_no_render( + api.update_cluster, cluster_id, data) + u._replace_hadoop_version_plugin_version(result['cluster']) + return u.render(result) @rest.delete('/clusters/') diff --git a/sahara/api/v2/job_templates.py b/sahara/api/v2/job_templates.py index 01e86c05d7..c1e268eb03 100644 --- a/sahara/api/v2/job_templates.py +++ b/sahara/api/v2/job_templates.py @@ -38,14 +38,15 @@ def job_templates_list(): @acl.enforce("data-processing:job-templates:create") @v.validate(v_j_schema.JOB_SCHEMA, v_j.check_mains_libs, v_j.check_interface) def job_templates_create(data): - return u.render(api.create_job_template(data).to_wrapped_dict()) + return u.render({'job_template': api.create_job_template(data).to_dict()}) @rest.get('/job-templates/') @acl.enforce("data-processing:job-templates:get") @v.check_exists(api.get_job_templates, id='job_templates_id') def job_templates_get(job_templates_id): - return u.to_wrapped_dict(api.get_job_template, job_templates_id) + return u.render({'job_template': api.get_job_template( + job_templates_id).to_dict()}) @rest.patch('/job-templates/') @@ -53,7 +54,8 @@ def job_templates_get(job_templates_id): @v.check_exists(api.get_job_templates, id='job_templates_id') @v.validate(v_j_schema.JOB_UPDATE_SCHEMA) def job_templates_update(job_templates_id, data): - return u.to_wrapped_dict(api.update_job_template, job_templates_id, data) + return u.render({'job_template': api.update_job_template( + job_templates_id, data).to_dict()}) @rest.delete('/job-templates/') diff --git a/sahara/api/v2/jobs.py b/sahara/api/v2/jobs.py index 1ef9a9657b..3c4dcfc8cd 100644 --- a/sahara/api/v2/jobs.py +++ b/sahara/api/v2/jobs.py @@ -45,7 +45,11 @@ def jobs_list(): @acl.enforce("data-processing:jobs:execute") @v.validate(v_j_e_schema.JOB_EXEC_SCHEMA_V2, v_j_e.check_job_execution) def jobs_execute(data): - return u.render(api.execute_job(data).to_wrapped_dict()) + result = {'job': api.execute_job(data)} + dict.update(result['job'], + {'engine_job_id': result['job']['oozie_job_id']}) + dict.pop(result['job'], 'oozie_job_id') + return u.render(result) @rest.get('/jobs/') @@ -55,12 +59,8 @@ def jobs_get(job_id): data = u.get_request_args() refresh_status = six.text_type( data.get('refresh_status', 'false')).lower() == 'true' - result = u.to_wrapped_dict_no_render( - api.get_job_execution, job_id, refresh_status) - result['job_execution']['engine_job_id'] = ( - result['job_execution']['oozie_job_id'] - ) - del result['job_execution']['oozie_job_id'] + result = {'job': api.get_job_execution(job_id, refresh_status)} + result['job'].pop('oozie_job_id', force=True) return u.render(result) @@ -70,12 +70,8 @@ def jobs_get(job_id): @v.validate( v_j_e_schema.JOB_EXEC_UPDATE_SCHEMA, v_j_e.check_job_execution_update) def jobs_update(job_id, data): - result = u.to_wrapped_dict_no_render( - api.update_job_execution, job_id, data) - result['job_execution']['engine_job_id'] = ( - result['job_execution']['oozie_job_id'] - ) - del result['job_execution']['oozie_job_id'] + result = {'job': api.update_job_execution(job_id, data)} + result['job'].pop('oozie_job_id', force=True) return u.render(result) diff --git a/sahara/api/v2/node_group_templates.py b/sahara/api/v2/node_group_templates.py index d756635b38..c0b20d0b4a 100644 --- a/sahara/api/v2/node_group_templates.py +++ b/sahara/api/v2/node_group_templates.py @@ -32,6 +32,8 @@ rest = u.RestV2('node-group-templates', __name__) v.validate_sorting_node_group_templates) def node_group_templates_list(): result = api.get_node_group_templates(**u.get_request_args().to_dict()) + for ngt in result: + u._replace_hadoop_version_plugin_version(ngt) return u.render(res=result, name="node_group_templates") @@ -44,15 +46,19 @@ def node_group_templates_create(data): # this can be removed once APIv1 is deprecated data['hadoop_version'] = data['plugin_version'] del data['plugin_version'] - return u.render(api.create_node_group_template(data).to_wrapped_dict()) + result = api.create_node_group_template(data).to_wrapped_dict() + u._replace_hadoop_version_plugin_version(result['node_group_template']) + return u.render(result) @rest.get('/node-group-templates/') @acl.enforce("data-processing:node-group-templates:get") @v.check_exists(api.get_node_group_template, 'node_group_template_id') def node_group_templates_get(node_group_template_id): - return u.to_wrapped_dict( + result = u.to_wrapped_dict_no_render( api.get_node_group_template, node_group_template_id) + u._replace_hadoop_version_plugin_version(result['node_group_template']) + return u.render(result) @rest.patch('/node-group-templates/') @@ -64,8 +70,10 @@ def node_group_templates_update(node_group_template_id, data): if data.get('plugin_version', None): data['hadoop_version'] = data['plugin_version'] del data['plugin_version'] - return u.to_wrapped_dict( + result = u.to_wrapped_dict_no_render( api.update_node_group_template, node_group_template_id, data) + u._replace_hadoop_version_plugin_version(result['node_group_template']) + return u.render(result) @rest.delete('/node-group-templates/') @@ -95,6 +103,7 @@ def _node_group_template_export_helper(template): def node_group_template_export(node_group_template_id): content = u.to_wrapped_dict_no_render( api.export_node_group_template, node_group_template_id) + u._replace_hadoop_version_plugin_version(content['node_group_template']) _node_group_template_export_helper(content['node_group_template']) res = u.render(content) res.headers.add('Content-Disposition', 'attachment', diff --git a/sahara/utils/api.py b/sahara/utils/api.py index da24ee95f3..847264fceb 100644 --- a/sahara/utils/api.py +++ b/sahara/utils/api.py @@ -349,3 +349,8 @@ def to_wrapped_dict_no_render(func, id, *args, **kwargs): return not_found(e) return obj.to_wrapped_dict() + + +def _replace_hadoop_version_plugin_version(obj): + dict.update(obj, {'plugin_version': obj['hadoop_version']}) + dict.pop(obj, 'hadoop_version')