openreplay/scripts/helmcharts/init.sh
rjshrjndrn 70e2d62de9 chore(helm): proper directory structure
fixes #2295

Signed-off-by: rjshrjndrn <rjshrjndrn@gmail.com>
2024-09-02 17:09:07 +02:00

136 lines
4.3 KiB
Bash

#!/bin/bash
set -ex
# Ref: https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BWHITE='\033[1;37m'
NC='\033[0m' # No Color
# --- helper functions for logs ---
info() { echo -e "${GREEN}[INFO] $*${NC}"; }
warn() { echo -e "${YELLOW}[WARN] $*${NC}"; }
fatal() {
echo -e "${RED}[FATAL] $*${NC}"
exit 1
}
export PATH=/var/lib/openreplay:$PATH
usr=$(whoami)
# Installing k3s
function install_k8s() {
curl -sL https://get.k3s.io | sudo K3S_KUBECONFIG_MODE="644" INSTALL_K3S_VERSION='v1.25.6+k3s1' INSTALL_K3S_EXEC="--disable=traefik" sh -
[[ -d ~/.kube ]] || mkdir ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chmod 0644 ~/.kube/config
sudo chown -R $usr ~/.kube/config
sleep 10
}
# Checking whether the app exists or we do have to upgade.
function exists() {
install_status=Upgrading
[[ $UPGRADE_TOOLS -eq 1 ]] && {
install_status=Upgrading
return 100
}
which $1 &>/dev/null
return $?
}
## Prepping the infra
# Mac os doesn't have gnu sed, which will cause compatibility issues.
# This wrapper will help to check the sed, and use the correct version="v1.20.0"
# Ref: https://stackoverflow.com/questions/37639496/how-can-i-check-the-version="v1.20.0"
function is_gnu_sed() {
sed --version >/dev/null 2>&1
}
function sed_i_wrapper() {
if is_gnu_sed; then
$(which sed) "$@"
else
a=()
for b in "$@"; do
[[ $b == '-i' ]] && a=("${a[@]}" "$b" "") || a=("${a[@]}" "$b")
done
$(which sed) "${a[@]}"
fi
}
# Create dynamic passwords and update domain
create_passwords() {
local domain_name=${DOMAIN_NAME:-$(yq e '.domainName' vars.yaml)}
if [[ -z $domain_name ]]; then
fatal 'DOMAIN_NAME variable is empty. Rerun the script with `DOMAIN_NAME=openreplay.mycomp.org bash init.sh`'
fi
info "Creating dynamic passwords"
templater -i vars.yaml -o vars.yaml
yq e -i '.global.domainName = strenv(DOMAIN_NAME)' vars.yaml
}
function set_permissions() {
info "Setting proper permission for shared folder"
sudo mkdir -p /openreplay/storage/nfs
sudo chown -R 1001:1001 /openreplay/storage/nfs
}
## Installing OpenReplay
function install_openreplay() {
[[ $OR_CORE_ONLY ]] || {
info "installing toolings"
helm uninstall tooling -n app || true
helm upgrade --install toolings ./toolings -n app --create-namespace --wait -f ./vars.yaml --atomic --debug ${HELM_OPTIONS}
}
info "installing databases"
helm upgrade --install databases ./databases -n db --create-namespace --wait -f ./vars.yaml --atomic --debug ${HELM_OPTIONS}
info "installing application"
helm upgrade --install openreplay ./openreplay -n app --create-namespace --wait -f ./vars.yaml --atomic --debug ${HELM_OPTIONS}
}
function conditional_step() {
local skip_var=$1
local action=$2
local message=$3
if [[ ${!skip_var} == "1" ]]; then
echo "$message"
else
$action
fi
}
function install_openreplay_actions() {
set_permissions
sudo mkdir -p /var/lib/openreplay
sudo cp -f openreplay-cli /bin/openreplay
install_openreplay
local openreplay_code_dir="/var/lib/openreplay/openreplay"
local openreplay_home_dir="/var/lib/openreplay"
if [[ -d $openreplay_code_dir ]]; then
local versions_file="/var/lib/openreplay/or_versions.txt"
date +%m-%d-%Y-%H%M%S | sudo tee -a $versions_file
sudo git log -1 2>&1 | sudo tee -a $versions_file
sudo rm -rf $openreplay_code_dir
fi
sudo cp -rfb ./vars.yaml $openreplay_home_dir
sudo cp -rf "$(cd ../.. && pwd)" $openreplay_code_dir
}
function main() {
conditional_step "SKIP_K8S_INSTALL" install_k8s "Skipping Kubernetes installation."
conditional_step "SKIP_K8S_TOOLS" install_tools "Skipping Kubernetes tools installation."
conditional_step "SKIP_ROTATE_SECRETS" create_passwords "Skipping secrets rotation."
conditional_step "SKIP_OR_INSTALL" install_openreplay_actions "Skipping OpenReplay installation."
}
main
info "Configuration file is saved in /var/lib/openreplay/vars.yaml"
info "You can delete the directory $(cd ../.. && pwd). Backup stored in /var/lib/openreplay"
info "Run ${BWHITE}openreplay -h${GREEN} to see the cli information to manage OpenReplay."