rhcos-toolbox: add ability to check if a newer image is available If a toolbox container image has been pulled to a node, it may get out of date over time. This adds a check to see if there is a newer toolbox container image available and prompts the user to download it. Closes: RHBZ#2049591 Co-authored-by: Sohan Kunkerkar <sohank2602@gmail.com>
diff --git a/rhcos-toolbox b/rhcos-toolbox index 86de840..8295e0e 100755 --- a/rhcos-toolbox +++ b/rhcos-toolbox
@@ -21,6 +21,14 @@ run() { if ! image_exists; then image_pull + elif ! image_fresh; then + read -r -p "There is a newer version of ${TOOLBOX_IMAGE} available. Would you like to pull it? [y/N] " + + if [[ $REPLY =~ ^([Yy][Ee][Ss]|[Yy])+$ ]]; then + image_pull + else + echo "Skipping retrieval of new image.." + fi fi local runlabel=$(image_runlabel) @@ -67,6 +75,20 @@ sudo podman inspect "$TOOLBOX_IMAGE" &>/dev/null } +# returns 0 if the image on disk is "fresh", i.e. no newer image on remote +# registry. (or if we couldn't inspect the registry successfully) +image_fresh() { + local_date=$(sudo podman inspect "$TOOLBOX_IMAGE" --format '{{.Created}}') + if ! remote_date=$(sudo skopeo inspect --authfile /var/lib/kubelet/config.json docker://"$TOOLBOX_IMAGE" --format '{{.Created}}'); then + echo "Error inspecting $TOOLBOX_IMAGE via skopeo" + return + fi + # if the date on the registry is *NOT* newer than the local image date + # then we return 1. (doing a less-than comparison of the strings always + # fails if they are the same, hence the weird conditional here) + ! [[ "${remote_date}" > "${local_date}" ]] +} + image_runlabel() { sudo podman image inspect "$TOOLBOX_IMAGE" --format '{{- if index .Labels "run" -}}{{.Labels.run}}{{- end -}}' }