1212
1313# set -x
1414# set +x
15- OPTSPEC=" :hd:t:u:w:"
15+ OPTSPEC=" :hd:t:u:w:I "
1616
1717show_help () {
1818cat << EOF
@@ -22,11 +22,14 @@ Script to import dashboards into Grafana
2222 -w Required. Grafana Password
2323 -d Required. Root path containing JSON dashboard files you want imported.
2424 -t Required. The full URL of the target host
25+ -I If set will default to http instead of https
2526
2627 -h Display this help and exit.
2728EOF
2829}
2930
31+ PROTOCOL=" https"
32+
3033# ##### Check script invocation options ######
3134while getopts " $OPTSPEC " optchar; do
3235 case " $optchar " in
@@ -42,6 +45,8 @@ while getopts "$OPTSPEC" optchar; do
4245 GRAFANA_USER=" $OPTARG " ;;
4346 w)
4447 GRAFANA_PASSWORD=" $OPTARG " ;;
48+ I)
49+ PROTOCOL=" http" ;;
4550 \? )
4651 echo " Invalid option: -$OPTARG " >&2
4752 exit 1
@@ -110,11 +115,13 @@ function log_title() {
110115# ## API KEY GENERATION
111116
112117KEYNAME=$( head /dev/urandom | LC_ALL=C tr -dc A-Za-z0-9 | head -c 13 | cut -c -7)
113- KEYLENGTH=70
114- GENERATE_POST_DATA=" {\" name\" : \" ${KEYNAME} \" , \" role\" : \" Admin\" , \" secondsToLive\" : 3600 }"
118+ KEYLENGTH=30
119+ CREATE_SERVICE_ACCOUNT_DATA=" {\" name\" : \" ${KEYNAME} \" , \" role\" : \" Admin\" , \" isDisabled\" : false }"
120+ CREATE_TOKEN_DATA=" {\" name\" : \" ${KEYNAME} \" , \" secondsToLive\" : 3600 }"
115121
116122if [ -n " $GRAFANA_USER " ] || [ -n " $GRAFANA_PASSWORD " ] || [ -n " $TARGET_HOST " ]; then
117- KEY=$( curl -X POST -H " Content-Type: application/json" -d " ${GENERATE_POST_DATA} " http://${GRAFANA_USER} :${GRAFANA_PASSWORD} @${TARGET_HOST} /api/auth/keys | jq -r ' .key' )
123+ ID=$( curl -X POST -H " Content-Type: application/json" -d " ${CREATE_SERVICE_ACCOUNT_DATA} " -k $PROTOCOL ://${GRAFANA_USER} :${GRAFANA_PASSWORD} @${TARGET_HOST} /api/serviceaccounts | jq -r ' .id' )
124+ KEY=$( curl -X POST -H " Content-Type: application/json" -d " ${CREATE_TOKEN_DATA} " -k $PROTOCOL ://${GRAFANA_USER} :${GRAFANA_PASSWORD} @${TARGET_HOST} /api/serviceaccounts/${ID} /tokens | jq -r ' .key' )
118125 if [ ${# KEY} -ge $KEYLENGTH ]; then
119126 log_title " ---- API Key Generated successfully, correct character number generated in API Key, we're going into the next step -----"
120127 else
@@ -149,15 +156,20 @@ NUMSUCCESS=0
149156NUMFAILURE=0
150157COUNTER=0
151158
159+ # create Coherence folder
160+ CREATE_FOLDER_DATA=" {\" title\" : \" Coherence\" }"
161+ FOLDER=$( curl -X POST -H " Content-Type: application/json" -d " ${CREATE_FOLDER_DATA} " -k $PROTOCOL ://${GRAFANA_USER} :${GRAFANA_PASSWORD} @${TARGET_HOST} /api/folders | jq -r ' .uid' )
162+ echo " Created Coherence folder with UID ${FOLDER} "
163+
152164for DASH_FILE in $DASH_LIST ; do
153165 COUNTER=$(( COUNTER + 1 ))
154166 echo " Import $COUNTER /$FILESTOTAL : $DASH_FILE ..."
155- echo ' { " overwrite": true, "dashboard": ' > tmp.json
167+ echo " { \" folderUid \" : \" $FOLDER \" , \" overwrite\ " : true, \ " dashboard\" : " > tmp.json
156168 cat $DASH_FILE >> tmp.json
157169 echo ' }' >> tmp.json
158- RESULT=$( cat tmp.json | jq ' .dashboard.id = null' | curl -s -X POST -H " Content-Type: application/json" -H " Authorization: Bearer $KEY " " http ://$TARGET_HOST /api/dashboards/import " -d @-)
170+ RESULT=$( cat tmp.json | jq ' .dashboard.id = null' | curl -s -k - X POST -H " Content-Type: application/json" -H " Authorization: Bearer $KEY " " $PROTOCOL ://$TARGET_HOST /api/dashboards/db " -d @- | jq -r ' .status ' )
159171 rm tmp.json
160- if [[ " $RESULT " == * " \" imported \" :true " * ]]; then
172+ if [[ " $RESULT " == " success " ]]; then
161173 log_success " $RESULT "
162174 NUMSUCCESS=$(( NUMSUCCESS + 1 ))
163175 else
168180
169181log_title " ------------ Import complete. $NUMSUCCESS dashboards were successfully imported. $NUMFAILURE dashboard imports failed.------------" ;
170182log_title " -------------------------------------------------------- FINISHED ------------------------------------------------------" ;
183+
0 commit comments