Skip to content

Instantly share code, notes, and snippets.

@l0rd
Last active July 27, 2017 15:06
Show Gist options
  • Save l0rd/812ca44b5cf128ff374704aa32d36118 to your computer and use it in GitHub Desktop.
Save l0rd/812ca44b5cf128ff374704aa32d36118 to your computer and use it in GitHub Desktop.
Easily run Che on minishift `curl -fsSL http://bit.ly/2v0getche -o get-che.sh && sh get-che.sh`
#!/bin/bash
# ------
# config
# ------
export CHE_LOG_LEVEL="DEBUG"
export CHE_DEBUGGING_ENABLED="false"
export CHE_IMAGE_REPO="rhchestage/che-server"
export CHE_IMAGE_TAG="nightly-fabric8"
# ----------------
# minishift config
# ----------------
export OPENSHIFT_ENDPOINT="https://$(minishift ip):8443/"
export OPENSHIFT_USERNAME="developer"
export OPENSHIFT_PASSWORD="developer"
export CHE_OPENSHIFT_PROJECT="eclipse-che"
export OPENSHIFT_NAMESPACE_URL="${CHE_OPENSHIFT_PROJECT}.$(minishift ip).nip.io"
export OPENSHIFT_FLAVOR=minishift
echo "# oc login ${OPENSHIFT_ENDPOINT}..."
if [ -z ${OPENSHIFT_TOKEN+x} ]; then
oc login "${OPENSHIFT_ENDPOINT}" -u "${OPENSHIFT_USERNAME}" -p "${OPENSHIFT_PASSWORD}" > /dev/null
OPENSHIFT_TOKEN=$(oc whoami -t)
else
oc login "${OPENSHIFT_ENDPOINT}" --token="${OPENSHIFT_TOKEN}" > /dev/null
fi
# Check if the project exists othewise create it
echo "# oc get project ${CHE_OPENSHIFT_PROJECT}..."
if ! oc get project "${CHE_OPENSHIFT_PROJECT}" &> /dev/null; then
echo "# Creating project"
oc new-project "${CHE_OPENSHIFT_PROJECT}"
## TODO we should consider oc apply the latest http://central.maven.org/maven2/io/fabric8/online/packages/fabric8-online-che-quotas-oso/
fi
oc project "${CHE_OPENSHIFT_PROJECT}"
# Set the right role binding to che service account
if [ "${OPENSHIFT_FLAVOR}" == "minishift" ]; then
oc login "${OPENSHIFT_ENDPOINT}" -u system:admin
echo "apiVersion: v1
kind: RoleBinding
metadata:
name: che
roleRef:
name: admin
subjects:
- kind: ServiceAccount
name: che" | oc apply -f -
oc login "${OPENSHIFT_ENDPOINT}" --token="${OPENSHIFT_TOKEN}" > /dev/null
fi
export CHE_IMAGE="${CHE_IMAGE_REPO}:${CHE_IMAGE_TAG}"
# Escape slashes in CHE_IMAGE to use it with sed later
# e.g. docker.io/rhchestage => docker.io\/rhchestage
export CHE_IMAGE_SANITIZED=$(echo "${CHE_IMAGE}" | sed 's/\//\\\//g')
# Get latest deployment config version
#export OSIO_VERSION=$(curl -sSL http://central.maven.org/maven2/io/fabric8/online/apps/che/maven-metadata.xml | grep latest | sed -e 's,.*<latest>\([^<]*\)</latest>.*,\1,g')
export OSIO_VERSION=1.0.253
# oc apply
# to delete all first `oc delete all --all -n ${CHE_OPENSHIFT_PROJECT}`
oc login ${OPENSHIFT_ENDPOINT} --token=${OPENSHIFT_TOKEN}
oc project ${CHE_OPENSHIFT_PROJECT}
if [ "${OPENSHIFT_FLAVOR}" == "minishift" ]; then
echo "# Deploying on minishift"
curl -sSL http://central.maven.org/maven2/io/fabric8/online/apps/che/${OSIO_VERSION}/che-${OSIO_VERSION}-openshift.yml | \
if [ ! -z ${OPENSHIFT_NAMESPACE_URL+x} ]; then sed "s/ hostname-http:.*/ hostname-http: ${OPENSHIFT_NAMESPACE_URL}/" ; else cat -; fi | \
sed "s/ image:.*/ image: \"${CHE_IMAGE_SANITIZED}\"/" | \
sed "s/ workspaces-memory-limit: 2300Mi/ workspaces-memory-limit: 1300Mi/" | \
sed "s/ workspaces-memory-request: 1500Mi/ workspaces-memory-request: 500Mi/" | \
sed "s/ che-openshift-secure-routes: \"true\"/ che-openshift-secure-routes: \"false\"/" | \
sed "s/ che-secure-external-urls: \"true\"/ che-secure-external-urls: \"false\"/" | \
sed "s/ che.docker.server_evaluation_strategy.custom.external.protocol: https/ che.docker.server_evaluation_strategy.custom.external.protocol: http/" | \
sed "s/ che-openshift-precreate-subpaths: \"false\"/ che-openshift-precreate-subpaths: \"true\"/" | \
sed "s/ che.predefined.stacks.reload_on_start: \"true\"/ che.predefined.stacks.reload_on_start: \"false\"/" | \
grep -v -e "tls:" -e "insecureEdgeTerminationPolicy: Redirect" -e "termination: edge" | \
sed "s/ keycloak-disabled: \"false\"/ keycloak-disabled: \"true\"/" | \
oc apply --force=true -f -
else
echo "# Deploying on osio"
curl -sSL http://central.maven.org/maven2/io/fabric8/online/apps/che/${OSIO_VERSION}/che-${OSIO_VERSION}-openshift.yml | \
if [ ! -z ${OPENSHIFT_NAMESPACE_URL+x} ]; then sed "s/ hostname-http:.*/ hostname-http: ${OPENSHIFT_NAMESPACE_URL}/" ; else cat -; fi | \
sed "s/ image:.*/ image: \"${CHE_IMAGE_SANITIZED}\"/" | \
oc apply --force=true -f -
fi
che_url=$(oc get route che -o jsonpath='{.spec.host}')
echo "Che is available at ==> http://${che_url}"
# Check if an old che-debug service exists.
if oc get svc che-debug &> /dev/null; then
echo "# Deleting old che-debug service"
oc delete svc che-debug
fi
if [ "${CHE_DEBUGGING_ENABLED}" == "true" ]; then
echo "# Create debug route..."
oc expose dc che --name=che-debug --target-port=http-debug --port=8000 --type=NodePort
NodePort=$(oc get service che-debug -o jsonpath='{.spec.ports[0].nodePort}')
echo "And remote debugging is possible attaching to URL $(minishift ip):${NodePort}"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment