mirror of
https://github.com/versity/versitygw.git
synced 2026-07-02 16:54:25 +00:00
243 lines
6.9 KiB
Bash
243 lines
6.9 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Copyright 2024 Versity Software
|
|
# This file is licensed under the Apache License, Version 2.0
|
|
# (the "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http:#www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
source ./tests/commands/list_buckets.sh
|
|
|
|
start_versity_process() {
|
|
if ! check_param_count_gt "versity app index, command array" 2 $#; then
|
|
exit 1
|
|
fi
|
|
local response process_id
|
|
|
|
if ! response=$(build_run_and_log_command "$1" "${@:2}" 2>&1); then
|
|
log 2 "error building, logging, and/or running 'versitygw' executable: $response"
|
|
return 1
|
|
fi
|
|
process_id="$response"
|
|
|
|
printf -v "VERSITYGW_PID_$1" '%s' "$process_id"
|
|
export VERSITYGW_PID_"$1"
|
|
|
|
return 0
|
|
}
|
|
|
|
build_run_and_log_command() {
|
|
if ! check_param_count_gt "versitygw process number (1 or 2), command array" 2 $#; then
|
|
return 1
|
|
fi
|
|
local response full_command versitygw_log_file_name="" pid check_result
|
|
|
|
IFS=' ' read -r -a full_command <<< "${@:2}"
|
|
log 5 "versity command: ${full_command[*]}"
|
|
if [ -n "$COMMAND_LOG" ]; then
|
|
if ! response=$(mask_args "${full_command[*]}" 2>&1); then
|
|
log 2 "error masking versitygw command"
|
|
return 1
|
|
fi
|
|
# shellcheck disable=SC2154
|
|
echo "$response" >> "$COMMAND_LOG"
|
|
fi
|
|
if [ -n "$VERSITY_LOG_FILE" ]; then
|
|
versitygw_log_file_name="$VERSITY_LOG_FILE.$TEST_ID".$1
|
|
echo "****************************** VERSITYGW $1 LOG ***********************************" >> "$versitygw_log_file_name"
|
|
"${full_command[@]}" >> "$versitygw_log_file_name" 2>&1 &
|
|
else
|
|
"${full_command[@]}" >/dev/null 2>&1 &
|
|
fi
|
|
|
|
pid="$!"
|
|
if ! verify_process_started "$pid" "$versitygw_log_file_name"; then
|
|
return 1
|
|
fi
|
|
|
|
echo "$pid"
|
|
return 0
|
|
}
|
|
|
|
verify_process_started() {
|
|
if ! check_param_count_ge_le "pid, log file (if any)" 1 2 $#; then
|
|
return 1
|
|
fi
|
|
local check_result process_running="false" proc_state
|
|
|
|
for ((check_num=1; check_num<=3; check_num++)); do
|
|
sleep 1
|
|
if [ "$process_running" == "false" ] && check_result=$(kill -0 "$1" 2>&1); then
|
|
process_running="true"
|
|
fi
|
|
if [ "$process_running" == "true" ]; then
|
|
proc_state=$(ps -p "$1" -o state= 2>/dev/null | tr -d ' ')
|
|
if [ "$proc_state" != "Z" ] && list_buckets_rest "" "" >/dev/null; then
|
|
return 0
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [ "$process_running" == "false" ]; then
|
|
log 1 "versitygw failed to start or crashed: $check_result"
|
|
elif [[ "$proc_state" == "Z" ]]; then
|
|
log 1 "versitygw process running in zombie state"
|
|
else
|
|
log 1 "process running in state '$proc_state', but not communicating properly"
|
|
fi
|
|
if [[ -n "$2" ]]; then
|
|
log 1 "log data: '$(cat "$2")'"
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
run_versity_app_posix() {
|
|
if ! check_param_count "run_versity_app_posix" "access ID, secret key, versityid app index" 3 $#; then
|
|
return 1
|
|
fi
|
|
base_command=("$VERSITY_EXE" --access="$1" --secret="$2" --region="$AWS_REGION")
|
|
if [ -n "$RUN_USERS" ]; then
|
|
# shellcheck disable=SC2153
|
|
IFS=' ' read -r -a iam_array <<< "$IAM_PARAMS"
|
|
fi
|
|
base_command+=("${iam_array[@]}")
|
|
if [ -n "$CERT" ] && [ -n "$KEY" ]; then
|
|
base_command+=(--cert "$CERT" --key "$KEY")
|
|
fi
|
|
if [ -n "$PORT" ]; then
|
|
base_command+=(--port ":$PORT")
|
|
fi
|
|
base_command+=(posix)
|
|
if [ -n "$VERSIONING_DIR" ]; then
|
|
base_command+=(--versioning-dir "$VERSIONING_DIR")
|
|
fi
|
|
base_command+=("$LOCAL_FOLDER")
|
|
|
|
if ! start_versity_process "$3" "${base_command[@]}"; then
|
|
log 1 "error starting versity process"
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
run_versity_app_scoutfs() {
|
|
if ! check_param_count "run_versity_app_scoutfs" "access ID, secret key, versityid app index" 3 $#; then
|
|
return 1
|
|
fi
|
|
base_command=("$VERSITY_EXE" --access="$1" --secret="$2" --region="$AWS_REGION" --iam-dir="$USERS_FOLDER")
|
|
if [ -n "$CERT" ] && [ -n "$KEY" ]; then
|
|
base_command+=(--cert "$CERT" --key "$KEY")
|
|
fi
|
|
if [ -n "$PORT" ]; then
|
|
base_command+=(--port ":$PORT")
|
|
fi
|
|
base_command+=(scoutfs "$LOCAL_FOLDER")
|
|
|
|
if ! start_versity_process "$3" "${base_command[@]}"; then
|
|
log 1 "error starting versity process"
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
run_versity_app_s3() {
|
|
if ! check_param_count "run_versity_app_s3" "versityid app index" 1 $#; then
|
|
return 1
|
|
fi
|
|
base_command=("$VERSITY_EXE" --access="$AWS_ACCESS_KEY_ID" --secret="$AWS_SECRET_ACCESS_KEY" --region="$AWS_REGION")
|
|
if [ -n "$CERT" ] && [ -n "$KEY" ]; then
|
|
base_command+=(--cert "$CERT" --key "$KEY")
|
|
fi
|
|
if [ -n "$PORT_TWO" ]; then
|
|
base_command+=(--port ":$PORT_TWO")
|
|
else
|
|
base_command+=(--port ":7071")
|
|
fi
|
|
base_command+=(s3 --access="$AWS_ACCESS_KEY_ID_TWO" --secret="$AWS_SECRET_ACCESS_KEY_TWO" --region="$AWS_REGION" --endpoint=https://s3.amazonaws.com)
|
|
|
|
if ! start_versity_process "$1" "${base_command[@]}"; then
|
|
log 2 "error starting versity process"
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
run_versity_app() {
|
|
if [[ $BACKEND == 'posix' ]]; then
|
|
if ! run_versity_app_posix "$AWS_ACCESS_KEY_ID" "$AWS_SECRET_ACCESS_KEY" "1"; then
|
|
return 1
|
|
fi
|
|
elif [[ $BACKEND == 'scoutfs' ]]; then
|
|
if ! run_versity_app_scoutfs "$AWS_ACCESS_KEY_ID" "$AWS_SECRET_ACCESS_KEY" "1"; then
|
|
return 1
|
|
fi
|
|
elif [[ $BACKEND == 's3' ]]; then
|
|
if ! run_versity_app_posix "$AWS_ACCESS_KEY_ID" "$AWS_SECRET_ACCESS_KEY" "1"; then
|
|
return 1
|
|
fi
|
|
if ! run_versity_app_s3 "2"; then
|
|
return 1
|
|
fi
|
|
else
|
|
log 1 "unrecognized backend type $BACKEND"
|
|
return 1
|
|
fi
|
|
if [[ $IAM_TYPE != "s3" ]]; then
|
|
return 0
|
|
fi
|
|
if bucket_exists "$USERS_BUCKET"; then
|
|
return 0
|
|
fi
|
|
if ! create_bucket "s3api" "$USERS_BUCKET"; then
|
|
log 1 "error creating IAM bucket"
|
|
teardown
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
stop_versity_process() {
|
|
if ! check_param_count "stop_single_process" "versitygw PID" 1 $#; then
|
|
return 1
|
|
fi
|
|
log 5 "stop process with ID: $1"
|
|
# shellcheck disable=SC2086
|
|
if ps_result=$(ps -p $1 2>&1) > /dev/null; then
|
|
kill "$1"
|
|
wait "$1" 2>/dev/null || true
|
|
else
|
|
log 3 "error stopping versity app: $ps_result"
|
|
fi
|
|
}
|
|
|
|
check_versity_process_status() {
|
|
local status_one="" status_two=""
|
|
|
|
status_one="none"
|
|
status_two="none"
|
|
if [ "$RUN_VERSITYGW" == "true" ]; then
|
|
if [[ -n "$VERSITYGW_PID_1" ]] && verify_process_started "$VERSITYGW_PID_1" >/dev/null; then
|
|
status_one="running"
|
|
else
|
|
status_one="failed"
|
|
fi
|
|
if [ "$BACKEND" == "s3" ]; then
|
|
if [ -n "$VERSITYGW_PID_2" ] && verify_process_started "$VERSITYGW_PID_2" >/dev/null; then
|
|
status_two="running"
|
|
else
|
|
status_two="failed"
|
|
fi
|
|
fi
|
|
fi
|
|
echo "$status_one $status_two"
|
|
return 0
|
|
}
|