dk: ps, ls et rm prennent des filtres. ajout de pull

This commit is contained in:
Jephté Clain 2019-09-18 00:13:22 +04:00
parent d5f8fa4fff
commit 52c3d7a690
1 changed files with 177 additions and 11 deletions

188
dk
View File

@ -88,12 +88,50 @@ COMMANDES
systemd|systemd-unit
Générer une unité systemd qui démarre les services. A priori, ce n'est
nécessaire que si aucune politique de redémarrage n'a été définie.
ps
ps [filter|name=value]
Afficher les containers en cours d'exécution
ls
Le filtre est une expression régulière de type awk qui est mise en
correspondace avec les noms de l'image et de la tâche.
Il est aussi possible d'utiliser un filtre docker de la forme name=value
- ancestor=(<image-name>[:tag]|<image-id>| <image@digest>)
containers created from an image or a descendant.
- before=(<container-name>|<container-id>)
- expose=(<port>[/<proto>]|<startport-endport>/[<proto>])
- exited=<int> an exit code of <int>
- health=(starting|healthy|unhealthy|none)
- id=<ID> a container's ID
- is-task=(true|false)
- label=<key> or label=<key>=<value>
- name=<string> a container's name
- network=(<network-id>|<network-name>)
- publish=(<port>[/<proto>]|<startport-endport>/[<proto>])
- since=(<container-name>|<container-id>)
- status=(created|restarting|removing|running|paused|exited)
- volume=(<volume name>|<mount point destination>)
ls [filter|name=value]
Lister les images actuellement présentes
rm
Supprimer une image
Le filtre est une expression régulière de type awk qui est mise en
correspondance avec le nom de l'image. Un suffixe :tag permet de ne
sélectionner que les images correspondant au filtre qui ont le tag
spécifié.
Il est aussi possible d'utiliser un filtre docker de la forme name=value
- dangling=(true|false) - find unused images
- label=<key> or label=<key>=<value>
- before=(<image-name>[:tag]|<image-id>| <image@digest>)
- since=(<image-name>[:tag]|<image-id>| <image@digest>)
- reference=(pattern of an image reference)
pull filter
Mettre à jour une ou plusieurs images
Le filtre est une expression régulière de type awk qui est mise en
correspondance avec le nom de l'image. Un suffixe :tag permet de ne
sélectionner que les images correspondant au filtre qui ont le tag
spécifié.
rm filter
Supprimer une ou plusieurs images
Le filtre est une expression régulière de type awk qui est mise en
correspondance avec le nom de l'image. Un suffixe :tag permet de ne
sélectionner que les images correspondant au filtre qui ont le tag
spécifié.
X|prune
Supprimer les containers et les images inutilisées
@ -196,6 +234,8 @@ FONCTIONS de update-apps.conf
automatiquement, sauf si une valeur NOFIX est spécifiée."
}
function echo_lines() { local IFS=$'\n'; echo "$*"; }
function get_version() {
local GIT_DIR; unset GIT_DIR
if git rev-parse --git-dir >/dev/null 2>&1; then
@ -1359,14 +1399,140 @@ while [ $# -gt 0 ]; do
enote "Profil $PROFILE"
auto_systemd_unit "${args[@]}" || die
;;
ps) docker container ps -a || die;;
ls) docker image ls || die;;
ps)
pscmd=(
docker container ps -a
--format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}\t{{.RunningFor}}\t{{.Ports}}\t{{.Command}}"
)
filtercmd=(cat)
awkscript='
NR == 1 { print; next }
($2 ~ filter || $3 ~ filter) { print }
'
if [ $# -eq 0 ]; then
# pas de filtre
:
elif [ "$1" == -- ]; then
# fin de la commande
shift
elif [[ "$1" == *=* ]]; then
# filtre docker
pscmd+=(--filter "$1")
shift
else
# expression régulière
filtercmd=(awk -v filter="$1" "$awkscript")
shift
fi
set -o pipefail
"${pscmd[@]}" | "${filtercmd[@]}" || die
;;
ls)
lscmd=(docker image ls)
filtercmd=(cat)
awkscript='
BEGIN {
if (split(filter, parts, /:/) > 1) {
filter = parts[1]
tag = parts[2]
} else {
tag = ""
}
}
NR == 1 { print; next }
(filter == "" || $1 ~ filter) && (tag == "" || $2 ~ tag) { print }
'
if [ $# -eq 0 ]; then
# pas de filtre
:
elif [ "$1" == -- ]; then
# fin de la commande
shift
elif [[ "$1" == *=* ]]; then
# filtre docker
lscmd+=(--filter "$1")
shift
else
# expression régulière
filtercmd=(awk -v filter="$1" "$awkscript")
shift
fi
set -o pipefail
"${lscmd[@]}" | "${filtercmd[@]}" || die
;;
pull)
lscmd=(docker image ls)
filtercmd=(awk 'NR == 1 { print; next } $2 !~ /</ { print }')
awkscript='
BEGIN {
if (split(filter, parts, /:/) > 1) {
filter = parts[1]
tag = parts[2]
} else {
tag = ""
}
}
NR == 1 { print; next }
(filter == "" || $1 ~ filter) && (tag == "" || $2 ~ tag) && $2 !~ /</ { print }
'
if [ $# -eq 0 -o "$1" == -- ]; then
# pas de filtre
ewarn "pull: Vous devez spécifier l'image à mettre à jour"
continue
elif [[ "$1" == *=* ]]; then
# filtre docker
lscmd+=(--filter "$1")
shift
else
# expression régulière
filtercmd=(awk -v filter="$1" "$awkscript")
shift
fi
all="$("${lscmd[@]}" | "${filtercmd[@]}")"
setx -a images awk 'NR == 1 { next } { print $1 ":" $2 }' <<<"$all"
if [ ${#images[*]} -gt 0 ]; then
echo "$all"
ask_yesno "Etes-vous sûr de vouloir mettre à jour ces images?" O || die
for image in "${images[@]}"; do
docker pull "$image" || die
done
fi
;;
rm)
args=()
while [ $# -gt 0 -a "$1" != -- ]; do
args+=("$1"); shift
done
docker image rm "${args[@]}" || die
lscmd=(docker image ls)
filtercmd=(cat)
awkscript='
BEGIN {
if (split(filter, parts, /:/) > 1) {
filter = parts[1]
tag = parts[2]
} else {
tag = ""
}
}
NR == 1 { print; next }
(filter == "" || $1 ~ filter) && (tag == "" || $2 ~ tag) { print }
'
if [ $# -eq 0 -o "$1" == -- ]; then
# pas de filtre
ewarn "rm: Vous devez spécifier l'image à supprimer"
continue
elif [[ "$1" == *=* ]]; then
# filtre docker
lscmd+=(--filter "$1")
shift
else
# expression régulière
filtercmd=(awk -v filter="$1" "$awkscript")
shift
fi
all="$("${lscmd[@]}" | "${filtercmd[@]}")"
setx -a images awk 'NR == 1 { next } { print $3 }' <<<"$all"
if [ ${#images[*]} -gt 0 ]; then
echo "$all"
ask_yesno "Etes-vous sûr de vouloir supprimer ces images?" || die
docker image rm "${images[@]}" || die
fi
;;
X|prune)
docker container prune -f || die