46 lines
1.6 KiB
Text
46 lines
1.6 KiB
Text
|
dockerps() {
|
||
|
GREEN="\033[0;32m"; RED="\033[0;31m"; YELLOW="\033[0;33m"; NC="\033[0m"
|
||
|
|
||
|
docker ps --format '{{.Names}}\t{{.Image}}\t{{.Status}}' | \
|
||
|
awk -F'\t' -v green="$GREEN" -v red="$RED" -v yellow="$YELLOW" -v nc="$NC" '
|
||
|
function lastpos(s, ch, i,p){p=0; for(i=1;i<=length(s);i++) if(substr(s,i,1)==ch) p=i; return p}
|
||
|
{
|
||
|
name=$1; img=$2; stat=$3;
|
||
|
|
||
|
# --- Health extrahieren ---
|
||
|
health="unknown"; color=yellow;
|
||
|
if (stat ~ /\(healthy\)/) {health="healthy"; color=green}
|
||
|
else if (stat ~ /\(unhealthy\)/) {health="unhealthy"; color=red}
|
||
|
|
||
|
# --- Image/Version parsen ---
|
||
|
image=img; ver="none";
|
||
|
if (img ~ /@/) {
|
||
|
split(img, a, "@")
|
||
|
image=a[1]; ver=a[2]
|
||
|
if (ver ~ /^sha256:/) { sub(/^sha256:/,"",ver); ver="sha256:" substr(ver,1,12) }
|
||
|
} else {
|
||
|
ls=lastpos(img,"/"); lc=lastpos(img,":")
|
||
|
if (lc>ls && lc>0) { image=substr(img,1,lc-1); ver=substr(img,lc+1) }
|
||
|
}
|
||
|
|
||
|
data[NR,"name"]=name
|
||
|
data[NR,"image"]=image
|
||
|
data[NR,"ver"]=ver
|
||
|
data[NR,"health"]=health
|
||
|
data[NR,"color"]=color
|
||
|
|
||
|
if (length(name)>max_name) max_name=length(name)
|
||
|
if (length(image)>max_image) max_image=length(image)
|
||
|
if (length(ver)>max_ver) max_ver=length(ver)
|
||
|
}
|
||
|
END {
|
||
|
# Header
|
||
|
printf "%-"max_name"s %-"max_image"s %-"max_ver"s %s\n", "NAMES", "IMAGE", "VERSION", "STATUS"
|
||
|
for (i=1; i<=NR; i++) {
|
||
|
printf "%-"max_name"s %-"max_image"s %-"max_ver"s %s%-10s%s\n",
|
||
|
data[i,"name"], data[i,"image"], data[i,"ver"],
|
||
|
data[i,"color"], data[i,"health"], nc
|
||
|
}
|
||
|
}'
|
||
|
}
|