split metrics installer image
This commit is contained in:
@@ -42,6 +42,26 @@ platform_for_arch() {
|
||||
printf 'linux/%s\n' "$1"
|
||||
}
|
||||
|
||||
env_file_has_key() {
|
||||
local env_path="$1"
|
||||
local key="$2"
|
||||
[[ -f "$env_path" ]] && grep -Eq "^${key}=" "$env_path"
|
||||
}
|
||||
|
||||
persist_env_default() {
|
||||
local env_path="$1"
|
||||
local key="$2"
|
||||
local value="$3"
|
||||
local tmp_env
|
||||
if env_file_has_key "$env_path" "$key"; then
|
||||
return 0
|
||||
fi
|
||||
tmp_env="$(mktemp)"
|
||||
cat "$env_path" > "$tmp_env"
|
||||
printf '%s=%s\n' "$key" "$value" >> "$tmp_env"
|
||||
mv "$tmp_env" "$env_path"
|
||||
}
|
||||
|
||||
env_flag_enabled() {
|
||||
case "${1:-0}" in
|
||||
1|true|TRUE|yes|YES|on|ON)
|
||||
@@ -85,6 +105,10 @@ effective_package_arch() {
|
||||
normalize_arch "$RPKI_PLATFORM" || die "unsupported RPKI_PLATFORM=${RPKI_PLATFORM}"
|
||||
return 0
|
||||
fi
|
||||
if [[ -n "${METRICS_PLATFORM:-}" ]]; then
|
||||
normalize_arch "$METRICS_PLATFORM" || die "unsupported METRICS_PLATFORM=${METRICS_PLATFORM}"
|
||||
return 0
|
||||
fi
|
||||
if [[ -n "${MONITOR_PLATFORM:-}" ]]; then
|
||||
normalize_arch "$MONITOR_PLATFORM" || die "unsupported MONITOR_PLATFORM=${MONITOR_PLATFORM}"
|
||||
return 0
|
||||
@@ -170,12 +194,17 @@ load_env() {
|
||||
COMPOSE_PROJECT_NAME="${COMPOSE_PROJECT_NAME:-ours-rp-${PACKAGE_ARCH}-installer}"
|
||||
RPKI_IMAGE="${RPKI_IMAGE:-ours-rp-runtime-${PACKAGE_ARCH}:dev}"
|
||||
RPKI_PLATFORM="${RPKI_PLATFORM:-$PACKAGE_PLATFORM}"
|
||||
METRICS_IMAGE="${METRICS_IMAGE:-ours-rp-metrics-${PACKAGE_ARCH}:dev}"
|
||||
METRICS_PLATFORM="${METRICS_PLATFORM:-$PACKAGE_PLATFORM}"
|
||||
MONITOR_PLATFORM="${MONITOR_PLATFORM:-$PACKAGE_PLATFORM}"
|
||||
PROMETHEUS_IMAGE="${PROMETHEUS_IMAGE:-prom/prometheus:v2.55.1}"
|
||||
GRAFANA_IMAGE="${GRAFANA_IMAGE:-grafana/grafana:11.3.1}"
|
||||
METRICS_INSTANCE="${METRICS_INSTANCE:-${PACKAGE_ARCH}-installer}"
|
||||
ALLOW_CROSS_ARCH="${ALLOW_CROSS_ARCH:-0}"
|
||||
FIRST_RUN_WAIT_TIMEOUT_SECS="${FIRST_RUN_WAIT_TIMEOUT_SECS:-7200}"
|
||||
|
||||
persist_env_default "$ENV_FILE" "METRICS_IMAGE" "$METRICS_IMAGE"
|
||||
persist_env_default "$ENV_FILE" "METRICS_PLATFORM" "$METRICS_PLATFORM"
|
||||
}
|
||||
|
||||
compose_cmd() {
|
||||
@@ -340,6 +369,7 @@ install_docker_if_missing() {
|
||||
}
|
||||
|
||||
load_installer_images() {
|
||||
load_env
|
||||
require_cmd docker
|
||||
shopt -s nullglob
|
||||
local image load_output desired_tag
|
||||
@@ -358,6 +388,9 @@ load_installer_images() {
|
||||
"${image_tar:-}")
|
||||
desired_tag="${image_tag:-$RPKI_IMAGE}"
|
||||
;;
|
||||
"${metrics_image_tar:-}")
|
||||
desired_tag="${metrics_image:-$METRICS_IMAGE}"
|
||||
;;
|
||||
"${prometheus_image_tar:-}")
|
||||
desired_tag="${prometheus_image:-$PROMETHEUS_IMAGE}"
|
||||
;;
|
||||
@@ -377,15 +410,19 @@ ensure_loaded_image_tag() {
|
||||
local desired_tag="$1"
|
||||
local load_output="$2"
|
||||
local image_path="$3"
|
||||
if docker image inspect "$desired_tag" >/dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
local loaded_ref=""
|
||||
local loaded_id=""
|
||||
local desired_id=""
|
||||
loaded_ref="$(printf '%s\n' "$load_output" | awk -F'Loaded image: ' '/Loaded image: / {print $2; exit}')"
|
||||
if [[ -z "$loaded_ref" ]]; then
|
||||
loaded_ref="$(printf '%s\n' "$load_output" | awk -F'Loaded image ID: ' '/Loaded image ID: / {print $2; exit}')"
|
||||
fi
|
||||
[[ -n "$loaded_ref" ]] || die "unable to determine loaded image reference for $image_path"
|
||||
loaded_id="$(docker image inspect --format '{{.Id}}' "$loaded_ref" 2>/dev/null || true)"
|
||||
desired_id="$(docker image inspect --format '{{.Id}}' "$desired_tag" 2>/dev/null || true)"
|
||||
if [[ -n "$loaded_id" && -n "$desired_id" && "$loaded_id" == "$desired_id" ]]; then
|
||||
return 0
|
||||
fi
|
||||
log "tagging loaded image for package use: source=$loaded_ref target=$desired_tag"
|
||||
docker tag "$loaded_ref" "$desired_tag"
|
||||
}
|
||||
@@ -407,13 +444,17 @@ ensure_binfmt_if_needed() {
|
||||
verify_runtime_image() {
|
||||
load_env
|
||||
require_cmd docker
|
||||
local help_path
|
||||
help_path="$(mktemp "${TMPDIR:-/tmp}/ours-rp-rpki-help.XXXXXX")"
|
||||
log "verifying runtime image $RPKI_IMAGE on $RPKI_PLATFORM"
|
||||
docker image inspect "$RPKI_IMAGE" >/dev/null
|
||||
docker run --rm --platform "$RPKI_PLATFORM" "$RPKI_IMAGE" /opt/ours-rp/bin/rpki --help >"$help_path"
|
||||
head -5 "$help_path" || true
|
||||
rm -f "$help_path"
|
||||
verify_image_platform "$RPKI_IMAGE" "$RPKI_PLATFORM" "runtime"
|
||||
verify_image_usage_output "$RPKI_IMAGE" "$RPKI_PLATFORM" "runtime" /opt/ours-rp/bin/rpki --help
|
||||
}
|
||||
|
||||
verify_metrics_image() {
|
||||
load_env
|
||||
require_cmd docker
|
||||
log "verifying metrics image $METRICS_IMAGE on $METRICS_PLATFORM"
|
||||
verify_image_platform "$METRICS_IMAGE" "$METRICS_PLATFORM" "metrics"
|
||||
verify_image_usage_output "$METRICS_IMAGE" "$METRICS_PLATFORM" "metrics" /opt/ours-rp/bin/rpki_artifact_metrics --help
|
||||
}
|
||||
|
||||
verify_image_platform() {
|
||||
@@ -426,6 +467,32 @@ verify_image_platform() {
|
||||
[[ "$actual_platform" == "$expected_platform" ]] || die "$role image platform mismatch: image=$image expected=$expected_platform actual=$actual_platform"
|
||||
}
|
||||
|
||||
verify_image_usage_output() {
|
||||
local image="$1"
|
||||
local expected_platform="$2"
|
||||
local role="$3"
|
||||
shift 3
|
||||
local help_path
|
||||
local status
|
||||
help_path="$(mktemp "${TMPDIR:-/tmp}/ours-rp-image-help.XXXXXX")"
|
||||
set +e
|
||||
docker run --rm --platform "$expected_platform" "$image" "$@" >"$help_path" 2>&1
|
||||
status=$?
|
||||
set -e
|
||||
if [[ "$status" != "0" && "$status" != "1" ]]; then
|
||||
cat "$help_path" >&2 || true
|
||||
rm -f "$help_path"
|
||||
die "$role image command failed: image=$image platform=$expected_platform exit=$status"
|
||||
fi
|
||||
grep -q '^Usage' "$help_path" || {
|
||||
cat "$help_path" >&2 || true
|
||||
rm -f "$help_path"
|
||||
die "$role image did not emit usage output: image=$image platform=$expected_platform exit=$status"
|
||||
}
|
||||
head -5 "$help_path" || true
|
||||
rm -f "$help_path"
|
||||
}
|
||||
|
||||
verify_monitor_images() {
|
||||
load_env
|
||||
require_cmd docker
|
||||
|
||||
Reference in New Issue
Block a user