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" | |
} |