c5dc75d685
Squashed commit of the following: commit ce1e033f36f0b1e41c48cfa09b4660771af0e6f3 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Fri May 17 09:04:05 2019 -0400 Added spee.ch README and speech-lbrynet services. commit 7aa73f3d58885c7e2ff56161861fe9d9c73b70e0 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Thu May 16 19:03:28 2019 -0400 Fix Speech downloads dirs commit 3137b0c82e9f83482a48b721d176794efeeb6164 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Thu May 16 17:52:55 2019 -0400 speech-lbrynet should mount speech-data volume to store downloads. commit 727c59800a91cedf545b1f3f767e9481455c1897 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Thu May 16 17:40:34 2019 -0400 applying shell-check (part 1) commit 251e2b104b7f87cc0b3e430371be7a6fdfca1d08 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Wed May 15 20:43:18 2019 -0400 TLS / HTTPs commit b3de768909a827a2a3b65e7ecbe1795d1ab75e7b Author: Ryan McGuire <ryan@enigmacurry.com> Date: Wed May 15 17:51:52 2019 -0400 Spee.ch+lbrynet sidecar (in progress) commit 1eb08ae6f9dd57e4bdfe9c196493f609908e4105 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Tue May 14 10:43:20 2019 -0400 Add asciicast commit 067e9c8325c5148fb16b3a96e8c4de7d39c8f25d Author: Ryan McGuire <ryan@enigmacurry.com> Date: Mon May 13 09:49:50 2019 -0400 Updates lbrynet image commit b85026d6488c9b00d2cb8ad86f4be626db2e9d66 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Mon May 13 08:36:40 2019 -0400 README commit 1f5bd113205164fcc4e279e5ef51b2dad3a8e477 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 21:40:46 2019 -0400 fix helm app names commit 28ea709507643a4385bd0618b1de9b69f62752eb Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 21:31:22 2019 -0400 lbrycrd-override-snapshot commit 0d5b2ae7743e721c08d940a15e73540ce4411886 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 21:00:24 2019 -0400 remove set -x commit b2d380197befe8de716ea2f09bfdf7f984d2a867 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 20:41:18 2019 -0400 fix lbrynet-copy-wallet commit 2dcb98dee79eacb64d9ca14b0eed6a90c249c6fe Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 20:29:59 2019 -0400 run.sh messaging commit b766ffc624aa165c2a987bd7cd7911e3dd0a78df Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 20:21:21 2019 -0400 fix linkages commit 4d07652d1af1fd741bbec6debe8462bcd9e6cf65 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 19:39:23 2019 -0400 fix container linkage commit 8f4bd26ac7b658d3cc1b201a6870fe889e3a39d9 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 19:26:53 2019 -0400 run.sh help commit ef2f0fe4b7c5b5e3aef5d14b99a3293a41e45ae5 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 18:43:43 2019 -0400 remove old messaging commit b8a6696b0f38724ce5f0472943233da681181a72 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 17:19:33 2019 -0400 add setup-alias command commit fbc5c202fe48e0f5867b899795fb4e9ab696e96f Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 16:06:04 2019 -0400 README commit 34410c1e1f4fd3546b76a55dc0fdb713ed8a1279 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 15:51:20 2019 -0400 Depend on external kubectl and helm tab completion scripts. commit a9af588c42f8bcd11266733646d7990ab722a84c Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 15:23:35 2019 -0400 Fix tab completion script commit c82efd5463af24118249240b738a70eb0f5e9d3d Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 15:12:21 2019 -0400 Refactor run.sh script to k8s-lbry alias. commit d14eb6691226788f0e08cc5b162fd29de8c1782f Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 14:44:16 2019 -0400 Fix tab completion script. commit 77ecaab2f934290e20da969182c7f09f71d1b819 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 14:22:25 2019 -0400 Fix kubectl namespace during tab completion commit 29ff6d25b0256a51a05c96a0f8f9a7d443ff58d1 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sun May 12 12:13:03 2019 -0400 k8s-lbry: Adds tab completion commit da961eb75ea5468ad4240bf7ad4f8a8058a0909f Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 20:54:43 2019 -0400 README commit 934e43be256aee490385cbf9f40115e464ba930e Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 20:23:03 2019 -0400 Chainquery snapshot restore commit 56029260f3f6c436847efb89a37fa206f5d7265f Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 18:13:58 2019 -0400 lbrycrd-cli credentials commit 03bc538174e874cbf82ec061edb184583ee293b9 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 18:07:25 2019 -0400 Open port 9246 commit 339688bb28f9fd63bdce944c55d5d2d0c57d87be Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 17:37:15 2019 -0400 delete old package script commit 4cef33826bcaef72eb3acecfb83d2627bd2a1dd7 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 17:31:17 2019 -0400 fix pod names commit babcb688a747d58b7c8b4cf5c44f46d36307d111 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 16:47:30 2019 -0400 more commit 88192a8992604aa9fb7edbb41d0194b70a7a00ca Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 16:13:27 2019 -0400 enable args commit 01bcf85e1478b47814788cc4f1d44b5b91a0ea26 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 15:55:14 2019 -0400 more commit 76ab5019b85a43b04554af8da6a55d30d13dedf3 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 15:41:36 2019 -0400 k8s-lbry: lbrynet commit 3432c9e3a089e5789c1b30d5119cfb25d087d707 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 11:41:32 2019 -0400 README commit 813b6ab95b2320000405dca973492d6cba19b288 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 11:40:02 2019 -0400 fix regex commit d010eb5ee96fded843247e0d12980f38b910c9f1 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 11:36:47 2019 -0400 Add git dependency commit 092c496f9bf3e86dc1a138ac404daa582fe1632e Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 11:27:14 2019 -0400 Fix helm commit fa7dea7139031931ff372024ee914a60d68b6157 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 10:57:17 2019 -0400 Make run.sh bootstrappable commit f512878a70f70f85f2e7f5bc7c239d681846e508 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Sat May 11 10:21:35 2019 -0400 k8s-lbry: README commit fd77fa2527962198b204a3de852c0b891e078178 Author: Ryan McGuire <ryan@enigmacurry.com> Date: Wed May 8 02:50:24 2019 -0400 k8s-lbry: Adds run.sh wrapper script and new README.
661 lines
22 KiB
Bash
Executable file
661 lines
22 KiB
Bash
Executable file
#!/bin/bash
|
|
BASEDIR=$(cd $(dirname "$0"); pwd)
|
|
BASENAME=$(basename "$0")
|
|
|
|
## RELEASE - The name for the helm release.
|
|
RELEASE=${RELEASE:-k8s-lbry}
|
|
|
|
## NAMESPACE - The Kubernetes namespace for the release
|
|
NAMESPACE=${NAMESPACE:-k8s-lbry}
|
|
|
|
## CHART - The helm chart location (local path, or from repository)
|
|
### Use the stable chart from the HELM_REPO repository:
|
|
CHART=${CHART:-lbry/k8s-lbry}
|
|
### Use the chart from the current directory:
|
|
#CHART=${CHART:-$BASEDIR}
|
|
|
|
## VALUES - The path to your configured helm values.yaml:
|
|
VALUES=${VALUES:-$BASEDIR/values-dev.yaml}
|
|
DEFAULT_VALUES_URL=${DEFAULT_VALUES_URL:-https://raw.githubusercontent.com/EnigmaCurry/lbry-docker/k8s-lbry/contrib/k8s-lbry/values.yaml}
|
|
|
|
## HELM_REPO - The stable helm chart repository for this chart:
|
|
HELM_REPO=${HELM_REPO:-https://k8s-lbry.sfo2.digitaloceanspaces.com}
|
|
|
|
## TILLER_HOST - The host that runs tiller
|
|
TILLER_HOST=${TILLER_HOST:-localhost}
|
|
|
|
## CERTMANAGER_NAMESPACE - The namespace cert-manager runs in
|
|
CERTMANAGER_NAMESPACE=${CERTMANAGER_NAMESPACE:-cert-manager}
|
|
CERTMANAGER_VERSION=v0.7.1
|
|
|
|
## NGINX_ENABLE_HTTPS - This needs to be set false until DNS is setup.
|
|
NGINX_ENABLE_HTTPS=${NGINX_ENABLE_HTTPS:-false}
|
|
|
|
## Mysql Database snapshot download url:
|
|
CHAINQUERY_SNAPSHOT_URL=${CHAINQUERY_SNAPSHOT_URL:-https://lbry-chainquery-mysql-dump.sfo2.digitaloceanspaces.com/chainquery_height_560900.mysql-backup.tar.gz}
|
|
|
|
## lbrycrd snapshot download url:
|
|
LBRYCRD_SNAPSHOT_URL=${LBRYCRD_SNAPSHOT_URL:-https://lbry-chainquery-mysql-dump.sfo2.digitaloceanspaces.com/lbrycrd-566588-snapshot.tar.gz}
|
|
|
|
LBRYCRD_RPC_USER=${LBRYCRD_RPC_USER:-lbry}
|
|
LBRYCRD_RPC_PASSWORD=${LBRYCRD_RPC_PASSWORD:-lbry}
|
|
|
|
## Bash alias name for run.sh
|
|
## defaults to $NAMESPACE (k8s-lbry)
|
|
RUN_ALIAS=${RUN_ALIAS:-$NAMESPACE}
|
|
|
|
## Package bucket (ignore this, only used by developer of this package)
|
|
PACKAGE_BUCKET=${PACKAGE_BUCKET:-"s3://k8s-lbry"}
|
|
|
|
exe() { ( echo "## $*"; $*; ) }
|
|
|
|
setup() {
|
|
### Check for external dependencies:
|
|
if ! which helm > /dev/null; then
|
|
echo "Error: You must install helm"
|
|
echo "On Ubuntu you can run: sudo snap install --classic helm"
|
|
echo "For other platforms, see https://github.com/helm/helm/releases/latest"
|
|
exit 1
|
|
fi
|
|
if ! which kubectl > /dev/null; then
|
|
echo "Error: You must install kubectl"
|
|
echo "On Ubuntu you can run: sudo snap install --classic kubectl"
|
|
echo "For other platforms, see https://kubernetes.io/docs/tasks/tools/install-kubectl/"
|
|
exit 1
|
|
fi
|
|
if ! which git > /dev/null; then
|
|
echo "Error: You must install git"
|
|
echo "On Ubuntu you can run: sudo apt install -y git"
|
|
echo "For other platforms, see https://git-scm.com/downloads"
|
|
exit 1
|
|
fi
|
|
|
|
### Initialize helm locally, but do not install tiller to the cluster:
|
|
HELM=$(which helm)
|
|
if [ ! -f "$HOME"/.helm/repository/repositories.yaml ]; then
|
|
exe "$HELM" init --client-only
|
|
fi
|
|
|
|
### Add the stable helm chart repository:
|
|
if [ "$CHART" != "$BASEDIR" ]; then
|
|
exe "$HELM" repo add lbry "$HELM_REPO"
|
|
exe "$HELM" repo update
|
|
fi
|
|
|
|
### Install helm-tiller plugin, so that no tiller needs to be installed to the cluster:
|
|
exe "$HELM" plugin install https://github.com/rimusz/helm-tiller || true
|
|
|
|
### Setup the values.yaml for the chart, using the VALUES environment variable or script default
|
|
### If no values file exists, interactively ask if a default config should be created in its place.
|
|
if [ ! -f "$VALUES" ]; then
|
|
echo ""
|
|
echo "Values file does not exist: $VALUES"
|
|
read -p "Would you like to create a default config file here? (y/N)" choice
|
|
echo ""
|
|
case "$choice" in
|
|
y|Y ) curl "$DEFAULT_VALUES_URL" -Lo "$VALUES"
|
|
echo "Default configuration created: $VALUES"
|
|
;;
|
|
* ) echo "You must create your own values file: $VALUES (using values.yaml as a template.)"
|
|
echo "Or set VALUES=/path/to/values.yaml before subsequent commands."
|
|
exit 1
|
|
;;
|
|
esac
|
|
else
|
|
echo "Configuration found: $VALUES"
|
|
fi
|
|
echo "Edit this config file to suit your own environment before install/upgrade"
|
|
|
|
}
|
|
|
|
helm() {
|
|
## Redefine all helm commands to run through local tiller instance
|
|
## https://rimusz.net/tillerless-helm
|
|
HELM=$(which helm)
|
|
exe "$HELM" tiller run "$NAMESPACE" -- helm "$*"
|
|
}
|
|
|
|
kubectl() {
|
|
## kubectl wrapper that defaults to k8s-lbry namespace, so you don't have to
|
|
## type as much, but still passes all the provided arguments on to kubectl.
|
|
## So you can still specify a different namespace, because the client args
|
|
## are applied last.
|
|
KUBECTL=$(which kubectl)
|
|
exe "$KUBECTL" --namespace "$NAMESPACE" "$*"
|
|
}
|
|
|
|
install-nginx-ingress() {
|
|
### Install nginx-ingress from stable helm repository
|
|
### See https://github.com/helm/charts/tree/master/stable/nginx-ingress
|
|
helm install stable/nginx-ingress --namespace "$NAMESPACE" --name nginx-ingress --set nginx-ingress.controller.service.enableHttps="$NGINX_ENABLE_HTTPS" --set tcp.9246="$NAMESPACE/lbrycrd:9246"
|
|
}
|
|
|
|
upgrade-nginx-ingress() {
|
|
### Upgrade nginx-ingress
|
|
helm upgrade nginx-ingress stable/nginx-ingress --namespace "$NAMESPACE" --set nginx-ingress.controller.service.enableHttps="$NGINX_ENABLE_HTTPS" --set tcp.9246="$NAMESPACE/lbrycrd:9246"
|
|
}
|
|
|
|
install-cert-manager() {
|
|
### Install cert-manager from jetstack helm repository
|
|
### See https://docs.cert-manager.io/en/latest/index.html
|
|
kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.7/deploy/manifests/00-crds.yaml
|
|
|
|
helm repo add jetstack https://charts.jetstack.io
|
|
helm repo update
|
|
|
|
helm install --name cert-manager --namespace "$CERTMANAGER_NAMESPACE" jetstack/cert-manager --version $CERTMANAGER_VERSION
|
|
|
|
kubectl label namespace "$CERTMANAGER_NAMESPACE" certmanager.k8s.io/disable-validation="true"
|
|
}
|
|
|
|
upgrade-cert-manager() {
|
|
### Upgrade cert-manager
|
|
helm upgrade cert-manager jetstack/cert-manager --namespace "$CERTMANAGER_NAMESPACE" --version $CERTMANAGER_VERSION
|
|
}
|
|
|
|
install() {
|
|
### Install the k8s-lbry helm chart
|
|
if [ ! -f "$VALUES" ]; then
|
|
echo "Could not find chart values file: $VALUES"
|
|
exit 1
|
|
fi
|
|
helm install "$CHART" --name "$RELEASE" --namespace="$NAMESPACE" -f "$VALUES"
|
|
}
|
|
|
|
upgrade() {
|
|
### Upgrade the k8s-lbry helm chart
|
|
if [ ! -f "$VALUES" ]; then
|
|
echo "Could not find chart values file: $VALUES"
|
|
exit 1
|
|
fi
|
|
helm upgrade "$RELEASE" "$CHART" --namespace="$NAMESPACE" -f "$VALUES"
|
|
}
|
|
|
|
shell() {
|
|
### Execute a shell in the running container with helm app name provided by first argument
|
|
(
|
|
if [ "$#" -eq 1 ]; then
|
|
KUBECTL=$(which kubectl)
|
|
POD=$($KUBECTL get --namespace "$NAMESPACE" pod -l app="$1" -o name | sed s+pod/++)
|
|
exe kubectl exec -it "$POD" /bin/bash
|
|
else
|
|
echo "Required arg: helm app name of pod to shell into"
|
|
fi
|
|
)
|
|
}
|
|
|
|
shell-pvc() {
|
|
### Start a utility container shell with an attached Persistent Volume Claim.
|
|
(
|
|
# From https://gist.github.com/yuanying/3aa7d59dcce65470804ab43def646ab6
|
|
|
|
IMAGE="ubuntu:18.04"
|
|
COMMAND="/bin/bash"
|
|
SUFFIX=$(date +%s | shasum | base64 | fold -w 10 | head -1 | tr '[:upper:]' '[:lower:]')
|
|
|
|
usage_exit() {
|
|
echo "Usage: $0 [-c command] [-i image] PVC ..." 1>&2
|
|
exit 1
|
|
}
|
|
|
|
if [ "$#" -ne 1 ]; then
|
|
usage_exit
|
|
fi
|
|
|
|
while getopts i:h OPT
|
|
do
|
|
case $OPT in
|
|
i) IMAGE=$OPTARG
|
|
;;
|
|
c) COMMAND=$OPTARG
|
|
;;
|
|
h) usage_exit
|
|
;;
|
|
\?) usage_exit
|
|
;;
|
|
esac
|
|
done
|
|
shift $(($OPTIND - 1))
|
|
|
|
VOL_MOUNTS=""
|
|
VOLS=""
|
|
COMMA=""
|
|
|
|
for i in $@
|
|
do
|
|
VOL_MOUNTS="${VOL_MOUNTS}${COMMA}{\"name\": \"${i}\",\"mountPath\": \"/pvcs/${i}\"}"
|
|
VOLS="${VOLS}${COMMA}{\"name\": \"${i}\",\"persistentVolumeClaim\": {\"claimName\": \"${i}\"}}"
|
|
COMMA=","
|
|
done
|
|
|
|
$(which kubectl) --namespace "$NAMESPACE" run -it --rm --restart=Never --image="${IMAGE}" pvc-mounter-"${SUFFIX}" --overrides "
|
|
{
|
|
\"spec\": {
|
|
\"hostNetwork\": true,
|
|
\"containers\":[
|
|
{
|
|
\"args\": [\"${COMMAND}\"],
|
|
\"stdin\": true,
|
|
\"tty\": true,
|
|
\"name\": \"pvc\",
|
|
\"image\": \"${IMAGE}\",
|
|
\"volumeMounts\": [
|
|
${VOL_MOUNTS}
|
|
]
|
|
}
|
|
],
|
|
\"volumes\": [
|
|
${VOLS}
|
|
]
|
|
}
|
|
}
|
|
" -- "${COMMAND}"
|
|
|
|
)
|
|
}
|
|
|
|
restart() {
|
|
### Restart the pod given by a helm app name
|
|
(
|
|
if [ "$#" -eq 1 ]; then
|
|
KUBECTL=$(which kubectl)
|
|
POD=$($KUBECTL get --namespace "$NAMESPACE" pod -l app="$1" -o name | sed s+pod/++)
|
|
exe kubectl delete pod "$POD"
|
|
else
|
|
echo "Required arg: helm app name of pod to restart"
|
|
fi
|
|
)
|
|
}
|
|
|
|
|
|
package() {
|
|
### Create a packaged helm release and upload to the S3 repository
|
|
(
|
|
cd $BASEDIR
|
|
set -e
|
|
if [ "$#" -eq 1 ]; then
|
|
if ! grep "version: $1" Chart.yaml; then
|
|
echo "Chart.yaml version does not match intended package version ($1)."
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "required argument: package version"
|
|
exit 1
|
|
fi
|
|
|
|
PACKAGE="k8s-lbry-$1.tgz"
|
|
|
|
## Build Helm package repository and upload to s3
|
|
if which s3cmd > /dev/null; then
|
|
if s3cmd info $PACKAGE_BUCKET > /dev/null; then
|
|
# Download all remote releases, to re-include in new index.yaml
|
|
exe s3cmd sync $PACKAGE_BUCKET .
|
|
|
|
# Check if release already exists
|
|
s3_url="$PACKAGE_BUCKET/$PACKAGE"
|
|
if s3cmd info "$s3_url"; then
|
|
echo "$s3_url already exists. Aborting."
|
|
exit 1
|
|
fi
|
|
|
|
# Package release and rebuild repository
|
|
exe helm dependency update
|
|
exe helm package .
|
|
exe helm repo index .
|
|
|
|
# Publish packages to s3
|
|
exe s3cmd put --acl-public index.yaml "$PACKAGE" $PACKAGE_BUCKET
|
|
exe s3cmd put --acl-public charts/*.tgz $PACKAGE_BUCKET/charts/
|
|
else
|
|
echo "s3cmd is not setup, run s3cmd --configure"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "s3cmd is not installed"
|
|
exit 1
|
|
fi
|
|
)
|
|
}
|
|
|
|
chainquery-mysql-client() {
|
|
### Access the mysql shell for chainquery
|
|
KUBECTL=$(which kubectl)
|
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=chainquery-mysql -o name | sed s+pod/++)
|
|
if [ ${#POD} -gt 0 ]; then
|
|
kubectl exec -it "$POD" -- mysql -u chainquery -pchainquery
|
|
else
|
|
echo "chainquery-mysql pod not found"
|
|
fi
|
|
}
|
|
|
|
speech-mysql-client() {
|
|
### Access the mysql shell for speech
|
|
KUBECTL=$(which kubectl)
|
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=speech-mysql -o name | sed s+pod/++)
|
|
if [ ${#POD} -gt 0 ]; then
|
|
kubectl exec -it "$POD" -- mysql -u speech -pspeech
|
|
else
|
|
echo "speech-mysql pod not found"
|
|
fi
|
|
}
|
|
|
|
chainquery-override-snapshot() {
|
|
### Delete the existing chainquery database and download a snapshot to restore
|
|
read -p "Would you like to DESTROY the existing chainquery database,
|
|
and restore from a fresh snapshot? (y/N) " destroy_chainquery
|
|
case "$destroy_chainquery" in
|
|
y|Y )
|
|
kubectl delete deployments chainquery chainquery-mysql || true
|
|
echo "Please wait.."
|
|
IMAGE="ubuntu:18.04"
|
|
SUFFIX=$(date +%s | shasum | base64 | fold -w 10 | head -1 | tr '[:upper:]' '[:lower:]')
|
|
VOL_MOUNTS="{\"name\": \"chainquery-mysql\",\"mountPath\": \"/pvcs/chainquery-mysql\"}"
|
|
VOLS="{\"name\": \"chainquery-mysql\",\"persistentVolumeClaim\": {\"claimName\": \"chainquery-mysql\"}}"
|
|
COMMAND="rm -rf /pvcs/chainquery-mysql/* && apt-get update && apt-get install -y curl && curl -s ${CHAINQUERY_SNAPSHOT_URL} | tar xvz -C /pvcs/chainquery-mysql/"
|
|
$(which kubectl) --namespace "$NAMESPACE" run -it --rm --restart=Never --image=${IMAGE} pvc-mounter-"${SUFFIX}" --overrides "
|
|
{
|
|
\"spec\": {
|
|
\"hostNetwork\": true,
|
|
\"containers\":[
|
|
{
|
|
\"args\": [\"bin/bash\", \"-c\", \"${COMMAND}\"],
|
|
\"stdin\": true,
|
|
\"tty\": true,
|
|
\"name\": \"pvc\",
|
|
\"image\": \"${IMAGE}\",
|
|
\"volumeMounts\": [
|
|
${VOL_MOUNTS}
|
|
]
|
|
}
|
|
],
|
|
\"volumes\": [
|
|
${VOLS}
|
|
]
|
|
}
|
|
}
|
|
"
|
|
echo "Extraction complete"
|
|
;;
|
|
* ) echo "Aborted."
|
|
;;
|
|
esac
|
|
}
|
|
|
|
lbrycrd-override-snapshot() {
|
|
### Delete the existing lbrycrd data and download a snapshot to restore
|
|
read -p "Would you like to DESTROY the existing lbrycrd data,
|
|
and restore from a fresh snapshot? (y/N) " destroy_lbrycrd
|
|
case "$destroy_lbrycrd" in
|
|
y|Y )
|
|
kubectl delete deployments lbrycrd || true
|
|
echo "Please wait.."
|
|
IMAGE="ubuntu:18.04"
|
|
SUFFIX=$(date +%s | shasum | base64 | fold -w 10 | head -1 | tr '[:upper:]' '[:lower:]')
|
|
VOL_MOUNTS="{\"name\": \"lbrycrd\",\"mountPath\": \"/pvcs/lbrycrd\"}"
|
|
VOLS="{\"name\": \"lbrycrd\",\"persistentVolumeClaim\": {\"claimName\": \"lbrycrd\"}}"
|
|
COMMAND="rm -rf /pvcs/lbrycrd/* && apt-get update && apt-get install -y curl && curl -s ${LBRYCRD_SNAPSHOT_URL} | tar xvz -C /pvcs/lbrycrd/"
|
|
$(which kubectl) --namespace "$NAMESPACE" run -it --rm --restart=Never --image=${IMAGE} pvc-mounter-"${SUFFIX}" --overrides "
|
|
{
|
|
\"spec\": {
|
|
\"hostNetwork\": true,
|
|
\"containers\":[
|
|
{
|
|
\"args\": [\"bin/bash\", \"-c\", \"${COMMAND}\"],
|
|
\"stdin\": true,
|
|
\"tty\": true,
|
|
\"name\": \"pvc\",
|
|
\"image\": \"${IMAGE}\",
|
|
\"volumeMounts\": [
|
|
${VOL_MOUNTS}
|
|
]
|
|
}
|
|
],
|
|
\"volumes\": [
|
|
${VOLS}
|
|
]
|
|
}
|
|
}
|
|
"
|
|
echo "Extraction complete"
|
|
;;
|
|
* ) echo "Aborted."
|
|
;;
|
|
esac
|
|
}
|
|
|
|
logs() {
|
|
### Watch the logs of a pod by helm app name
|
|
(
|
|
set -e
|
|
if [ "$#" -eq 1 ]; then
|
|
kubectl logs -l app="$1" -f
|
|
elif [ "$#" -eq 2 ]; then
|
|
KUBECTL=$(which kubectl)
|
|
POD=$($KUBECTL get --namespace "$NAMESPACE" pod -l app="$1" -o name | sed s+pod/++)
|
|
kubectl logs "$POD" "$2" -f
|
|
else
|
|
echo "Required arg: app_name"
|
|
fi
|
|
)
|
|
}
|
|
|
|
lbrynet-copy-wallet() {
|
|
### Copy the lbrynet wallet to a local path for backup
|
|
(
|
|
set -e
|
|
if [ "$#" -eq 1 ]; then
|
|
WALLET=/home/lbrynet/.local/share/lbry/lbryum/wallets/default_wallet
|
|
KUBECTL=$(which kubectl)
|
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=lbrynet -o name | sed s+pod/++)
|
|
kubectl cp "$POD":$WALLET "$1"
|
|
chmod 600 "$1"
|
|
echo "lbrynet wallet copied to $1"
|
|
else
|
|
echo "Required arg: path of backup location for wallet"
|
|
fi
|
|
)
|
|
}
|
|
|
|
speech-lbrynet-copy-wallet() {
|
|
### Copy the speech-lbrynet wallet to a local path for backup
|
|
(
|
|
set -e
|
|
if [ "$#" -eq 1 ]; then
|
|
WALLET=/home/lbrynet/.local/share/lbry/lbryum/wallets/default_wallet
|
|
KUBECTL=$(which kubectl)
|
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=speech -o name | sed s+pod/++)
|
|
kubectl cp "$POD":$WALLET "$1" -c speech-lbrynet
|
|
chmod 600 "$1"
|
|
echo "lbrynet wallet copied to $1"
|
|
else
|
|
echo "Required arg: path of backup location for wallet"
|
|
fi
|
|
)
|
|
}
|
|
|
|
lbrycrd-cli() {
|
|
## Run lbrycrd-cli client from inside the running pod outputting to your local terminal
|
|
KUBECTL=$(which kubectl)
|
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=lbrycrd -o name | sed s+pod/++)
|
|
if [ ${#POD} -gt 0 ]; then
|
|
kubectl exec "$POD" -- lbrycrd-cli -rpcuser="$LBRYCRD_RPC_USER" -rpcpassword="$LBRYCRD_RPC_PASSWORD" "$*"
|
|
else
|
|
echo "lbrycrd pod not found"
|
|
fi
|
|
}
|
|
|
|
lbrynet() {
|
|
## Run lbrynet client from inside the running pod outputting to your local terminal
|
|
KUBECTL=$(which kubectl)
|
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=lbrynet -o name | sed s+pod/++)
|
|
if [ ${#POD} -gt 0 ]; then
|
|
kubectl exec "$POD" -- lbrynet "$*"
|
|
else
|
|
echo "lbrynet pod not found"
|
|
fi
|
|
}
|
|
|
|
speech-lbrynet() {
|
|
## Run lbrynet client from inside the running pod outputting to your local terminal
|
|
KUBECTL=$(which kubectl)
|
|
POD=$($KUBECTL -n "$NAMESPACE" get pod -l app=speech -o name | sed s+pod/++)
|
|
if [ ${#POD} -gt 0 ]; then
|
|
kubectl exec "$POD" -c speech-lbrynet -- lbrynet "$*"
|
|
else
|
|
echo "lbrynet pod not found"
|
|
fi
|
|
}
|
|
|
|
SUBCOMMANDS_NO_ARGS=(setup install install-nginx-ingress install-cert-manager upgrade
|
|
upgrade-nginx-ingress upgrade-cert-manager chainquery-mysql-client
|
|
speech-mysql-client chainquery-override-snapshot lbrycrd-override-snapshot
|
|
setup-alias)
|
|
|
|
SUBCOMMANDS_PASS_ARGS=(helm kubectl shell shell-pvc restart package logs lbrynet-copy-wallet lbrynet speech-lbrynet-copy-wallet speech-lbrynet lbrycrd-cli completion)
|
|
|
|
completion() {
|
|
if [ "$#" -eq 1 ] && [ "$1" == "bash" ]; then
|
|
cat <<EOF
|
|
__delegate_k8s_lbry() {
|
|
alias kubectl="kubectl --namespace=$NAMESPACE"
|
|
local cur subs
|
|
cur="\${COMP_WORDS[COMP_CWORD]}" # partial word, if any
|
|
subs="${SUBCOMMANDS_NO_ARGS[*]} ${SUBCOMMANDS_PASS_ARGS[*]}"
|
|
if [[ \${COMP_CWORD} -gt 1 ]]; then
|
|
# complete subcommands
|
|
_command \${@: -1}
|
|
else
|
|
# complete with the list of subcommands
|
|
COMPREPLY=( \$(compgen -W "\${subs}" -- \${cur}) )
|
|
fi
|
|
}
|
|
if [[ $(type -t compopt) = "builtin" ]]; then
|
|
complete -o default -F __delegate_k8s_lbry $RUN_ALIAS
|
|
else
|
|
complete -o default -o nospace -F __delegate_k8s_lbry $RUN_ALIAS
|
|
fi
|
|
EOF
|
|
else
|
|
echo "## I only know how to do completion for the bash shell."
|
|
echo "## Try '$0 completion bash' instead."
|
|
fi
|
|
|
|
}
|
|
|
|
setup-alias() {
|
|
$(which kubectl) completion bash > "$BASEDIR"/completion.bash.inc
|
|
$(which helm) completion bash >> "$BASEDIR"/completion.bash.inc
|
|
completion bash >> "$BASEDIR"/completion.bash.inc
|
|
|
|
if [[ -z $K8S_LBRY_HOME ]] && ! grep "K8S_LBRY_HOME" "$HOME"/.bashrc > /dev/null; then
|
|
echo "K8S_LBRY_HOME not set."
|
|
read -p "Would you this script to edit $HOME/.bashrc to add tab completion support? (y/N) " choice
|
|
case "$choice" in
|
|
y|Y )
|
|
cat <<EOF >> "$HOME"/.bashrc
|
|
|
|
## Enable bash completion
|
|
if [ -f /etc/bash_completion ]; then
|
|
source /etc/bash_completion
|
|
fi
|
|
|
|
## k8s-lbry alias and tab completion
|
|
K8S_LBRY_HOME=$BASEDIR
|
|
alias $RUN_ALIAS=\$K8S_LBRY_HOME/run.sh
|
|
if [ -f \$K8S_LBRY_HOME/completion.bash.inc ]; then
|
|
source \$K8S_LBRY_HOME/completion.bash.inc
|
|
fi
|
|
EOF
|
|
echo "Created new alias: $RUN_ALIAS"
|
|
echo "To use the new alias, run \"source ~/.bashrc\" or just close your terminal session and restart it."
|
|
;;
|
|
* ) echo "Aborting" && exit 1;;
|
|
esac
|
|
else
|
|
echo "K8S_LBRY_HOME environment already setup. Nothing left to do."
|
|
fi
|
|
}
|
|
|
|
if printf '%s\n' ${SUBCOMMANDS_NO_ARGS[@]} | grep -q -P "^$1$"; then
|
|
## Subcommands that take no arguments:
|
|
(
|
|
set -e
|
|
if [ "$#" -eq 1 ]; then
|
|
$*
|
|
else
|
|
echo "$1 does not take any additional arguments"
|
|
fi
|
|
)
|
|
elif printf '%s\n' ${SUBCOMMANDS_PASS_ARGS[@]} | grep -q -P "^$1$"; then
|
|
## Subcommands that pass all arguments:
|
|
(
|
|
set -e
|
|
$*
|
|
)
|
|
else
|
|
if [[ $# -gt 0 ]]; then
|
|
echo "## Invalid command: $1"
|
|
else
|
|
echo "## Must specify a command:"
|
|
fi
|
|
echo ""
|
|
echo "## $0 setup"
|
|
echo "## - Setup dependencies"
|
|
echo ""
|
|
echo "## $0 install-nginx-ingress"
|
|
echo "## - Deploy nginx-ingress chart"
|
|
echo ""
|
|
echo "## $0 install-cert-manager"
|
|
echo "## - Deploy cert-manager chart"
|
|
echo ""
|
|
echo "## $0 install"
|
|
echo "## - Deploy main k8s-lbry chart"
|
|
echo ""
|
|
echo "## $0 upgrade"
|
|
echo "## - Upgrade an existing release"
|
|
echo ""
|
|
echo "## $0 shell <app>"
|
|
echo "## - execute shell into running helm application pod"
|
|
echo ""
|
|
echo "## $0 shell-pvc [-c command] [-i image] PVC"
|
|
echo "## - run a utility shell with the named PVC mounted in /pvcs"
|
|
echo ""
|
|
echo "## $0 helm <cmd> [...] "
|
|
echo "## - run any helm command (through helm-tiller wrapper)"
|
|
echo ""
|
|
echo "## $0 kubectl <cmd> [...]"
|
|
echo "## - run any kubectl command (defaulting to configured namespace)"
|
|
echo ""
|
|
echo "## $0 chainquery-mysql-client"
|
|
echo "## - run mysql shell for chainquery database"
|
|
echo ""
|
|
echo "## $0 speech-mysql-client"
|
|
echo "## - run mysql shell for speech database"
|
|
echo ""
|
|
echo "## $0 chainquery-override-snapshot"
|
|
echo "## - Restore chainquery database from snapshot"
|
|
echo ""
|
|
echo "## $0 lbrycrd-override-snapshot"
|
|
echo "## - Restore lbrycrd database from snapshot"
|
|
echo ""
|
|
echo "## $0 logs <app> [container]"
|
|
echo "## - Stream the logs for the pod running the helm app name provided"
|
|
echo "## (specify which container if the pod has more than one.)"
|
|
echo ""
|
|
echo "## $0 lbrynet-copy-wallet <local-path>"
|
|
echo "## - Backup the lbrynet wallet file to a local path"
|
|
echo ""
|
|
echo "## $0 lbrynet <args ... >"
|
|
echo "## - Run lbrynet client inside running lbrynet pod"
|
|
echo ""
|
|
echo "## $0 speech-lbrynet-copy-wallet <local-path>"
|
|
echo "## - Backup the speech-lbrynet wallet file to a local path"
|
|
echo ""
|
|
echo "## $0 speech-lbrynet <args ... >"
|
|
echo "## - Run speech-lbrynet client inside running speech pod"
|
|
echo ""
|
|
echo "## $0 setup-alias"
|
|
echo "## - Setup bash alias and tab completion for run.sh"
|
|
echo ""
|
|
exit 1
|
|
fi
|