#!/usr/bin/env bash
# vim:ts=4:sts=4:sw=4:et
# shellcheck disable=SC1090,SC2034
#
# Author: Hari Sekhon
# Date: 2020-08-13 19:38:39 +0100 (Thu, 13 Aug 2020)
#
# https://github.com/harisekhon/bash-tools
#
# License: see accompanying Hari Sekhon LICENSE file
#
# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help steer this or other code I publish
#
# https://www.linkedin.com/in/harisekhon
#
set -euo pipefail
[ -n " ${ DEBUG :- } " ] && set -x
gcp_info_formatting_help = "Prints fancy boxes around GCP info in interactive mode. Skips formatting if the output is sent through a pipe to other commands, redirected to file, or \$NO_FORMATTING=1 is set in environment, to allow for easier parsing / grepping"
if is_piped || [ -n " ${ NO_FORMATTING :- } " ] ; then
gcloud_formatting = ''
else
# want deferred expansion
# shellcheck disable=SC2016
gcloud_formatting = '"[box,title=\"$title\"]"'
fi
gcr_image_regex = '^([^\.]+\.)?gcr\.io/[^/]+/[^:]+$'
gcr_image_tag_regex = '^([^\.]+\.)?gcr\.io/[^/]+/[^:]+:.+$'
gcr_image_optional_tag_regex = '^([^\.]+\.)?gcr\.io/[^/]+/[^:]+(:.+)?$'
gcp_info( ) {
local title = " $1 "
shift || :
if [ -z " $gcloud_formatting " ] ; then
#perl -e "print '=' x (${#title} + 1);"
for ( ( i = 0; i <= ${# title } ; i++) ) ; do
#printf '='
# built-in - not as portable eg. sh, but given we explicitly execute in bash should be ok
echo -n '='
done
echo
echo " $title : "
fi
if [ [ " $* " = ~ --format ] ] ; then
# eval formatting for table only to get late evaluated $title
" ${ @//--format=table(/--format=table $( eval echo " $gcloud_formatting " ) ( } "
else
# formatting has to be eval'd in order to pick up latest $title as a late binding
# better than eval'ing the entire command line to evaluate $title in the formatting string interpolation
" $@ " --format= " $( eval echo " $gcloud_formatting " ) " || return
if [ -z " $gcloud_formatting " ] ; then
echo
fi
fi
}