[bitnami/harbor-jobservice] Release 2.6.2-debian-11-r10 (#16414)

Signed-off-by: Bitnami Containers <bitnami-bot@vmware.com>

Signed-off-by: Bitnami Containers <bitnami-bot@vmware.com>
This commit is contained in:
Bitnami Bot 2022-12-10 00:23:16 +01:00 committed by GitHub
parent d3d7dfcb58
commit f61d391c60
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 573 additions and 22 deletions

View File

@ -4,7 +4,7 @@ ARG TARGETARCH
LABEL org.opencontainers.image.authors="https://bitnami.com/contact" \
org.opencontainers.image.description="Application packaged by Bitnami" \
org.opencontainers.image.ref.name="2.6.2-debian-11-r9" \
org.opencontainers.image.ref.name="2.6.2-debian-11-r10" \
org.opencontainers.image.source="https://github.com/bitnami/containers/tree/main/bitnami/harbor-jobservice" \
org.opencontainers.image.title="harbor-jobservice" \
org.opencontainers.image.vendor="VMware, Inc." \

View File

@ -0,0 +1,29 @@
#!/bin/bash
#
# Environment configuration for harbor-jobservice
# The values for all environment variables will be set in the below order of precedence
# 1. Custom environment variables defined below after Bitnami defaults
# 2. Constants defined in this file (environment variables with no default), i.e. BITNAMI_ROOT_DIR
# 3. Environment variables overridden via external files using *_FILE variables (see below)
# 4. Environment variables set externally (i.e. current Bash context/Dockerfile/userdata)
# Load logging library
# shellcheck disable=SC1090,SC1091
. /opt/bitnami/scripts/liblog.sh
export BITNAMI_ROOT_DIR="/opt/bitnami"
export BITNAMI_VOLUME_DIR="/bitnami"
# Logging configuration
export MODULE="${MODULE:-harbor-jobservice}"
export BITNAMI_DEBUG="${BITNAMI_DEBUG:-false}"
# Paths
export HARBOR_JOBSERVICE_BASE_DIR="${BITNAMI_ROOT_DIR}/harbor-jobservice"
# System users
export HARBOR_JOBSERVICE_DAEMON_USER="harbor"
export HARBOR_JOBSERVICE_DAEMON_GROUP="harbor"
# Custom environment variables may be defined below

View File

@ -5,7 +5,7 @@
set -o errexit
set -o nounset
set -o pipefail
#set -o xtrace
# set -o xtrace # Uncomment this line for debugging purposes
# Load libraries
. /opt/bitnami/scripts/libbitnami.sh
@ -13,9 +13,9 @@ set -o pipefail
print_welcome_page
if [[ "$1" = "/opt/bitnami/scripts/harbor-jobservice/run.sh" ]]; then
info "** Starting Harbor Job Service setup **"
info "** Starting harbor-jobservice setup **"
/opt/bitnami/scripts/harbor-jobservice/setup.sh
info "** Harbor Job Service setup finished! **"
info "** harbor-jobservice setup finished! **"
fi
echo ""

View File

@ -2,18 +2,29 @@
# shellcheck disable=SC1091
set -o errexit
set -o nounset
set -o pipefail
# set -o xtrace # Uncomment this line for debugging purposes
# Load libraries
. /opt/bitnami/scripts/libfs.sh
. /opt/bitnami/scripts/libos.sh
. /opt/bitnami/scripts/libservice.sh
. /opt/bitnami/scripts/libharbor.sh
# Load environment
. /opt/bitnami/scripts/harbor-jobservice-env.sh
ensure_user_exists "$HARBOR_JOBSERVICE_DAEMON_USER" --group "$HARBOR_JOBSERVICE_DAEMON_GROUP"
# Ensure a set of directories exist and the non-root user has write privileges to them
read -r -a directories <<<"$(get_system_cert_paths)"
directories+=("/var/log/jobs")
# Ensure a set of directories exist
# Ensure the non-root user has writing permission at a set of directories
for dir in "${directories[@]}"; do
ensure_dir_exists "$dir"
chmod -R g+rwX "$dir"
chown -R "$HARBOR_JOBSERVICE_DAEMON_USER" "$dir"
done
ensure_dir_exists "/etc/jobservice"

View File

@ -5,13 +5,23 @@
set -o errexit
set -o nounset
set -o pipefail
#set -o xtrace
# set -o xtrace # Uncomment this line for debugging purposes
# Load libraries
. /opt/bitnami/scripts/liblog.sh
. /opt/bitnami/scripts/libos.sh
readonly cmd=$(command -v harbor_jobservice)
readonly flags=("-c" "/etc/jobservice/config.yml" "$@")
# Load harbor-jobservice environment
. /opt/bitnami/scripts/harbor-jobservice-env.sh
info "** Starting Harbor Job Service **"
exec "${cmd}" "${flags[@]}"
CMD="$(command -v harbor_jobservice)"
FLAGS=("-c" "/etc/jobservice/config.yml" "$@")
cd "$HARBOR_JOBSERVICE_BASE_DIR"
info "** Starting harbor-jobservice **"
if am_i_root; then
exec gosu "$HARBOR_JOBSERVICE_DAEMON_USER" "$CMD" "${FLAGS[@]}"
else
exec "$CMD" "${FLAGS[@]}"
fi

View File

@ -5,7 +5,7 @@
set -o errexit
set -o nounset
set -o pipefail
# set -o xtrace
# set -o xtrace # Uncomment this line for debugging purposes
# Load libraries
. /opt/bitnami/scripts/liblog.sh
@ -13,6 +13,9 @@ set -o pipefail
. /opt/bitnami/scripts/libvalidations.sh
. /opt/bitnami/scripts/libharbor.sh
# Load environment
. /opt/bitnami/scripts/harbor-jobservice-env.sh
# Auxiliar Functions
########################
@ -66,14 +69,14 @@ not_empty_env_var() {
}
########################
# Validate Job Service settings
# Validate harbor-jobservice settings
# Arguments:
# None
# Returns:
# None
#########################
harbor_jobservice_validate() {
info "Validating Job Service settings..."
info "Validating harbor-jobservice settings..."
if [[ ! -f "/etc/jobservice/config.yml" ]]; then
error "No configuration file was detected. Please mount your configuration file at \"/etc/jobservice/config.yml\""
@ -84,7 +87,6 @@ harbor_jobservice_validate() {
not_empty_setting "JOB_SERVICE_PORT" "port"
not_empty_setting "JOB_SERVICE_POOL_WORKERS" "worker_pool.workers"
not_empty_setting "JOB_SERVICE_POOL_BACKEND" "worker_pool.backend"
not_empty_env_var "JOBSERVICE_SECRET"
if [[ "${JOB_SERVICE_PROTOCOL:-$(harbor_jobservice_conf_get "protocol")}" != "http" ]] &&
[[ "${JOB_SERVICE_PROTOCOL:-$(harbor_jobservice_conf_get "protocol")}" != "https" ]]; then
@ -101,7 +103,7 @@ harbor_jobservice_validate() {
########################
# Check if Harbor Core API is reported as healthy
# Check if harbor-core API is reported as healthy
# Globals:
# CORE_URL
# Arguments:
@ -110,6 +112,10 @@ harbor_jobservice_validate() {
# Boolean
#########################
is_harbor_core_ready() {
if [[ -n "${HARBOR_JOBSERVICE_CFG_CORE_URL:-}" && -z "${CORE_URL:-}" ]]; then
# Hack to support VMs approach to initializing Harbor components
export CORE_URL="$HARBOR_JOBSERVICE_CFG_CORE_URL"
fi
not_empty_env_var "CORE_URL"
local -r status="$(yq eval '.components[]|select(.name == "core").status' - <<<"$(curl -s "${CORE_URL}/api/v2.0/health")")"
@ -117,7 +123,7 @@ is_harbor_core_ready() {
}
########################
# Waits for Harbor Core to be ready
# Waits for harbor-core to be ready
# Times out after 60 seconds
# Globals:
# INFLUXDB_*
@ -127,15 +133,15 @@ is_harbor_core_ready() {
# None
########################
wait_for_harbor_core() {
info "Waiting for Harbor Core to be started and ready"
info "Waiting for harbor-core to be started and ready"
if ! retry_while "is_harbor_core_ready"; then
error "Timeout waiting for Harbor Core to be available"
error "Timeout waiting for harbor-core to be available"
return 1
fi
}
# Ensure Harbor Job Service settings are valid
# Ensure harbor-jobservice settings are valid
harbor_jobservice_validate
install_custom_certs
wait_for_harbor_core

View File

@ -6,6 +6,8 @@
# Load Generic Libraries
. /opt/bitnami/scripts/liblog.sh
. /opt/bitnami/scripts/libos.sh
. /opt/bitnami/scripts/libservice.sh
########################
# Get the paths relevant to CA certs depending
@ -76,7 +78,6 @@ install_cert() {
# None
#########################
install_custom_certs() {
local installed=false
# Install any internalTLS CA authority certificate, found under
@ -117,3 +118,497 @@ install_custom_certs() {
info "No custom certificates were installed in the system"
fi
}
########################
# Generate an .env file contents given an input string containing all envvars
# Arguments:
# None
# Returns:
# String
#########################
harbor_generate_env_file_contents() {
local -r envvars_string="${1:?missing envvars}"
echo "#!/bin/bash"
while IFS= read -r ENV_VAR_LINE; do
if [[ ! "$ENV_VAR_LINE" =~ ^[A-Z_] ]]; then
continue
fi
ENV_VAR_NAME="${ENV_VAR_LINE/=*}"
ENV_VAR_VALUE="${ENV_VAR_LINE#*=}"
# Use single quotes to avoid shell expansion, and escape to be parsed properly (even if it contains quotes)
# Escape the value, so it can be parsed as a variable even with quotes set
echo "export ${ENV_VAR_NAME}='${ENV_VAR_VALUE//\'/\'\\\'\'}'"
done <<< "$envvars_string"
}
########################
# Print harbor-core runtime environment
# Arguments:
# None
# Returns:
# Boolean
#########################
harbor_core_print_env() {
# The CSRF key can only be up to 32 characters long
HARBOR_CORE_CFG_CSRF_KEY="${HARBOR_CORE_CFG_CSRF_KEY:0:32}"
for var in "${!HARBOR_CORE_CFG_@}"; do
echo "${var/HARBOR_CORE_CFG_/}=${!var}"
done
}
########################
# Check if harbor-core is running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_core_running() {
# harbor-core does not create any PID file
# We regenerate the PID file for each time we query it to avoid getting outdated
pgrep -f "$(command -v harbor_core)" > "$HARBOR_CORE_PID_FILE"
pid="$(get_pid_from_file "$HARBOR_CORE_PID_FILE")"
if [[ -n "$pid" ]]; then
is_service_running "$pid"
else
false
fi
}
########################
# Check if harbor-core is not running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_core_not_running() {
! is_harbor_core_running
}
########################
# Stop harbor-core
# Arguments:
# None
# Returns:
# None
#########################
harbor_core_stop() {
! is_harbor_core_running && return
stop_service_using_pid "$HARBOR_CORE_PID_FILE"
}
########################
# Print harbor-jobservice runtime environment
# Arguments:
# None
# Returns:
# Boolean
#########################
harbor_jobservice_print_env() {
for var in "${!HARBOR_JOBSERVICE_CFG_@}"; do
echo "${var/HARBOR_JOBSERVICE_CFG_/}=${!var}"
done
}
########################
# Check if harbor-jobservice is running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_jobservice_running() {
# harbor-jobservice does not create any PID file
# We regenerate the PID file for each time we query it to avoid getting outdated
pgrep -f "$(command -v harbor_jobservice)" > "$HARBOR_JOBSERVICE_PID_FILE"
pid="$(get_pid_from_file "$HARBOR_JOBSERVICE_PID_FILE")"
if [[ -n "$pid" ]]; then
is_service_running "$pid"
else
false
fi
}
########################
# Check if harbor-jobservice is not running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_jobservice_not_running() {
! is_harbor_jobservice_running
}
########################
# Stop harbor-jobservice
# Arguments:
# None
# Returns:
# None
#########################
harbor_jobservice_stop() {
! is_harbor_jobservice_running && return
stop_service_using_pid "$HARBOR_JOBSERVICE_PID_FILE"
}
########################
# Print harbor-notary-server runtime environment
# Arguments:
# None
# Returns:
# Boolean
#########################
harbor_notary_server_print_env() {
if [[ -n "${HARBOR_NOTARY_SERVER_DATABASE_NAME:-}" ]]; then
HARBOR_NOTARY_SERVER_CFG_DB_URL="postgres://${HARBOR_NOTARY_SERVER_DATABASE_USERNAME:-}:${HARBOR_NOTARY_SERVER_DATABASE_PASSWORD:-}@${HARBOR_NOTARY_SERVER_DATABASE_HOST:-127.0.0.1}:${HARBOR_NOTARY_SERVER_DATABASE_PORT_NUMBER:-5432}/${HARBOR_NOTARY_SERVER_DATABASE_NAME}?sslmode=${HARBOR_NOTARY_SERVER_DATABASE_SSLMODE:-disable}"
fi
for var in "${!HARBOR_NOTARY_SERVER_CFG_@}"; do
echo "${var/HARBOR_NOTARY_SERVER_CFG_/}=${!var}"
done
}
########################
# Check if harbor-notary-server is running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_notary_server_running() {
# harbor-notary-server does not create any PID file
# We regenerate the PID file for each time we query it to avoid getting outdated
pgrep -f "$(command -v notary-server)" > "$HARBOR_NOTARY_SERVER_PID_FILE"
pid="$(get_pid_from_file "$HARBOR_NOTARY_SERVER_PID_FILE")"
if [[ -n "$pid" ]]; then
is_service_running "$pid"
else
false
fi
}
########################
# Check if harbor-notary-server is not running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_notary_server_not_running() {
! is_harbor_notary_server_running
}
########################
# Stop harbor-notary-server
# Arguments:
# None
# Returns:
# None
#########################
harbor_notary_server_stop() {
! is_harbor_notary_server_running && return
stop_service_using_pid "$HARBOR_NOTARY_SERVER_PID_FILE"
}
########################
# Print harbor-notary-signer runtime environment
# Arguments:
# None
# Returns:
# Boolean
#########################
harbor_notary_signer_print_env() {
if [[ -n "${HARBOR_NOTARY_SIGNER_DATABASE_NAME:-}" ]]; then
HARBOR_NOTARY_SIGNER_CFG_DB_URL="postgres://${HARBOR_NOTARY_SIGNER_DATABASE_USERNAME:-}:${HARBOR_NOTARY_SIGNER_DATABASE_PASSWORD:-}@${HARBOR_NOTARY_SIGNER_DATABASE_HOST:-127.0.0.1}:${HARBOR_NOTARY_SIGNER_DATABASE_PORT_NUMBER:-5432}/${HARBOR_NOTARY_SIGNER_DATABASE_NAME}?sslmode=${HARBOR_NOTARY_SIGNER_DATABASE_SSLMODE:-disable}"
fi
for var in "${!HARBOR_NOTARY_SIGNER_CFG_@}"; do
echo "${var/HARBOR_NOTARY_SIGNER_CFG_/}=${!var}"
done
}
########################
# Check if harbor-notary-signer is running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_notary_signer_running() {
# harbor-notary-signer does not create any PID file
# We regenerate the PID file for each time we query it to avoid getting outdated
pgrep -f "$(command -v notary-signer)" > "$HARBOR_NOTARY_SIGNER_PID_FILE"
pid="$(get_pid_from_file "$HARBOR_NOTARY_SIGNER_PID_FILE")"
if [[ -n "$pid" ]]; then
is_service_running "$pid"
else
false
fi
}
########################
# Check if harbor-notary-signer is not running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_notary_signer_not_running() {
! is_harbor_notary_signer_running
}
########################
# Stop harbor-notary-signer
# Arguments:
# None
# Returns:
# None
#########################
harbor_notary_signer_stop() {
! is_harbor_notary_signer_running && return
stop_service_using_pid "$HARBOR_NOTARY_SIGNER_PID_FILE"
}
########################
# Print harbor-registry runtime environment
# Arguments:
# None
# Returns:
# Boolean
#########################
harbor_registry_print_env() {
if [[ -n "$HARBOR_REGISTRY_USER" && -n "$HARBOR_REGISTRY_PASSWORD" ]]; then
HARBOR_REGISTRY_CFG_REGISTRY_HTPASSWD="$(htpasswd -nbBC10 "$HARBOR_REGISTRY_USER" "$HARBOR_REGISTRY_PASSWORD")"
# Update passwd file
echo "$HARBOR_REGISTRY_CFG_REGISTRY_HTPASSWD" >/etc/registry/passwd
fi
for var in "${!HARBOR_REGISTRY_CFG_@}"; do
echo "${var/HARBOR_REGISTRY_CFG_/}=${!var}"
done
}
########################
# Check if harbor-registry is running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_registry_running() {
# harbor-registry does not create any PID file
# We regenerate the PID file for each time we query it to avoid getting outdated
pgrep -f "$(command -v registry)" > "$HARBOR_REGISTRY_PID_FILE"
pid="$(get_pid_from_file "$HARBOR_REGISTRY_PID_FILE")"
if [[ -n "$pid" ]]; then
is_service_running "$pid"
else
false
fi
}
########################
# Check if harbor-registry is not running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_registry_not_running() {
! is_harbor_registry_running
}
########################
# Stop harbor-registry
# Arguments:
# None
# Returns:
# None
#########################
harbor_registry_stop() {
! is_harbor_registry_running && return
stop_service_using_pid "$HARBOR_REGISTRY_PID_FILE"
}
########################
# Print harbor-registryctl runtime environment
# Arguments:
# None
# Returns:
# Boolean
#########################
harbor_registryctl_print_env() {
if [[ -n "$HARBOR_REGISTRYCTL_USER" && -n "$HARBOR_REGISTRYCTL_PASSWORD" ]]; then
HARBOR_REGISTRYCTL_CFG_REGISTRY_HTPASSWD="$(htpasswd -nbBC10 "$HARBOR_REGISTRYCTL_USER" "$HARBOR_REGISTRYCTL_PASSWORD")"
# Update passwd file
echo "$HARBOR_REGISTRYCTL_CFG_REGISTRY_HTPASSWD" >/etc/registry/passwd
fi
for var in "${!HARBOR_REGISTRYCTL_CFG_@}"; do
echo "${var/HARBOR_REGISTRYCTL_CFG_/}=${!var}"
done
}
########################
# Check if harbor-registryctl is running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_registryctl_running() {
# harbor-registryctl does not create any PID file
# We regenerate the PID file for each time we query it to avoid getting outdated
pgrep -f "$(command -v harbor_registryctl)" > "$HARBOR_REGISTRYCTL_PID_FILE"
pid="$(get_pid_from_file "$HARBOR_REGISTRYCTL_PID_FILE")"
if [[ -n "$pid" ]]; then
is_service_running "$pid"
else
false
fi
}
########################
# Check if harbor-registryctl is not running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_registryctl_not_running() {
! is_harbor_registryctl_running
}
########################
# Stop harbor-registryctl
# Arguments:
# None
# Returns:
# None
#########################
harbor_registryctl_stop() {
! is_harbor_registryctl_running && return
stop_service_using_pid "$HARBOR_REGISTRYCTL_PID_FILE"
# The service may not respond properly to the default kill signal, so send a SIGKILL if it fails
local -r retries=5
local -r sleep_time=1
if ! retry_while "is_harbor_registryctl_not_running" "$retries" "$sleep_time"; then
stop_service_using_pid "$HARBOR_REGISTRYCTL_PID_FILE" SIGKILL
fi
}
########################
# Print harbor-adapter-trivy runtime environment
# Arguments:
# None
# Returns:
# Boolean
#########################
harbor_adapter_trivy_print_env() {
for var in "${!SCANNER_TRIVY_CFG_@}"; do
echo "${var/SCANNER_TRIVY_CFG_/}=${!var}"
done
}
########################
# Check if harbor-adapter-trivy is running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_adapter_trivy_running() {
# harbor-adapter-trivy does not create any PID file
# We regenerate the PID file for each time we query it to avoid getting outdated
pgrep -f "$(command -v scanner-trivy)" > "$SCANNER_TRIVY_PID_FILE"
pid="$(get_pid_from_file "$SCANNER_TRIVY_PID_FILE")"
if [[ -n "$pid" ]]; then
is_service_running "$pid"
else
false
fi
}
########################
# Check if harbor-adapter-trivy is not running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_harbor_adapter_trivy_not_running() {
! is_harbor_adapter_trivy_running
}
########################
# Stop harbor-adapter-trivy
# Arguments:
# None
# Returns:
# None
#########################
harbor_adapter_trivy_stop() {
! is_harbor_adapter_trivy_running && return
stop_service_using_pid "$SCANNER_TRIVY_PID_FILE"
}
########################
# Print chartmuseum runtime environment
# Arguments:
# None
# Returns:
# Boolean
#########################
chartmuseum_print_env() {
for var in "${!CHARTMUSEUM_CFG_@}"; do
echo "${var/CHARTMUSEUM_CFG_/}=${!var}"
done
}
########################
# Check if chartmuseum is running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_chartmuseum_running() {
# chartmuseum does not create any PID file
# We regenerate the PID file for each time we query it to avoid getting outdated
pgrep -f "$(command -v chartmuseum)" > "$CHARTMUSEUM_PID_FILE"
pid="$(get_pid_from_file "$CHARTMUSEUM_PID_FILE")"
if [[ -n "$pid" ]]; then
is_service_running "$pid"
else
false
fi
}
########################
# Check if chartmuseum is not running
# Arguments:
# None
# Returns:
# Boolean
#########################
is_chartmuseum_not_running() {
! is_chartmuseum_running
}
########################
# Stop chartmuseum
# Arguments:
# None
# Returns:
# None
#########################
chartmuseum_stop() {
! is_chartmuseum_running && return
stop_service_using_pid "$CHARTMUSEUM_PID_FILE"
}