|
@@ -0,0 +1,130 @@
|
|
|
|
|
+#!/usr/bin/env sh
|
|
|
|
|
+
|
|
|
|
|
+#Support OpsGenie API integration
|
|
|
|
|
+
|
|
|
|
|
+#OPSGENIE_API_KEY="" Required, opsgenie api key
|
|
|
|
|
+#OPSGENIE_REGION="" Optional, opsgenie region, can be EU or US (default: US)
|
|
|
|
|
+#OPSGENIE_PRIORITY_SUCCESS="" Optional, opsgenie priority for success (default: P5)
|
|
|
|
|
+#OPSGENIE_PRIORITY_ERROR="" Optional, opsgenie priority for error (default: P2)
|
|
|
|
|
+#OPSGENIE_PRIORITY_SKIP="" Optional, opsgenie priority for renew skipped (default: P5)
|
|
|
|
|
+
|
|
|
|
|
+_OPSGENIE_AVAIL_REGION="US,EU"
|
|
|
|
|
+_OPSGENIE_AVAIL_PRIORITIES="P1,P2,P3,P4,P5"
|
|
|
|
|
+
|
|
|
|
|
+opsgenie_send() {
|
|
|
|
|
+ _subject="$1"
|
|
|
|
|
+ _content="$2"
|
|
|
|
|
+ _status_code="$3" #0: success, 1: error, 2($RENEW_SKIP): skipped
|
|
|
|
|
+
|
|
|
|
|
+ OPSGENIE_API_KEY="${OPSGENIE_API_KEY:-$(_readaccountconf_mutable OPSGENIE_API_KEY)}"
|
|
|
|
|
+ if [ -z "$OPSGENIE_API_KEY" ]; then
|
|
|
|
|
+ OPSGENIE_API_KEY=""
|
|
|
|
|
+ _err "You didn't specify an OpsGenie API key OPSGENIE_API_KEY yet."
|
|
|
|
|
+ return 1
|
|
|
|
|
+ fi
|
|
|
|
|
+ _saveaccountconf_mutable OPSGENIE_API_KEY "$OPSGENIE_API_KEY"
|
|
|
|
|
+ export _H1="Authorization: GenieKey $OPSGENIE_API_KEY"
|
|
|
|
|
+
|
|
|
|
|
+ OPSGENIE_REGION="${OPSGENIE_REGION:-$(_readaccountconf_mutable OPSGENIE_REGION)}"
|
|
|
|
|
+ if [ -z "$OPSGENIE_REGION" ]; then
|
|
|
|
|
+ OPSGENIE_REGION="US"
|
|
|
|
|
+ _info "The OPSGENIE_REGION is not set, so use the default US as regeion."
|
|
|
|
|
+ elif ! _hasfield "$_OPSGENIE_AVAIL_REGION" "$OPSGENIE_REGION"; then
|
|
|
|
|
+ _err "The OPSGENIE_REGION \"$OPSGENIE_REGION\" is not available, should be one of $_OPSGENIE_AVAIL_REGION"
|
|
|
|
|
+ OPSGENIE_REGION=""
|
|
|
|
|
+ return 1
|
|
|
|
|
+ else
|
|
|
|
|
+ _saveaccountconf_mutable OPSGENIE_REGION "$OPSGENIE_REGION"
|
|
|
|
|
+ fi
|
|
|
|
|
+
|
|
|
|
|
+ OPSGENIE_PRIORITY_SUCCESS="${OPSGENIE_PRIORITY_SUCCESS:-$(_readaccountconf_mutable OPSGENIE_PRIORITY_SUCCESS)}"
|
|
|
|
|
+ if [ -z "$OPSGENIE_PRIORITY_SUCCESS" ]; then
|
|
|
|
|
+ OPSGENIE_PRIORITY_SUCCESS="P5"
|
|
|
|
|
+ _info "The OPSGENIE_PRIORITY_SUCCESS is not set, so use the default P5 as priority."
|
|
|
|
|
+ elif ! _hasfield "$_OPSGENIE_AVAIL_PRIORITIES" "$OPSGENIE_PRIORITY_SUCCESS"; then
|
|
|
|
|
+ _err "The OPSGENIE_PRIORITY_SUCCESS \"$OPSGENIE_PRIORITY_SUCCESS\" is not available, should be one of $_OPSGENIE_AVAIL_PRIORITIES"
|
|
|
|
|
+ OPSGENIE_PRIORITY_SUCCESS=""
|
|
|
|
|
+ return 1
|
|
|
|
|
+ else
|
|
|
|
|
+ _saveaccountconf_mutable OPSGENIE_PRIORITY_SUCCESS "$OPSGENIE_PRIORITY_SUCCESS"
|
|
|
|
|
+ fi
|
|
|
|
|
+
|
|
|
|
|
+ OPSGENIE_PRIORITY_ERROR="${OPSGENIE_PRIORITY_ERROR:-$(_readaccountconf_mutable OPSGENIE_PRIORITY_ERROR)}"
|
|
|
|
|
+ if [ -z "$OPSGENIE_PRIORITY_ERROR" ]; then
|
|
|
|
|
+ OPSGENIE_PRIORITY_ERROR="P2"
|
|
|
|
|
+ _info "The OPSGENIE_PRIORITY_ERROR is not set, so use the default P2 as priority."
|
|
|
|
|
+ elif ! _hasfield "$_OPSGENIE_AVAIL_PRIORITIES" "$OPSGENIE_PRIORITY_ERROR"; then
|
|
|
|
|
+ _err "The OPSGENIE_PRIORITY_ERROR \"$OPSGENIE_PRIORITY_ERROR\" is not available, should be one of $_OPSGENIE_AVAIL_PRIORITIES"
|
|
|
|
|
+ OPSGENIE_PRIORITY_ERROR=""
|
|
|
|
|
+ return 1
|
|
|
|
|
+ else
|
|
|
|
|
+ _saveaccountconf_mutable OPSGENIE_PRIORITY_ERROR "$OPSGENIE_PRIORITY_ERROR"
|
|
|
|
|
+ fi
|
|
|
|
|
+
|
|
|
|
|
+ OPSGENIE_PRIORITY_SKIP="${OPSGENIE_PRIORITY_SKIP:-$(_readaccountconf_mutable OPSGENIE_PRIORITY_SKIP)}"
|
|
|
|
|
+ if [ -z "$OPSGENIE_PRIORITY_SKIP" ]; then
|
|
|
|
|
+ OPSGENIE_PRIORITY_SKIP="P5"
|
|
|
|
|
+ _info "The OPSGENIE_PRIORITY_SKIP is not set, so use the default P5 as priority."
|
|
|
|
|
+ elif ! _hasfield "$_OPSGENIE_AVAIL_PRIORITIES" "$OPSGENIE_PRIORITY_SKIP"; then
|
|
|
|
|
+ _err "The OPSGENIE_PRIORITY_SKIP \"$OPSGENIE_PRIORITY_SKIP\" is not available, should be one of $_OPSGENIE_AVAIL_PRIORITIES"
|
|
|
|
|
+ OPSGENIE_PRIORITY_SKIP=""
|
|
|
|
|
+ return 1
|
|
|
|
|
+ else
|
|
|
|
|
+ _saveaccountconf_mutable OPSGENIE_PRIORITY_SKIP "$OPSGENIE_PRIORITY_SKIP"
|
|
|
|
|
+ fi
|
|
|
|
|
+
|
|
|
|
|
+ case "$OPSGENIE_REGION" in
|
|
|
|
|
+ "US")
|
|
|
|
|
+ _opsgenie_url="https://api.opsgenie.com/v2/alerts"
|
|
|
|
|
+ ;;
|
|
|
|
|
+ "EU")
|
|
|
|
|
+ _opsgenie_url="https://api.eu.opsgenie.com/v2/alerts"
|
|
|
|
|
+ ;;
|
|
|
|
|
+ *)
|
|
|
|
|
+ _err "opsgenie region error."
|
|
|
|
|
+ return 1
|
|
|
|
|
+ ;;
|
|
|
|
|
+ esac
|
|
|
|
|
+
|
|
|
|
|
+ case $_status_code in
|
|
|
|
|
+ 0)
|
|
|
|
|
+ _priority=$OPSGENIE_PRIORITY_SUCCESS
|
|
|
|
|
+ ;;
|
|
|
|
|
+ 1)
|
|
|
|
|
+ _priority=$OPSGENIE_PRIORITY_ERROR
|
|
|
|
|
+ ;;
|
|
|
|
|
+ 2)
|
|
|
|
|
+ _priority=$OPSGENIE_PRIORITY_SKIP
|
|
|
|
|
+ ;;
|
|
|
|
|
+ *)
|
|
|
|
|
+ _priority=$OPSGENIE_PRIORITY_ERROR
|
|
|
|
|
+ ;;
|
|
|
|
|
+ esac
|
|
|
|
|
+
|
|
|
|
|
+ _subject_json=$(echo "$_subject" | _json_encode)
|
|
|
|
|
+ _content_json=$(echo "$_content" | _json_encode)
|
|
|
|
|
+ _subject_underscore=$(echo "$_subject" | sed 's/ /_/g')
|
|
|
|
|
+ _alias_json=$(echo "acme.sh-$(hostname)-$_subject_underscore-$(date +%Y%m%d)" | base64 --wrap=0 | _json_encode)
|
|
|
|
|
+
|
|
|
|
|
+ _data="{
|
|
|
|
|
+ \"message\": \"$_subject_json\",
|
|
|
|
|
+ \"alias\": \"$_alias_json\",
|
|
|
|
|
+ \"description\": \"$_content_json\",
|
|
|
|
|
+ \"tags\": [
|
|
|
|
|
+ \"acme.sh\",
|
|
|
|
|
+ \"host:$(hostname)\"
|
|
|
|
|
+ ],
|
|
|
|
|
+ \"entity\": \"$(hostname -f)\",
|
|
|
|
|
+ \"priority\": \"$_priority\"
|
|
|
|
|
+}"
|
|
|
|
|
+
|
|
|
|
|
+ if response=$(_post "$_data" "$_opsgenie_url" "" "" "application/json"); then
|
|
|
|
|
+ if ! _contains "$response" error; then
|
|
|
|
|
+ _info "opsgenie send success."
|
|
|
|
|
+ return 0
|
|
|
|
|
+ fi
|
|
|
|
|
+ fi
|
|
|
|
|
+ _err "opsgenie send error."
|
|
|
|
|
+ _err "$response"
|
|
|
|
|
+ return 1
|
|
|
|
|
+}
|