136 lines
4.3 KiB
Bash
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."
|