You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

138 lines
3.6 KiB

#!/bin/bash
# Deploy a tenant to Kubernetes in enterprise mode
# Usage: ./deploy-tenant.sh <tenant-npub> [options]
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Check if tenant ID is provided
if [ -z "$1" ]; then
echo -e "${RED}Error: Tenant ID (npub) is required${NC}"
echo "Usage: $0 <tenant-npub> [--domain <domain>] [--storage-class <class>] [--storage-size <size>] [--subdomain <subdomain>]"
echo ""
echo "Example:"
echo " $0 npub1abc123... --domain git.example.com --storage-class fast-ssd --storage-size 50Gi"
exit 1
fi
TENANT_ID="$1"
shift
# Default values
GIT_DOMAIN="${GIT_DOMAIN:-git.example.com}"
STORAGE_CLASS="${STORAGE_CLASS:-standard}"
STORAGE_SIZE="${STORAGE_SIZE:-100Gi}"
TENANT_SUBDOMAIN="${TENANT_SUBDOMAIN:-${TENANT_ID:0:16}}"
NOSTR_RELAYS="${NOSTR_RELAYS:-wss://theforest.nostr1.com,wss://nostr.land}"
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--domain)
GIT_DOMAIN="$2"
shift 2
;;
--storage-class)
STORAGE_CLASS="$2"
shift 2
;;
--storage-size)
STORAGE_SIZE="$2"
shift 2
;;
--subdomain)
TENANT_SUBDOMAIN="$2"
shift 2
;;
--relays)
NOSTR_RELAYS="$2"
shift 2
;;
*)
echo -e "${RED}Unknown option: $1${NC}"
exit 1
;;
esac
done
# Validate tenant ID format (basic check)
if [[ ! "$TENANT_ID" =~ ^npub1[a-z0-9]+$ ]]; then
echo -e "${YELLOW}Warning: Tenant ID doesn't look like a valid npub format${NC}"
read -p "Continue anyway? (y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
echo -e "${GREEN}Deploying tenant: ${TENANT_ID}${NC}"
echo " Domain: ${GIT_DOMAIN}"
echo " Subdomain: ${TENANT_SUBDOMAIN}"
echo " Storage Class: ${STORAGE_CLASS}"
echo " Storage Size: ${STORAGE_SIZE}"
echo ""
# Export variables for envsubst
export TENANT_ID
export GIT_DOMAIN
export STORAGE_CLASS
export STORAGE_SIZE
export TENANT_SUBDOMAIN
export NOSTR_RELAYS
# Check if kubectl is available
if ! command -v kubectl &> /dev/null; then
echo -e "${RED}Error: kubectl is not installed or not in PATH${NC}"
exit 1
fi
# Check if we can connect to cluster
if ! kubectl cluster-info &> /dev/null; then
echo -e "${RED}Error: Cannot connect to Kubernetes cluster${NC}"
exit 1
fi
# Get the directory where this script is located
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BASE_DIR="${SCRIPT_DIR}/base"
echo -e "${GREEN}Creating namespace...${NC}"
envsubst < "${BASE_DIR}/namespace.yaml" | kubectl apply -f -
echo -e "${GREEN}Creating resource quota...${NC}"
envsubst < "${BASE_DIR}/resource-quota.yaml" | kubectl apply -f -
echo -e "${GREEN}Creating limit range...${NC}"
envsubst < "${BASE_DIR}/limit-range.yaml" | kubectl apply -f -
echo -e "${GREEN}Creating persistent volume claim...${NC}"
envsubst < "${BASE_DIR}/pvc.yaml" | kubectl apply -f -
echo -e "${GREEN}Creating deployment...${NC}"
envsubst < "${BASE_DIR}/deployment.yaml" | kubectl apply -f -
echo -e "${GREEN}Creating service...${NC}"
envsubst < "${BASE_DIR}/service.yaml" | kubectl apply -f -
echo -e "${GREEN}Creating network policy...${NC}"
envsubst < "${BASE_DIR}/network-policy.yaml" | kubectl apply -f -
echo -e "${GREEN}Creating ingress...${NC}"
envsubst < "${BASE_DIR}/ingress.yaml" | kubectl apply -f -
echo ""
echo -e "${GREEN}✓ Tenant deployed successfully!${NC}"
echo ""
echo "To check status:"
echo " kubectl get all -n gitrepublic-tenant-${TENANT_ID}"
echo ""
echo "To view logs:"
echo " kubectl logs -n gitrepublic-tenant-${TENANT_ID} -l app=gitrepublic"
echo ""
echo "To delete tenant:"
echo " kubectl delete namespace gitrepublic-tenant-${TENANT_ID}"