Skip to content

Instantly share code, notes, and snippets.

@pianovwork
Last active April 23, 2019 02:50
Show Gist options
  • Save pianovwork/c9d2b7efb6f1be2c80410a0b06d6c23b to your computer and use it in GitHub Desktop.
Save pianovwork/c9d2b7efb6f1be2c80410a0b06d6c23b to your computer and use it in GitHub Desktop.
Open Shift helpers

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"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment