mirror of
https://github.com/outbackdingo/cozystack.git
synced 2026-01-27 18:18:41 +00:00
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes - **New Features** - Introduced a new script for managing Helm releases in Kubernetes, including installation and status monitoring. - Added a configuration file for tenant settings, enabling monitoring and SeaweedFS. - Enhanced PostgreSQL initialization script to manage database roles and privileges dynamically. - Added a new local pre-commit hook for version map checks. - **Bug Fixes** - Updated pre-commit hooks for consistent formatting. - **Tests** - Improved testing capabilities for applications in a Kubernetes environment with new Makefile targets. - Enhanced Docker image with tools for YAML and JSON processing. - Updated testing image to the latest version for improved performance. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Andrei Kvapil <kvapss@gmail.com> Co-authored-by: Andrei Kvapil <kvapss@gmail.com>
136 lines
3.8 KiB
Bash
Executable File
136 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
RESET='\033[0m'
|
|
YELLOW='\033[0;33m'
|
|
|
|
|
|
ROOT_NS="tenant-root"
|
|
TEST_TENANT="tenant-e2e"
|
|
|
|
function clean() {
|
|
kubectl delete helmrelease.helm.toolkit.fluxcd.io $TEST_TENANT -n $ROOT_NS
|
|
if true; then
|
|
echo -e "${GREEN}Cleanup successful!${RESET}"
|
|
return 0
|
|
else
|
|
echo -e "${RED}Cleanup failed!${RESET}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
function install_helmrelease() {
|
|
local release_name="$1"
|
|
local namespace="$2"
|
|
local chart_path="$3"
|
|
local repo_name="$4"
|
|
local repo_ns="$5"
|
|
local values_file="$6"
|
|
|
|
if [[ -z "$release_name" ]]; then
|
|
echo -e "${RED}Error: Release name is required.${RESET}"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$namespace" ]]; then
|
|
echo -e "${RED}Error: Namespace name is required.${RESET}"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$chart_path" ]]; then
|
|
echo -e "${RED}Error: Chart path name is required.${RESET}"
|
|
exit 1
|
|
fi
|
|
|
|
local helmrelease_file=$(mktemp /tmp/HelmRelease.XXXXXX.yaml)
|
|
{
|
|
echo "apiVersion: helm.toolkit.fluxcd.io/v2"
|
|
echo "kind: HelmRelease"
|
|
echo "metadata:"
|
|
echo " labels:"
|
|
echo " cozystack.io/ui: \"true\""
|
|
echo " name: \"$release_name\""
|
|
echo " namespace: \"$namespace\""
|
|
echo "spec:"
|
|
echo " chart:"
|
|
echo " spec:"
|
|
echo " chart: \"$chart_path\""
|
|
echo " reconcileStrategy: Revision"
|
|
echo " sourceRef:"
|
|
echo " kind: HelmRepository"
|
|
echo " name: \"$repo_name\""
|
|
echo " namespace: \"$repo_ns\""
|
|
echo " version: '*'"
|
|
echo " interval: 1m0s"
|
|
echo " timeout: 5m0s"
|
|
|
|
if [[ -n "$values_file" && -f "$values_file" ]]; then
|
|
echo " values:"
|
|
cat "$values_file" | sed 's/^/ /'
|
|
fi
|
|
} > "$helmrelease_file"
|
|
|
|
kubectl apply -f "$helmrelease_file"
|
|
|
|
rm -f "$helmrelease_file"
|
|
}
|
|
|
|
function install_tenant (){
|
|
local release_name="$1"
|
|
local namespace="$2"
|
|
local values_file="${3:-tenant.yaml}"
|
|
local repo_name="cozystack-apps"
|
|
local repo_ns="cozy-public"
|
|
|
|
install_helmrelease "$release_name" "$namespace" "tenant" "$repo_name" "$repo_ns" "$values_file"
|
|
}
|
|
|
|
function check_helmrelease_status() {
|
|
local release_name="$1"
|
|
local namespace="$2"
|
|
local timeout=300 # Timeout in seconds
|
|
local interval=5 # Interval between checks in seconds
|
|
local elapsed=0
|
|
|
|
while [[ $elapsed -lt $timeout ]]; do
|
|
local status_output
|
|
status_output=$(kubectl get helmrelease "$release_name" -n "$namespace" -o json | jq -r '.status.conditions[-1].reason')
|
|
|
|
if [[ "$status_output" == "InstallSucceeded" ]]; then
|
|
echo -e "${GREEN}Helm release '$release_name' is ready.${RESET}"
|
|
return 0
|
|
elif [[ "$status_output" == "InstallFailed" ]]; then
|
|
echo -e "${RED}Helm release '$release_name': InstallFailed${RESET}"
|
|
exit 1
|
|
else
|
|
echo -e "${YELLOW}Helm release '$release_name' is not ready. Current status: $status_output${RESET}"
|
|
fi
|
|
|
|
sleep "$interval"
|
|
elapsed=$((elapsed + interval))
|
|
done
|
|
|
|
echo -e "${RED}Timeout reached. Helm release '$release_name' is still not ready after $timeout seconds.${RESET}"
|
|
exit 1
|
|
}
|
|
|
|
chart_name="$1"
|
|
|
|
if [ -z "$chart_name" ]; then
|
|
echo -e "${RED}No chart name provided. Exiting...${RESET}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Running tests for chart: $chart_name"
|
|
install_tenant $TEST_TENANT $ROOT_NS
|
|
check_helmrelease_status $TEST_TENANT $ROOT_NS
|
|
|
|
repo_name="cozystack-apps"
|
|
repo_ns="cozy-public"
|
|
|
|
release_name="$chart_name-e2e"
|
|
install_helmrelease "$release_name" "$TEST_TENANT" "$chart_name" "$repo_name" "$repo_ns"
|
|
|
|
check_helmrelease_status "$release_name" "$TEST_TENANT"
|