AMBARI + как установить значение в json REST API - PullRequest
0 голосов
/ 25 февраля 2020

в следующем примере API будет stop служба kafka в ambari

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

есть идеи, как установить значение kafka в синтаксисе json?

1 Ответ

0 голосов
/ 25 февраля 2020

Переменные не подставляются, когда для строк используются литералы типа одинарных кавычек, поэтому вам нужно разбить строку на части, чтобы можно было вставить некоторые значения в результирующую строку.

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"}

...