#!/usr/bin/env bash ########################################### # Checks for error exit codes from httpie # # Arguments: # # $1 Httpie exit code # # $2 Response returned by Portainer API # ########################################### check_for_errors () { local exit_code=$1 local response=$2 if [ $exit_code -ne 0 ]; then case $exit_code in 2) echo 'Request timed out!' ;; 3) echo 'Unexpected HTTP 3xx Redirection!' ;; 4) echo 'HTTP 4xx Client Error!' && echo $response ;; 5) echo 'HTTP 5xx Server Error!' && echo $response ;; 6) echo 'Exceeded --max-redirects= redirects!' ;; *) echo 'Unholy Error!' ;; esac exit 1 fi } PORTAINER_USER=${PORTAINER_USER:-"user"} PORTAINER_PASSWORD=${PORTAINER_PASSWORD:-"password"} PORTAINER_URL=${PORTAINER_URL:-"https://portainer.example.com"} PORTAINER_PRUNE=${PORTAINER_PRUNE:-"false"} PORTAINER_ENDPOINT=${PORTAINER_ENDPOINT:-"1"} HTTPIE_VERIFY_SSL=${HTTPIE_VERIFY_SSL:-"yes"} if [ -z ${1+x} ]; then echo "Error: Parameter #1 missing (stack name)" exit 1 fi STACK_NAME="$1" echo "Getting auth token..." AUTH_TOKEN=$(http \ --ignore-stdin \ --verify=$HTTPIE_VERIFY_SSL \ $PORTAINER_URL/api/auth \ username=$PORTAINER_USER \ password=$PORTAINER_PASSWORD \ | jq -r .jwt) AUTH_TOKEN=$(http \ --check-status \ --ignore-stdin \ --verify=$HTTPIE_VERIFY_SSL \ $PORTAINER_URL/api/auth \ username=$PORTAINER_USER \ password=$PORTAINER_PASSWORD) check_for_errors $? "$AUTH_TOKEN" AUTH_TOKEN=$(echo $AUTH_TOKEN | jq -r .jwt) echo "Done" echo "Getting stack $STACK_NAME..." STACKS=$(http \ --check-status \ --ignore-stdin \ --verify=$HTTPIE_VERIFY_SSL \ "$PORTAINER_URL/api/stacks" \ "Authorization: Bearer $AUTH_TOKEN") check_for_errors $? "$STACKS" STACK=$(echo "$STACKS" \ | jq --arg STACK_NAME "$STACK_NAME" -jc '.[] | select(.Name == $STACK_NAME)') if [ -z "$STACK" ]; then echo "Result: Stack $STACK_NAME not found." exit 1 fi echo "Result: Stack $STACK_NAME found." STACK_ID="$(echo "$STACK" | jq -j ".Id")" echo "Deleting stack $STACK_NAME..." DELETE=$(http \ --ignore-stdin \ --verify=$HTTPIE_VERIFY_SSL \ DELETE "$PORTAINER_URL/api/stacks/$STACK_ID" \ "Authorization: Bearer $AUTH_TOKEN") check_for_errors $? "$DELETE" echo "Done"