Details
-
Bug
-
Status: Resolved
-
Blocker
-
Resolution: Fixed
-
1.7.0, 2.6.2, 2.7.0, 2.7.3
Description
Ambari responds with a Content-Type:text/plain when the content is actually JSON.
And the API only accepts (PUT/POST) of JSON data with "Content-Type:text/plain", but fails with the correct "Content-Type:application/json".
This breaks most HTTP/Restful clients, including the Knox UI proxy.
Here is a GET showing JSON content with the wrong "Content-Type" (with some headers redacted):
$ curl -i http://localhost:8080/api/v1/clusters HTTP/1.1 200 OK Content-Type: text/plain { "href" : "http://localhost:8080/api/v1/clusters", "items" : [ { "href" : "http://localhost:8080/api/v1/clusters/clustername", "Clusters" : { "cluster_name" : "clustername", "version" : "HDP-2.4" } } ] }
Attempt to send JSON with Content-Type:application/json fails and it although it responds with JSON data, it says its "text/plain".
$ curl -v -u admin\ -H "Content-Type: application/json" -H x-requested-by:useless \ http://localhost:8080/api/v1/stacks/HDP/versions/2.4/recommendations -d @temp.json < HTTP/1.1 500 Server Error < Content-Type: text/plain; charset=ISO-8859-1 { "status": 500, "message": "Server Error" }
It accepts JSON with Content-Type:text/plain:
$ curl -v -u admin\ -H "Content-Type: test/plain" -H x-requested-by:useless \ http://localhost:8080/api/v1/stacks/HDP/versions/2.4/recommendations -d @temp.json > POST /api/v1/stacks/HDP/versions/2.4/recommendations HTTP/1.1 > Content-Type: test/plain < HTTP/1.1 200 OK < Content-Type: text/plain { "resources" : [ { "href" : "http://localhost:8080/api/v1/stacks/HDP/versions/2.4/recommendations/8", ... snipped the rest of the JSON since it's not needed ...
This is the file that was sent:
$ cat temp.json { "recommend" : "configurations", "services" : [ "AMBARI_METRICS","HDFS","HIVE","MAPREDUCE2","PIG","TEZ","YARN","ZOOKEEPER" ], "hosts" : [ "ip-10-0-1-159.ec2.internal","ip-10-0-1-31.ec2.internal","ip-10-0-1-32.ec2.internal","ip-10-0-1-33.ec2.internal" ] }