12
12
13
13
# set -x
14
14
# set +x
15
- OPTSPEC=" :hd:t:u:w:"
15
+ OPTSPEC=" :hd:t:u:w:I "
16
16
17
17
show_help () {
18
18
cat << EOF
@@ -22,11 +22,14 @@ Script to import dashboards into Grafana
22
22
-w Required. Grafana Password
23
23
-d Required. Root path containing JSON dashboard files you want imported.
24
24
-t Required. The full URL of the target host
25
+ -I If set will default to http instead of https
25
26
26
27
-h Display this help and exit.
27
28
EOF
28
29
}
29
30
31
+ PROTOCOL=" https"
32
+
30
33
# ##### Check script invocation options ######
31
34
while getopts " $OPTSPEC " optchar; do
32
35
case " $optchar " in
@@ -42,6 +45,8 @@ while getopts "$OPTSPEC" optchar; do
42
45
GRAFANA_USER=" $OPTARG " ;;
43
46
w)
44
47
GRAFANA_PASSWORD=" $OPTARG " ;;
48
+ I)
49
+ PROTOCOL=" http" ;;
45
50
\? )
46
51
echo " Invalid option: -$OPTARG " >&2
47
52
exit 1
@@ -110,11 +115,13 @@ function log_title() {
110
115
# ## API KEY GENERATION
111
116
112
117
KEYNAME=$( 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 }"
115
121
116
122
if [ -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' )
118
125
if [ ${# KEY} -ge $KEYLENGTH ]; then
119
126
log_title " ---- API Key Generated successfully, correct character number generated in API Key, we're going into the next step -----"
120
127
else
@@ -149,15 +156,20 @@ NUMSUCCESS=0
149
156
NUMFAILURE=0
150
157
COUNTER=0
151
158
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
+
152
164
for DASH_FILE in $DASH_LIST ; do
153
165
COUNTER=$(( COUNTER + 1 ))
154
166
echo " Import $COUNTER /$FILESTOTAL : $DASH_FILE ..."
155
- echo ' { " overwrite": true, "dashboard": ' > tmp.json
167
+ echo " { \" folderUid \" : \" $FOLDER \" , \" overwrite\ " : true, \ " dashboard\" : " > tmp.json
156
168
cat $DASH_FILE >> tmp.json
157
169
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 ' )
159
171
rm tmp.json
160
- if [[ " $RESULT " == * " \" imported \" :true " * ]]; then
172
+ if [[ " $RESULT " == " success " ]]; then
161
173
log_success " $RESULT "
162
174
NUMSUCCESS=$(( NUMSUCCESS + 1 ))
163
175
else
168
180
169
181
log_title " ------------ Import complete. $NUMSUCCESS dashboards were successfully imported. $NUMFAILURE dashboard imports failed.------------" ;
170
182
log_title " -------------------------------------------------------- FINISHED ------------------------------------------------------" ;
183
+
0 commit comments