45 lines
1.8 KiB
Bash
45 lines
1.8 KiB
Bash
#!/usr/bin/env zsh
|
|
|
|
docker_failure_allows_mirror() {
|
|
[ "${PLANET_DOCKER_MIRROR_FALLBACK:-1}" != 0 ] || return 1
|
|
local record="$(planet_error_record '' "$1")"
|
|
local code="${record%%$'\t'*}"
|
|
case "$code" in
|
|
P_DNS|P_NETWORK_TIMEOUT|P_CONNECTION_REFUSED|P_DOCKER_COMMAND_TIMEOUT) ;;
|
|
*) return 1 ;;
|
|
esac
|
|
grep -Eq 'process "/bin/sh -c|executor failed running' "$1" && return 1
|
|
# Package installation and daemon failures are not image-registry failures.
|
|
grep -Eiq 'load metadata|resolve source metadata|failed to resolve|fetch anonymous token|https?://[^ ]*/v2/|Pulling|Downloading' "$1"
|
|
}
|
|
|
|
resolve_build_mirror_args() {
|
|
local mirror_log="$(mktemp "$PLANET_STATE_DIR/docker-mirror.XXXXXX.log")"
|
|
DOCKER_MIRROR_BUILD_ARGS=()
|
|
if ! run_docker_observed "原镜像源不可达,验证备用镜像" \
|
|
"${PLANET_DOCKER_MIRROR_TIMEOUT:-120}" "$mirror_log" \
|
|
python3 "$SCRIPT_DIR/scripts/docker_mirror.py" build >/dev/null; then
|
|
cp "$mirror_log" "$AI_PROVIDER_BUILD_LOG_FILE"
|
|
return 1
|
|
fi
|
|
local assignment
|
|
while IFS= read -r assignment; do
|
|
DOCKER_MIRROR_BUILD_ARGS+=(--build-arg "$assignment")
|
|
done < "$mirror_log"
|
|
}
|
|
|
|
pull_database_mirrors() {
|
|
local -a services=()
|
|
local argument
|
|
for argument in "$@"; do
|
|
case "$argument" in postgres|redis) services+=("$argument") ;; esac
|
|
done
|
|
[ "${#services[@]}" -gt 0 ] || return 1
|
|
prepare_docker_build_proxy mirror || return 1
|
|
local mirror_log="$(mktemp "$PLANET_STATE_DIR/docker-mirror.XXXXXX.log")"
|
|
DOCKER_MIRROR_ERROR_LOG_FILE="$mirror_log"
|
|
run_docker_observed "原镜像源不可达,临时使用备用源" \
|
|
"${PLANET_COMPOSE_TIMEOUT:-180}" "$mirror_log" \
|
|
python3 "$SCRIPT_DIR/scripts/docker_mirror.py" pull "${services[@]}" >/dev/null
|
|
}
|