#!/usr/bin/env bash set -euo pipefail # CISD init on-host precheck. # Usage: # chmod +x scripts/cisd_init_precheck.sh # ./scripts/cisd_init_precheck.sh # Optional: # PRODUCT_TYPE=ENTERPRISE ./scripts/cisd_init_precheck.sh PRODUCT_TYPE="${PRODUCT_TYPE:-${TMS_CISD_PRESET_PRODUCT_TYPE:-UNKNOWN}}" MODE="${TMS_INIT_EXECUTOR_MODE:-SIMULATE}" LOG_DIR="${TMS_INIT_EXECUTOR_LOG_DIR:-/tmp/tms-init-logs}" STANDARD_CPCONFIG_PATH="${TMS_INIT_EXECUTOR_STANDARD_CPCONFIG_PATH:-/home/cmep4i/cpconfig.cfg}" DIRECT_DB_SCRIPT_DIR="${TMS_INIT_EXECUTOR_DIRECT_DB_SCRIPT_DIR:-/opt/CAE_Install_Base_Resource/DB}" DIRECT_TLQ_INIT_CFG_DIR="${TMS_INIT_EXECUTOR_DIRECT_TLQ_INIT_CFG_DIR:-/opt/CAE_Install_App_Resource/CAE}" APP_PATTERN_1="${TMS_INIT_EXECUTOR_STANDARD_RABBIT_APP_CONFIG_PATTERN_1:-/home/cmep4i/cmsp/application-prd*.properties}" APP_PATTERN_2="${TMS_INIT_EXECUTOR_STANDARD_RABBIT_APP_CONFIG_PATTERN_2:-/home/cmep4i/cmtp/application-prd*.properties}" RABBIT_CRED_ENCRYPT_ENABLED="${TMS_INIT_EXECUTOR_STANDARD_RABBIT_CREDENTIAL_ENCRYPT_ENABLED:-true}" RABBIT_CRED_SECRET_KEY="${TMS_INIT_EXECUTOR_STANDARD_RABBIT_CREDENTIAL_SECRET_KEY:-ABCDEFGHIJKLMN1234567890}" pass_count=0 warn_count=0 fail_count=0 pass() { echo "[PASS] $1" pass_count=$((pass_count + 1)) } warn() { echo "[WARN] $1" warn_count=$((warn_count + 1)) } fail() { echo "[FAIL] $1" fail_count=$((fail_count + 1)) } check_cmd() { local cmd="$1" if command -v "$cmd" >/dev/null 2>&1; then pass "command exists: ${cmd}" else fail "command missing: ${cmd}" fi } check_file() { local file="$1" if [[ -f "$file" ]]; then pass "file exists: ${file}" else fail "file missing: ${file}" fi } check_dir() { local dir="$1" if [[ -d "$dir" ]]; then pass "directory exists: ${dir}" else fail "directory missing: ${dir}" fi } check_writable_dir() { local dir="$1" mkdir -p "$dir" 2>/dev/null || true if [[ -d "$dir" && -w "$dir" ]]; then pass "directory writable: ${dir}" else fail "directory not writable: ${dir}" fi } check_pattern_match() { local pattern="$1" shopt -s nullglob local matches=($pattern) shopt -u nullglob if (( ${#matches[@]} > 0 )); then pass "pattern matched (${#matches[@]}): ${pattern}" else fail "pattern has no match: ${pattern}" fi } check_product_type() { case "$PRODUCT_TYPE" in ENTERPRISE|INDIRECT|DIRECT) pass "product type recognized: ${PRODUCT_TYPE}" ;; *) fail "product type invalid: ${PRODUCT_TYPE} (expected ENTERPRISE/INDIRECT/DIRECT)" ;; esac } check_mode() { if [[ "$MODE" == "LOCAL" ]]; then pass "executor mode is LOCAL" else warn "executor mode is ${MODE}; on-host initialization should use LOCAL" fi } check_encryption_config() { local enabled_lower enabled_lower="$(echo "$RABBIT_CRED_ENCRYPT_ENABLED" | tr '[:upper:]' '[:lower:]')" if [[ "$enabled_lower" == "true" ]]; then pass "rabbit app credential encryption is enabled" if [[ -n "$RABBIT_CRED_SECRET_KEY" ]]; then if [[ ${#RABBIT_CRED_SECRET_KEY} -eq 24 ]]; then pass "rabbit credential secret key length is 24 (DESede)" else warn "rabbit credential secret key length is ${#RABBIT_CRED_SECRET_KEY}, expected 24" fi else fail "rabbit credential secret key is empty" fi else warn "rabbit app credential encryption disabled" fi } check_standard_assets() { check_file "$STANDARD_CPCONFIG_PATH" check_file "/home/cmep4i/cpackage/toolsh/setfraq.sh" check_file "/home/cmep4i/cpackage/toolsh/setftq.sh" check_file "/home/cmep4i/cpackage/toolsh/setsql.sh" check_file "/home/cmep4i/cpackage/toolsh/setsptp.sh" check_pattern_match "$APP_PATTERN_1" check_pattern_match "$APP_PATTERN_2" check_cmd "rabbitmqctl" check_cmd "rabbitmqadmin" } check_direct_assets() { check_file "$STANDARD_CPCONFIG_PATH" check_dir "$DIRECT_DB_SCRIPT_DIR" check_file "$DIRECT_DB_SCRIPT_DIR/setsql.sh" check_dir "$DIRECT_TLQ_INIT_CFG_DIR" check_file "$DIRECT_TLQ_INIT_CFG_DIR/init_cfg.sh" check_cmd "java" check_cmd "rabbitmqctl" } main() { echo "[INFO] CISD init precheck started" echo "[INFO] PRODUCT_TYPE=${PRODUCT_TYPE}" echo "[INFO] MODE=${MODE}" echo "[INFO] LOG_DIR=${LOG_DIR}" check_product_type check_mode check_writable_dir "$LOG_DIR" check_encryption_config if [[ "$PRODUCT_TYPE" == "DIRECT" ]]; then check_direct_assets else check_standard_assets fi echo "[INFO] precheck summary: pass=${pass_count}, warn=${warn_count}, fail=${fail_count}" if (( fail_count > 0 )); then exit 2 fi } main "$@"