Skip to content

Commit

Permalink
Added Project/Environemnt identifiers to webhook messages
Browse files Browse the repository at this point in the history
  • Loading branch information
Jura committed Dec 23, 2024
1 parent ee39a45 commit 735a962
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 14 deletions.
6 changes: 5 additions & 1 deletion functions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,12 @@ slackpost()
curl -s -d "payload=$json" "$SLACK_WEBHOOK_URL" || logline "Failed to send message to slack: ${USERNAME}: ${TEXT}"
elif [[ ! -z "$TEAMS_WEBHOOK_URL" ]]; then
# https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cjavascript
# Can either be one of 'attention', 'good', 'warning' for AdaptiveCard: https://adaptivecards.io/explorer/TextBlock.html
if [[ "$COLOR" == "danger" ]]; then
COLOR="attention"
fi
escapedText=$(echo $TEXT | sed 's/"/\"/g' | sed "s/'/\'/g")
json="{\"type\": \"message\", \"attachments\": [{\"contentType\": \"application/vnd.microsoft.card.adaptive\",\"contentUrl\": null,\"content\": {\"$schema\": \"http://adaptivecards.io/schemas/adaptive-card.json\",\"type\": \"AdaptiveCard\",\"version\": \"1.2\",\"body\": [{\"type\": \"TextBlock\",\"text\": \"$escapedText\"}]}}]}"
json="{\"type\": \"message\", \"attachments\": [{\"contentType\": \"application/vnd.microsoft.card.adaptive\",\"contentUrl\": null,\"content\": {\"$schema\": \"http://adaptivecards.io/schemas/adaptive-card.json\",\"type\": \"AdaptiveCard\",\"version\": \"1.2\",\"body\": [{\"type\": \"TextBlock\",\"text\": \"$escapedText\", \"color\":\"$COLOR\"}]}}]}"
curl -s -H "Content-Type: application/json" -d "$json" "$TEAMS_WEBHOOK_URL" || logline "Failed to send message to Teams: ${USERNAME}: ${TEXT}"
else
logline "No Slack/Teams: ${USERNAME}: ${TEXT}"
Expand Down
18 changes: 9 additions & 9 deletions hooks/letsencrypt_drupal_hooks.sh
Original file line number Diff line number Diff line change
Expand Up @@ -65,22 +65,22 @@ deploy_cert() {
# - TIMESTAMP
# Timestamp when the specified certificate was created.

slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "Starting deployment of new certificate for ${DOMAIN}."
slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: Starting deployment of new certificate for ${DOMAIN}."
# Should deployment be atempted?
if [ -z ${CERT_DEPLOY_ENVIRONMENT_UUID+x} ]
then
# No deploy. Just notify Slack and ask for manual deploy.
slackpost "${PROJECT_ROOT}" "warning" "SSL bot ${DRUSH_ALIAS}" "*New certificate for ${DOMAIN} was generated.* This instance of morpht/letsencrypt_drupal *is not set up to deploy certificate* automatically. The certificate needs to be uploaded to Acquia manually*.\n\nSSH to \`drush ${DRUSH_ALIAS} ssh\` to read files.\nLogin to Acquia and open target environment. Open SSL tab on the left side. Click Install SSL certificate.\n\nText fields:\nSSL certificate: \`cat ${FULLCHAINFILE}\`\nSSL private key: \`cat ${KEYFILE}\`\nCA intermediate certificates: \`cat ${CHAINFILE}\`"
slackpost "${PROJECT_ROOT}" "warning" "SSL bot ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: *New certificate for ${DOMAIN} was generated.* This instance of morpht/letsencrypt_drupal *is not set up to deploy certificate* automatically. The certificate needs to be uploaded to Acquia manually*.\n\nSSH to \`drush ${DRUSH_ALIAS} ssh\` to read files.\nLogin to Acquia and open target environment. Open SSL tab on the left side. Click Install SSL certificate.\n\nText fields:\nSSL certificate: \`cat ${FULLCHAINFILE}\`\nSSL private key: \`cat ${KEYFILE}\`\nCA intermediate certificates: \`cat ${CHAINFILE}\`"
else
# Run certificate deployment.
RESULT=$(php $CURRENT_DIR/../acquia_cloud_cert_deployment/cert_deploy.php "${CERT_DEPLOY_ENVIRONMENT_UUID}" "${KEYFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" "${TIMESTAMP}" --activate --label-prefix "letsencrypt_drupal" 2>&1)
if [ $? -eq 0 ]
then
# Send successful result to slack.
slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "SSL certificate deployment successful. \`\`\`${RESULT}\`\`\`"
slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: SSL certificate deployment successful. \`\`\`${RESULT}\`\`\`"
else
# Send failure notification to slack.
slackpost "${PROJECT_ROOT}" "danger" "SSL bot ${DRUSH_ALIAS}" "*SSL certificate deployment failure.* Manual review/fix required! \`\`\`${RESULT}\`\`\`\n\nNew certificate for ${DOMAIN} *was generated and needs to be uploaded to Acquia manually*.\n\nSSH to \`drush ${DRUSH_ALIAS} ssh\` to read files.\nLogin to Acquia and open target environment. Open SSL tab on the left side. Click Install SSL certificate.\n\nText fields:\nSSL certificate: \`cat ${FULLCHAINFILE}\`\nSSL private key: \`cat ${KEYFILE}\`\nCA intermediate certificates: \`cat ${CHAINFILE}\`"
slackpost "${PROJECT_ROOT}" "danger" "SSL bot ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: *SSL certificate deployment failure.* Manual review/fix required! \`\`\`${RESULT}\`\`\`\n\nNew certificate for ${DOMAIN} *was generated and needs to be uploaded to Acquia manually*.\n\nSSH to \`drush ${DRUSH_ALIAS} ssh\` to read files.\nLogin to Acquia and open target environment. Open SSL tab on the left side. Click Install SSL certificate.\n\nText fields:\nSSL certificate: \`cat ${FULLCHAINFILE}\`\nSSL private key: \`cat ${KEYFILE}\`\nCA intermediate certificates: \`cat ${CHAINFILE}\`"
fi
# Output for logging.
echo "${RESULT}"
Expand All @@ -106,7 +106,7 @@ unchanged_cert() {
# - CHAINFILE
# The path of the file containing the intermediate certificate(s).

slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "Certificate for ${DOMAIN} is still valid and therefore wasn't reissued. All good."
slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: Certificate for ${DOMAIN} is still valid and therefore wasn't reissued. All good."
}

invalid_challenge() {
Expand All @@ -122,7 +122,7 @@ invalid_challenge() {
# - RESPONSE
# The response that the verification server returned

slackpost "${PROJECT_ROOT}" "danger" "SSL bot ${DRUSH_ALIAS}" "Invalid_challenge: Challenge response has failed for ${DOMAIN} with ${RESPONSE}. Manual fix required!"
slackpost "${PROJECT_ROOT}" "danger" "SSL bot ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: Invalid_challenge: Challenge response has failed for ${DOMAIN} with ${RESPONSE}. Manual fix required!"
}

request_failure() {
Expand All @@ -141,21 +141,21 @@ request_failure() {
# - REQTYPE
# The kind of request that was made (GET, POST...)

slackpost "${PROJECT_ROOT}" "danger" "SSL bot ${DRUSH_ALIAS}" "Request_failure: HTTP request has failed with status code: ${STATUSCODE} and reason: ${REASON}. Manual fix required!"
slackpost "${PROJECT_ROOT}" "danger" "SSL bot ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: Request_failure: HTTP request has failed with status code: ${STATUSCODE} and reason: ${REASON}. Manual fix required!"
}

startup_hook() {
# This hook is called before the cron command to do some initial tasks
# (e.g. starting a webserver).

slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "SSL certificate check is starting..."
slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: SSL certificate check is starting..."
}

exit_hook() {
# This hook is called at the end of the cron command and can be used to
# do some final (cleanup or other) tasks.

slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "SSL certificate check finished."
slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: SSL certificate check finished."
}

HANDLER="$1"; shift
Expand Down
8 changes: 4 additions & 4 deletions letsencrypt_drupal.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ self_update() {
reslog=$(git log HEAD..origin/master --oneline)
if [[ "${reslog}" != "" ]]; then
echo "Found a new version of me, updating myself..."
slackpost "${PROJECT_ROOT}" "warning" "undp/letsencrypt_drupal on ${DRUSH_ALIAS}" "Found a new version of me, updating myself..."
slackpost "${PROJECT_ROOT}" "warning" "undp/letsencrypt_drupal on ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: Found a new version of me, updating myself..."

# Remove dehydrated library to make sure we get new version.
rm -rf ${CURRENT_DIR}/dehydrated
Expand All @@ -57,7 +57,7 @@ self_update() {
cd ${CURRENT_DIR} || exit

echo "Already the latest version."
slackpost "${PROJECT_ROOT}" "good" "undp/letsencrypt_drupal on ${DRUSH_ALIAS}" "The script is already the latest version."
slackpost "${PROJECT_ROOT}" "good" "undp/letsencrypt_drupal on ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: The script is already the latest version."
}

main() {
Expand Down Expand Up @@ -100,10 +100,10 @@ main() {
if [ $? -eq 0 ]
then
# Send result to slack.
slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "SSL Dehydrated script success. \`\`\`${DEHYDRATED_RESULT}\`\`\`"
slackpost "${PROJECT_ROOT}" "good" "SSL bot ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: SSL Dehydrated script success. \`\`\`${DEHYDRATED_RESULT}\`\`\`"
else
# Send result to slack.
slackpost "${PROJECT_ROOT}" "danger" "SSL bot ${DRUSH_ALIAS}" "*SSL Dehydrated script failure.* Manual review/fix required! \`\`\`${DEHYDRATED_RESULT}\`\`\`"
slackpost "${PROJECT_ROOT}" "danger" "SSL bot ${DRUSH_ALIAS}" "${PROJECT}.${ENVIRONMENT}: *SSL Dehydrated script failure.* Manual review/fix required! \`\`\`${DEHYDRATED_RESULT}\`\`\`"
fi
# Output for logging.
echo "${DEHYDRATED_RESULT}"
Expand Down

0 comments on commit 735a962

Please sign in to comment.