Skip to content
Snippets Groups Projects
Select Git revision
  • aa3e6280dfed957779e13ba963784bb87e66daa5
  • master default protected
  • simple-task/7248-eol-check-add-node-22
  • 6877_check_iml_deployment
4 results

check_disk-io

Blame
  • api-imlciserver.sh 4.65 KiB
    #!/usr/bin/env bash
    # ======================================================================
    #
    # API CLIENT :: API REQUEST TO IML CI SERVER
    #
    # ----------------------------------------------------------------------
    # 2020-07-23  v1.0  <axel.hahn@iml.unibe.ch>  first lines
    # 2020-07-29  v1.1  <axel.hahn@iml.unibe.ch>  check "/" in branch; check http status 200 
    # 2021-03-29  v1.2  <axel.hahn@iml.unibe.ch>  support slashes in branch names
    # ======================================================================
    
    # ----------------------------------------------------------------------
    # CONFIG
    # ----------------------------------------------------------------------
    
    line="----------------------------------------------------------------------"
    # LOG_FILE=/tmp/`basename $0`-last.log
    # exec > >(tee -a ${LOG_FILE} )
    # exec 2> >(tee -a ${LOG_FILE} >&2)
    
    # ----------------------------------------------------------------------
    # FUNCTIONS
    # ----------------------------------------------------------------------
    
    function showhelp(){
    echo "
    SYNTAX:
      -a ACTION     set name of an action
      -b BRANCH     set custom branch to access, i.e. origin/feature-123
      -p PROJECT    project name in the ci server; overrides env variable IMLCI_PROJECT
      -s SECRET     API secret for the given project; overrides env variable IMLCI_API_SECRET
      -u URL        URL of iml ci server without trailing /; overrides env variable IMLCI_URL
    
    ACTION:
       ... without given project and secret
         projects   show projects
    
       ... with project and secret
         buildinfo [branch]
                    show infos about what happens on build
         build [branch]
                    execute build
         phases     show status of phases
    
    EXAMPLES:
      `basename $0` -u https://ci.example.com -a projects
      `basename $0` -u https://ci.example.com -p myproject -s 12345678 -a buildinfo
      `basename $0` -u https://ci.example.com -p myproject -s 12345678 -a build
    "
    }
    
    
    function makeRequest(){
    
      local apiMethod=$1
      local apiRequest=$2
      local secret=$3
    
      local outfile=$( mktemp )
    
      echo $line
      echo $apiMethod ${apiHost}${apiRequest}
      echo $line
    
      if [ ! -z "$secret" ]; then
    
        # --- date in http format
        LANG=en_EN
        # export TZ=GMT
        apiTS=`date "+%a, %d %b %Y %H:%M:%S %Z"`
    
    
    # --- generate data to hash: method + uri + timestamp; delimited with line break
    data="${apiMethod}
    ${apiRequest}
    ${apiTS}
    "
    
        # generate hash - split in 2 commands (piping "cut" sends additional line break)
        myHash=`echo -n "$data" | openssl sha1 -hmac "${secret}" | cut -f 2 -d" "`
        myHash=`echo -n "$myHash" | base64`
    
        curl -i \
          -H "Accept: application/json" -H "Content-Type: application/json" \
          -H "Date: ${apiTS}" \
          -H "Authorization: demo-bash-client:${myHash}" \
          -X $apiMethod \
          ${IMLCI_URL}${apiRequest} | tee -a $outfile
      else
        curl -i \
          -H "Accept: application/json" -H "Content-Type: application/json" \
          -X $apiMethod \
          ${IMLCI_URL}${apiRequest} | tee -a $outfile
      fi
    
      grep "^HTTP\/" $outfile | head -1 | grep " 200 " >/dev/null
      local rccurl=$?
    
      rm -f $outfile
      if [ $rccurl -ne 0 ]; then
        echo
        echo "ERROR: API request failed. CURL request did not get respond status code 200."
        exit 4
      fi
    }
    
    
    # ----------------------------------------------------------------------
    # MAIN
    # ----------------------------------------------------------------------
    
    echo
    echo ===== API CALL TO IML CI SERVER :: `date` =====
    echo
    
    if  [ $# -lt 1 ]; then
      showhelp
      exit 1
    fi
    
    while getopts "a:b:u:p:s:" option; do 
    case ${option} in
      a)
        apiAction=$OPTARG
        ;;
      b)
        branch=$OPTARG
        ;;
      u)
        export IMLCI_URL=$OPTARG
        ;;
      p)
        export IMLCI_PROJECT=$OPTARG
        ;;
      s)
        export IMLCI_API_SECRET=$OPTARG
        ;;
      *)
        echo ERROR: invalid option [${option}]
        exit 2
    esac
    done
    
    echo Params: $*
    echo "IMLCI_URL = $IMLCI_URL"
    echo "IMLCI_PROJECT = $IMLCI_PROJECT"
    echo "IMLCI_API_SECRET = $IMLCI_API_SECRET"
    echo
    
    # task-4364: slashes are supported now
    # echo $branch | grep '/.*/.*' >/dev/null && ( echo "WARNING: Do NOT use a branch containing a slash [/] in the name"; echo )
    
    
    echo ACTION: $apiAction
    case $apiAction in
    
      # --- projects is an access without autorization
      "projects")
        makeRequest GET  /api/v1/projects
        ;;
    
      # --- access WITH autorization only
      "build")
        makeRequest POST /api/v1/project/$IMLCI_PROJECT/build/$branch "$IMLCI_API_SECRET"
        ;;
      "buildinfo")
        makeRequest GET  /api/v1/project/$IMLCI_PROJECT/build/$branch "$IMLCI_API_SECRET"
        ;;
      "phases")
        makeRequest GET  /api/v1/project/$IMLCI_PROJECT/phases   "$IMLCI_API_SECRET"
        ;;
      *)
        echo "ERROR: unknown action [$apiAction]"
        exit 3
    esac
    
    rc=$?
    echo
    echo $line
    date
    echo rc=$rc
    
    exit $rc