165 lines
5.1 KiB
Bash
Executable File
165 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Default values
|
|
PG_VERSION=""
|
|
ZABBIX_VERSION=""
|
|
|
|
# Color codes
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
usage() {
|
|
echo "Usage: $0 --pg <16|17|18> --zabbix <7.0|7.4> [--rds] [--rds-drop]"
|
|
echo "Example: $0 --pg 16 --zabbix 7.0 [--rds-drop]"
|
|
exit 1
|
|
}
|
|
|
|
# Parse arguments
|
|
USE_RDS=false
|
|
DROP_RDS=false
|
|
while [[ "$#" -gt 0 ]]; do
|
|
case $1 in
|
|
--pg) PG_VERSION="$2"; shift ;;
|
|
--zabbix) ZABBIX_VERSION="$2"; shift ;;
|
|
--rds) USE_RDS=true ;;
|
|
--rds-drop) USE_RDS=true; DROP_RDS=true ;;
|
|
*) echo "Unknown parameter: $1"; usage ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [[ -z "$PG_VERSION" || -z "$ZABBIX_VERSION" ]]; then
|
|
echo -e "${RED}Error: detailed arguments required.${NC}"
|
|
usage
|
|
fi
|
|
|
|
# Map Zabbix version to sql-scripts folder
|
|
if [[ "$ZABBIX_VERSION" == "7.0" ]]; then
|
|
SQL_DIR="../sql-scripts-70"
|
|
elif [[ "$ZABBIX_VERSION" == "7.4" ]]; then
|
|
SQL_DIR="../sql-scripts-74"
|
|
else
|
|
echo -e "${RED}Error: Unsupported Zabbix version. Use 7.0 or 7.4.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}Preparing environment for PostgreSQL $PG_VERSION and Zabbix $ZABBIX_VERSION...${NC}"
|
|
|
|
# Cleanup previous run
|
|
echo "Cleaning up containers and volumes..."
|
|
docker compose down -v > /dev/null 2>&1
|
|
rm -rf init_scripts
|
|
mkdir -p init_scripts
|
|
|
|
# Symlink SQL scripts
|
|
echo "Setting up initialization scripts from $SQL_DIR..."
|
|
|
|
# 0. Extra Users
|
|
if [[ -f "../init_extra_users.sql" ]]; then
|
|
cp "../init_extra_users.sql" ./init_scripts/00_init_extra_users.sql
|
|
echo "Copied extra user init script."
|
|
fi
|
|
|
|
# 1. Schema
|
|
if [[ -f "$SQL_DIR/schema.sql" ]]; then
|
|
# Use 01_00 to ensure it comes before 01_10
|
|
cp "$SQL_DIR/schema.sql" ./init_scripts/01_00_schema.sql
|
|
|
|
# 1.1 Partitioning Infrastructure
|
|
if [[ -f "../procedures/00_schema_create.sql" ]]; then
|
|
cp "../procedures/00_schema_create.sql" ./init_scripts/01_10_schema_create.sql
|
|
fi
|
|
if [[ -f "../procedures/01_maintenance.sql" ]]; then
|
|
cp "../procedures/01_maintenance.sql" ./init_scripts/01_30_maintenance.sql
|
|
fi
|
|
if [[ -f "../procedures/02_enable_partitioning.sql" ]]; then
|
|
cp "../procedures/02_enable_partitioning.sql" ./init_scripts/01_40_enable.sql
|
|
fi
|
|
if [[ -f "../procedures/03_monitoring_view.sql" ]]; then
|
|
cp "../procedures/03_monitoring_view.sql" ./init_scripts/01_50_monitoring.sql
|
|
fi
|
|
else
|
|
echo -e "${RED}Error: schema.sql not found in $SQL_DIR${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 2. Images
|
|
if [[ -f "$SQL_DIR/images.sql" ]]; then
|
|
cp "$SQL_DIR/images.sql" ./init_scripts/02_images.sql
|
|
else
|
|
echo -e "${RED}Error: images.sql not found in $SQL_DIR${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 3. Data
|
|
if [[ -f "$SQL_DIR/data.sql" ]]; then
|
|
cp "$SQL_DIR/data.sql" ./init_scripts/03_data.sql
|
|
else
|
|
echo -e "${RED}Error: data.sql not found in $SQL_DIR${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 4. Mock History Data
|
|
if [[ -f "../z_gen_history_data.sql" ]]; then
|
|
cp "../z_gen_history_data.sql" ./init_scripts/04_gen_data.sql
|
|
echo "Copied mock data generator."
|
|
else
|
|
echo -e "${RED}Warning: z_gen_history_data.sql not found!${NC}"
|
|
fi
|
|
|
|
# Check logic for 7.4 vs 7.0 (file names might slightly differ or be organized differently if using packages,
|
|
# but assuming source layout provided)
|
|
|
|
# Export variable for Docker Compose
|
|
export PG_VERSION=$PG_VERSION
|
|
|
|
if [ "$USE_RDS" = "true" ]; then
|
|
echo -e "${GREEN}Deploying directly to RDS environment...${NC}"
|
|
if [ ! -f "../db_credentials" ]; then
|
|
echo -e "${RED}Error: ../db_credentials file not found. Please create it first.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Initialize RDS (create/drop user and db)
|
|
if [ "$DROP_RDS" = "true" ]; then
|
|
echo "Initializing Zabbix RDS user and database (with DROP requested)..."
|
|
bash ../setup_rds.sh --drop
|
|
else
|
|
echo "Initializing Zabbix RDS user and database..."
|
|
bash ../setup_rds.sh
|
|
fi
|
|
|
|
source ../db_credentials
|
|
export PGPASSWORD="$ZBX_DB_PASSWORD"
|
|
|
|
echo "Applying scripts from init_scripts/ to RDS..."
|
|
for sql_file in $(ls ./init_scripts/*.sql | sort); do
|
|
echo "Executing $sql_file..."
|
|
psql "host=$DB_HOST port=$DB_PORT dbname=$ZBX_DB_NAME user=$ZBX_DB_USER sslmode=$DB_SSL_MODE sslrootcert=../$DB_SSL_ROOT_CERT" -f "$sql_file" -v ON_ERROR_STOP=1
|
|
done
|
|
|
|
echo -e "${GREEN}RDS Environment ready.${NC}"
|
|
echo "Connect: psql \"host=$DB_HOST port=$DB_PORT dbname=$ZBX_DB_NAME user=$ZBX_DB_USER sslmode=$DB_SSL_MODE sslrootcert=../$DB_SSL_ROOT_CERT\""
|
|
else
|
|
# Run Docker Compose
|
|
echo -e "${GREEN}Starting PostgreSQL container...${NC}"
|
|
docker compose up -d
|
|
|
|
echo -e "${GREEN}Waiting for database to be ready...${NC}"
|
|
# Simple wait loop
|
|
for i in {1..30}; do
|
|
if docker exec zabbix-db-test pg_isready -U zabbix > /dev/null 2>&1; then
|
|
echo -e "${GREEN}Database is ready!${NC}"
|
|
break
|
|
fi
|
|
echo -n "."
|
|
sleep 1
|
|
done
|
|
|
|
# Check if data generation finished
|
|
echo "To follow initialization logs, run: docker logs -f zabbix-db-test"
|
|
echo -e "${GREEN}Environment ready.${NC}"
|
|
echo "Connect: psql -h localhost -p 5432 -U zabbix -d zabbix"
|
|
fi
|