fix(verify): dynamic label-based verification for any PROJECT_NAME
This commit is contained in:
parent
8976acd154
commit
34ab1cde73
85
elemes.sh
85
elemes.sh
|
|
@ -247,30 +247,71 @@ verify)
|
||||||
echo "🔍 === Memverifikasi Image Container ==="
|
echo "🔍 === Memverifikasi Image Container ==="
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
echo "📋 Image yang tersedia:"
|
# 1) Service -> image tag dari compose config. Resolusi via podman-compose
|
||||||
podman images | grep -E "lms-c-(backend|frontend|velxio)" || echo " ⚠️ Tidak ada image lms-c yang ditemukan"
|
# sehingga TIDAK tergantung nama direktori parent / PROJECT_NAME.
|
||||||
echo ""
|
declare -A SERVICE_IMAGE_TAG
|
||||||
|
COMPOSE_CONFIG=$(run_compose_out config 2>/dev/null)
|
||||||
|
while IFS= read -r svc; do
|
||||||
|
[ -z "$svc" ] && continue
|
||||||
|
SERVICE_IMAGE_TAG["$svc"]=$(printf '%s\n' "$COMPOSE_CONFIG" | awk -v s="$svc" '
|
||||||
|
$0 ~ "^ " s ":" { in_svc=1; next }
|
||||||
|
in_svc && /^ [A-Za-z0-9_.-]+:$/ && $0 !~ "^ " s ":$" { in_svc=0 }
|
||||||
|
in_svc && /^ image:/ { sub(/^ image: */, ""); gsub(/[" ]/, "", $0); print; exit }
|
||||||
|
')
|
||||||
|
done < <(run_compose_out config --services 2>/dev/null)
|
||||||
|
|
||||||
echo "📋 Container yang sedang berjalan:"
|
echo "📋 Service yang didefinisikan di podman-compose.yml:"
|
||||||
podman ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" | grep -E "lms-dev" || echo " ⚠️ Tidak ada container yang berjalan"
|
for svc in "${!SERVICE_IMAGE_TAG[@]}"; do
|
||||||
echo ""
|
printf " %s → %s\n" "$svc" "${SERVICE_IMAGE_TAG[$svc]:-<tanpa image:>}"
|
||||||
|
|
||||||
echo "🔍 Memeriksa CMD tiap container..."
|
|
||||||
for container in "lms-dev_elemes_1" "lms-dev_elemes-frontend_1" "lms-dev_velxio_1" "lms-dev_postgres_1"; do
|
|
||||||
if podman ps --format "{{.Names}}" | grep -q "$container"; then
|
|
||||||
CMD=$(podman inspect "$container" --format '{{.Config.Cmd}}' 2>/dev/null)
|
|
||||||
ENTRYPOINT=$(podman inspect "$container" --format '{{.Config.Entrypoint}}' 2>/dev/null)
|
|
||||||
IMAGE=$(podman inspect "$container" --format '{{.Image}}' 2>/dev/null)
|
|
||||||
echo " ✅ $container"
|
|
||||||
echo " Image: $IMAGE"
|
|
||||||
echo " Entrypoint: $ENTRYPOINT"
|
|
||||||
echo " Cmd: $CMD"
|
|
||||||
echo ""
|
|
||||||
else
|
|
||||||
echo " ⚠️ $container tidak ditemukan"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 2) Container milik project ini (ditemukan via label io.podman.compose.project)
|
||||||
|
# + deteksi image STALE: ImageID container != ImageID tag saat ini.
|
||||||
|
echo "📋 Container project '$PROJECT_NAME':"
|
||||||
|
CONTAINERS=$(podman ps -a \
|
||||||
|
--filter "label=io.podman.compose.project=$PROJECT_NAME" \
|
||||||
|
--format '{{.Names}}|{{.Image}}|{{.ImageID}}|{{.Status}}|{{.Labels}}' 2>/dev/null)
|
||||||
|
if [ -z "$CONTAINERS" ]; then
|
||||||
|
echo " ⚠️ Tidak ada container untuk project '$PROJECT_NAME' (jalankan ./elemes.sh run dulu)"
|
||||||
|
else
|
||||||
|
while IFS='|' read -r cname cimage cid cstatus clabels; do
|
||||||
|
svc=$(printf '%s' "$clabels" | sed -n 's/.*com.docker.compose.service[:=]\([^ ,}]*\).*/\1/p')
|
||||||
|
tag="${SERVICE_IMAGE_TAG[$svc]:-unknown}"
|
||||||
|
stale=""
|
||||||
|
if [ -n "$tag" ]; then
|
||||||
|
tag_iid=$(podman images "$tag" --noheading --format '{{.ID}}' 2>/dev/null | head -1)
|
||||||
|
if [ -n "$tag_iid" ] && [ -n "$cid" ] && [ "${cid:0:12}" != "${tag_iid:0:12}" ]; then
|
||||||
|
stale=" ⚠️ STALE (container:$cid != image:$tag_iid)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
printf " • %s\n" "$cname"
|
||||||
|
printf " image: %s (status: %s)%s\n" "$cimage" "$cstatus" "$stale"
|
||||||
|
done <<< "$CONTAINERS"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 3) CMD/Entrypoint tiap service (ditemukan via label project + service)
|
||||||
|
echo "🔍 Memeriksa CMD/Entrypoint tiap service..."
|
||||||
|
while IFS= read -r svc; do
|
||||||
|
[ -z "$svc" ] && continue
|
||||||
|
cid=$(podman ps -a \
|
||||||
|
--filter "label=io.podman.compose.project=$PROJECT_NAME" \
|
||||||
|
--filter "label=com.docker.compose.service=$svc" \
|
||||||
|
--format '{{.ID}}' 2>/dev/null | head -1)
|
||||||
|
if [ -n "$cid" ]; then
|
||||||
|
CMD=$(podman inspect "$cid" --format '{{.Config.Cmd}}' 2>/dev/null)
|
||||||
|
ENTRYPOINT=$(podman inspect "$cid" --format '{{.Config.Entrypoint}}' 2>/dev/null)
|
||||||
|
IMAGE=$(podman inspect "$cid" --format '{{.Image}}' 2>/dev/null)
|
||||||
|
echo " ✅ $svc ($cid)"
|
||||||
|
echo " Image: $IMAGE"
|
||||||
|
echo " Entrypoint: $ENTRYPOINT"
|
||||||
|
echo " Cmd: $CMD"
|
||||||
|
else
|
||||||
|
echo " ⚠️ $svc tidak ditemukan (container belum dibuat)"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
done < <(run_compose_out config --services 2>/dev/null)
|
||||||
;;
|
;;
|
||||||
dbupgrade)
|
dbupgrade)
|
||||||
echo "🗄️ Menjalankan migrasi database (alembic upgrade head)..."
|
echo "🗄️ Menjalankan migrasi database (alembic upgrade head)..."
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue