首页 > 解决方案 > AMBARI + 如何在 json REST API 中设置值

问题描述

下面的 API 示例,将stop服务kafkaambari

export service=kafka

curl -u admin:admin -i -H 'X-Requested-By: ambari' -X PUT -d '{"RequestInfo":{"context":"_PARSE_.STOP.$service","operation_level":{"level":"SERVICE","cluster_name":"$CLUSTER_NAME","service_name":"$service"}},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}' http://$HOST:8080/api/v1/clusters/$CLUSTER_NAME/services/$service 

问题在于语法 -_PARSE_.STOP.$service

我们看到实际的服务价值 -kafka未设置 - PARSE .STOP.$service

所以 ambri 看到这个名字是 - PARSE .STOP.$service 而不是PARSE .STOP.kafka

知道我们如何kafkajson语法中设置值吗?

标签: jsonbashapiambari

解决方案


当单引号类型文字用于字符串时,变量不会被替换,因此您需要将字符串分成几部分以便能够将一些值插入到结果字符串中。

export service=kafka

curl -u admin:admin -i \
-H 'X-Requested-By: ambari' \
-X PUT \
-d '{"RequestInfo":{"context":"_PARSE_.STOP.'$service'","operation_level":{"level":"SERVICE","cluster_name":"'$CLUSTER_NAME'","service_name":"$service"}},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}' \
http://$HOST:8080/api/v1/clusters/$CLUSTER_NAME/services/$service

这是一个简化的示例,可以清楚地说明:

#!/bin/bash
service=XXX

json='{"A":"$service"}'
echo "wrong JSON: $json"

json='{"A":"'$service'"}' #this string consist of 3 parts '{"A":"' + $service + '"}'
echo "good JSON: $json"

输出:

错误的 JSON:{"A":"$service"}

好的 JSON:{"A":"XXX"}


推荐阅读