Openshift helpers:
oc-pod-name app_name [namespace]
oc-logs app_name [namespace]
oc-tunnel namespace app_name port
oc-tunnel namespace app_name s_port:d_port
oc-tunnel-mongodb
oc-tunnel-mongodb-afd
oc-tunnel-neo4j
oc-tunnel-neo4j-ui
| #!/usr/bin/env bash | |
| # Openshift helper functions | |
| # add next line to `.bash_profile` to export these helpers | |
| # source ~/.../oc-functions.sh | |
| TOO_FEW_ARGS_ERR="Too few arguments!" | |
| TOO_MANY_ARGS_ERR="Too many arguments! (Did you forget to quote?)" | |
| function usage() { | |
| echo -e "Usage:\n\t$1" | |
| } | |
| function oc-rsh() { | |
| USAGE="${FUNCNAME[0]} APP_NAME [PROJECT]" | |
| if [ "$#" -lt 1 ]; then | |
| echo "$TOO_FEW_ARGS_ERR" | |
| usage "$USAGE" | |
| return 1 | |
| elif [ "$#" -gt 3 ]; then | |
| echo "$TOO_MANY_ARGS_ERR" | |
| usage "$USAGE" | |
| return 2 | |
| fi | |
| ACTIVE_PROJECT=$(oc project | cut -d '"' -f 2) | |
| PROJECT=${2:-$ACTIVE_PROJECT} | |
| POD_NAME=$(oc-pod-name "$1" "$PROJECT") | |
| echo "$POD_NAME $PROJECT" | |
| oc rsh "$POD_NAME" | |
| } | |
| function oc-port-forward() { | |
| PROJECT=$(oc project | cut -d '"' -f 2) | |
| POD_NAME=$(oc-pod-name "$1" "$PROJECT") | |
| echo "$POD_NAME" | |
| oc port-forward "$POD_NAME" "$2":8080 | |
| } | |
| function oc-build() { | |
| USAGE="${FUNCNAME[0]} BUILD_CONFIG BRANCH_NAME" | |
| if [ "$#" -lt 2 ]; then | |
| echo "$TOO_FEW_ARGS_ERR" | |
| usage "$USAGE" | |
| return 1 | |
| elif [ "$#" -gt 2 ]; then | |
| echo "$TOO_MANY_ARGS_ERR" | |
| usage "$USAGE" | |
| return 2 | |
| fi | |
| NS=build | |
| oc start-build "$1" -n "$NS" --env SOURCE_REF="$2" --follow | |
| } | |
| function oc-promote() { | |
| ACTIVE_TAG=active | |
| DEFAULT_SOURCE_NS=dev | |
| DEFAULT_DEST_NS=qa | |
| USAGE="${FUNCNAME[0]} IMAGE_NAME [VERSION_TAG] [SOURCE_NAMESPACE] [DEST_NAMESPACE]\n\tVERSION_TAG defaults to $ACTIVE_TAG\n\tSOURCE_NAMESPACE defaults to $DEFAULT_SOURCE_NS\n\tDEST_NAMESPACE defaults to $DEFAULT_DEST_NS" | |
| if [ "$#" -lt 1 ]; then | |
| usage "$USAGE" | |
| return 1 | |
| fi | |
| IMAGE_NAME=$1 | |
| VERSION_TAG=${2:-$ACTIVE_TAG} | |
| SOURCE_NAMESPACE=${3:-$DEFAULT_SOURCE_NS} | |
| DEST_NAMESPACE=${4:-$DEFAULT_DEST_NS} | |
| oc tag "$SOURCE_NAMESPACE"/"$IMAGE_NAME":"$VERSION_TAG" \ | |
| "$DEST_NAMESPACE"/"$IMAGE_NAME":"$VERSION_TAG" \ | |
| "$DEST_NAMESPACE"/"$IMAGE_NAME":"$ACTIVE_TAG" | |
| } | |
| function oc-logs() { | |
| local PROJECT=$(oc project | cut -d '"' -f 2) | |
| local POD_NAME=$(oc-pod-name "$1" "$PROJECT") | |
| TAIL_LENGTH=${2-100} | |
| echo "$POD_NAME $PROJECT" | |
| oc logs -f "$POD_NAME" | |
| } | |
| function oc-pod-name() { | |
| local ID=$(whoami | awk '{print tolower($0)}') | |
| local DEFAULT_NS="ode-${ID:(-6)}-nextgen" | |
| local USAGE="${FUNCNAME[0]} APP_NAME [NAMESPACE]\n\tNAMESPACE defaults to $DEFAULT_NS" | |
| if [ "$#" -lt 1 ]; then | |
| echo "$TOO_FEW_ARGS_ERR" | |
| usage "$USAGE" | |
| return 1 | |
| elif [ "$#" -gt 2 ]; then | |
| echo "$TOO_MANY_ARGS_ERR" | |
| usage "$USAGE" | |
| return 2 | |
| fi | |
| local APP_NAME=$1 | |
| local NAMESPACE=${2:-$DEFAULT_NS} | |
| local POD_NAME=$(oc get pods -n $NAMESPACE -l name=$APP_NAME 2>/dev/null | grep Running | awk -F ' ' {'print $1'}) | |
| if [ -z $POD_NAME ]; then | |
| echo "$APP_NAME not found in $NAMESPACE" | |
| return 3 | |
| fi | |
| echo "$POD_NAME" | |
| } | |
| function oc-tunnel() { | |
| local USAGE="${FUNCNAME[0]} NAMESPACE APP_NAME SOURCE_PORT [DEST_PORT]\n\tDEST_PORT defaults to SOURCE_PORT" | |
| if [ "$#" -lt 3 ]; then | |
| echo "$TOO_FEW_ARGS_ERR" | |
| usage "$USAGE" | |
| return 1 | |
| elif [ "$#" -gt 4 ]; then | |
| echo "$TOO_MANY_ARGS_ERR" | |
| usage "$USAGE" | |
| return 2 | |
| fi | |
| local NAMESPACE=$1 | |
| echo "namespace =" $NAMESPACE | |
| local APP_NAME=$2 | |
| local SOURCE_PORT=$3 | |
| local DEST_PORT=${4:-$SOURCE_PORT} | |
| local POD_NAME=$(oc-pod-name $APP_NAME $NAMESPACE) | |
| echo "$POD_NAME" | |
| oc port-forward -n "$NAMESPACE" "$POD_NAME" "$SOURCE_PORT":"$DEST_PORT" | |
| } | |
| function oc-tunnel-mongodb() { | |
| local ID=$(whoami | awk '{print tolower($0)}') | |
| local NAMESPACE="ode-${ID:(-6)}-nextgen" | |
| oc-tunnel $NAMESPACE mongodb 27017 | |
| } | |
| function oc-tunnel-mongodb-afd() { | |
| local ID=$(whoami | awk '{print tolower($0)}') | |
| local NAMESPACE="ode-${ID:(-6)}-afd" | |
| oc-tunnel $NAMESPACE mongodb 27018 27017 | |
| } | |
| function oc-tunnel-neo4j() { | |
| local ID=$(whoami | awk '{print tolower($0)}') | |
| local NAMESPACE="ode-${ID:(-6)}-nextgen" | |
| oc-tunnel $NAMESPACE neo4j 7687 | |
| } | |
| function oc-tunnel-neo4j-ui() { | |
| local ID=$(whoami | awk '{print tolower($0)}') | |
| local NAMESPACE="ode-${ID:(-6)}-nextgen" | |
| oc-tunnel $NAMESPACE neo4j 7474 | |
| } | |
| function oc-all-versions() { | |
| TAG=active | |
| NAMESPACE=$1 | |
| IMAGES=$(oc get istag -o name -n $NAMESPACE) | |
| while read -r ISTAG; do | |
| IMAGE_ARR=(${ISTAG//:/ }) | |
| IMAGE_NAME_ARR=(${IMAGE_ARR[0]//\// }) | |
| IMAGE_NAME=${IMAGE_NAME_ARR[1]} | |
| IMAGE_TAG="${IMAGE_ARR[1]}" | |
| if [[ "${IMAGE_TAG}" == "${TAG}" ]]; then | |
| JSON=$(oc get $ISTAG -n $NAMESPACE -o json) | |
| OUTPUT_TMP=$(echo $JSON | jq -r '.image.dockerImageMetadata.Config.Labels["VERSION", "io.openshift.build.commit.id"]') | |
| OUTPUT=$(tr '\n' ' ' <<<$OUTPUT_TMP) | |
| echo "$IMAGE_NAME: $OUTPUT" | |
| fi | |
| done <<<"$IMAGES" | |
| } |