|
|
|
#!/usr/bin/env sh
|
|
|
|
|
|
|
|
# MULTIDEPLOY_CONFIG="default"
|
|
|
|
|
|
|
|
######## Public functions #####################
|
|
|
|
|
|
|
|
MULTIDEPLOY_VERSION="1.0"
|
|
|
|
MULTIDEPLOY_FILENAME="multideploy.yaml"
|
|
|
|
|
|
|
|
# domain keyfile certfile cafile fullchain pfx
|
|
|
|
multideploy_deploy() {
|
|
|
|
_cdomain="$1"
|
|
|
|
_ckey="$2"
|
|
|
|
_ccert="$3"
|
|
|
|
_cca="$4"
|
|
|
|
_cfullchain="$5"
|
|
|
|
_cpfx="$6"
|
|
|
|
|
|
|
|
_debug _cdomain "$_cdomain"
|
|
|
|
_debug _ckey "$_ckey"
|
|
|
|
_debug _ccert "$_ccert"
|
|
|
|
_debug _cca "$_cca"
|
|
|
|
_debug _cfullchain "$_cfullchain"
|
|
|
|
_debug _cpfx "$_cpfx"
|
|
|
|
|
|
|
|
DOMAIN_DIR=$_cdomain
|
|
|
|
if echo "$DOMAIN_PATH" | grep -q "$ECC_SUFFIX"; then
|
|
|
|
DOMAIN_DIR="$DOMAIN_DIR"_ecc
|
|
|
|
fi
|
|
|
|
_debug2 "DOMAIN_DIR" "$DOMAIN_DIR"
|
|
|
|
|
|
|
|
_preprocess_deployfile "$DOMAIN_DIR/$MULTIDEPLOY_FILENAME" || return 1
|
|
|
|
|
|
|
|
MULTIDEPLOY_CONFIG="${MULTIDEPLOY_CONFIG:-$(_getdeployconf MULTIDEPLOY_CONFIG)}"
|
|
|
|
if [ -z "$MULTIDEPLOY_CONFIG" ]; then
|
|
|
|
MULTIDEPLOY_CONFIG="default"
|
|
|
|
_info "MULTIDEPLOY_CONFIG is not set, so I will use 'default'."
|
|
|
|
else
|
|
|
|
_savedeployconf "MULTIDEPLOY_CONFIG" "$MULTIDEPLOY_CONFIG"
|
|
|
|
_debug2 "MULTIDEPLOY_CONFIG" "$MULTIDEPLOY_CONFIG"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# TODO: Deploy to services
|
|
|
|
}
|
|
|
|
|
|
|
|
#################### Private functions below #####################
|
|
|
|
|
|
|
|
# deploy_filepath
|
|
|
|
_preprocess_deployfile() {
|
|
|
|
_deploy_file="$1"
|
|
|
|
|
|
|
|
# Check if yq is installed
|
|
|
|
if ! command -v yq >/dev/null 2>&1; then
|
|
|
|
_err "yq is not installed! Please install yq and try again."
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check if deploy file exists and create a default template if not
|
|
|
|
if [ -f "$_deploy_file" ]; then
|
|
|
|
_debug3 "Deploy file found."
|
|
|
|
_check_deployfile "$_deploy_file" "$MULTIDEPLOY_CONFIG"
|
|
|
|
else
|
|
|
|
# TODO: Replace URL with wiki link
|
|
|
|
_err "Deploy file not found. Go to https://CHANGE_URL_TO_WIKI to see how to create one."
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# deploy_filepath _deploy_config
|
|
|
|
_check_deployfile() {
|
|
|
|
_deploy_file="$1"
|
|
|
|
_deploy_config="$3"
|
|
|
|
|
|
|
|
# Check version
|
|
|
|
_deploy_file_version=$(yq '.version' "$_deploy_file")
|
|
|
|
if [ "$MULTIDEPLOY_VERSION" != "$_deploy_file_version" ]; then
|
|
|
|
_err "As of $PROJECT_NAME $VER, the deploy file needs version $MULTIDEPLOY_VERSION! Your current deploy file is of version $_deploy_file_version."
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check if config exists
|
|
|
|
if ! yq e ".configs[] | select(.name == \"$_deploy_config\")" "$_deploy_file" >/dev/null; then
|
|
|
|
_err "Config '$_deploy_config' not found."
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Extract all services from config
|
|
|
|
_services=$(_get_services_list "$_deploy_file" "$_deploy_config")
|
|
|
|
|
|
|
|
if [ -z "$_services" ]; then
|
|
|
|
_err "Config '$_deploy_config' does not have any services to deploy to."
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check if extracted services exist in services list
|
|
|
|
for _service in $_services; do
|
|
|
|
if ! yq e ".services[] | select(.name == \"$_service\")" "$_deploy_file" >/dev/null; then
|
|
|
|
_err "Service '$_service' not found."
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check if service has hook
|
|
|
|
if ! yq e ".services[] | select(.name == \"$_service\").hook" "$_deploy_file" >/dev/null; then
|
|
|
|
_err "Service '$_service' does not have a hook."
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check if service has environment
|
|
|
|
if ! yq e ".services[] | select(.name == \"$_service\").environment" "$_deploy_file" >/dev/null; then
|
|
|
|
_err "Service '$_service' does not an environment."
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
# deploy_filepath deploy_config
|
|
|
|
_get_services_list() {
|
|
|
|
_deploy_file="$1"
|
|
|
|
_deploy_config="$2"
|
|
|
|
|
|
|
|
_services=$(yq e ".configs[] | select(.name == \"$_deploy_config\").services[]" "$_deploy_file")
|
|
|
|
echo "$_services"
|
|
|
|
}
|
|
|
|
|
|
|
|
# deploy_filepath service_names
|
|
|
|
_get_full_services_list() {
|
|
|
|
_deploy_file="$1"
|
|
|
|
shift
|
|
|
|
_service_names="$*"
|
|
|
|
|
|
|
|
_full_services=""
|
|
|
|
for _service in $_service_names; do
|
|
|
|
_full_service=$(yq e ".services[] | select(.name == \"$_service\")" "$_deploy_file")
|
|
|
|
_full_services="$_full_services
|
|
|
|
$_full_service"
|
|
|
|
done
|
|
|
|
|
|
|
|
echo "$_full_services"
|
|
|
|
}
|
|
|
|
|