You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
2.6 KiB
Bash

4 years ago
#!/usr/bin/env bash
# vim:ts=4:sts=4:sw=4:et
4 years ago
# shellcheck disable=SC1090,SC2034
4 years ago
#
# 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
4 years ago
gcp_lib_srcdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
4 years ago
# shellcheck disable=SC1090
4 years ago
. "$gcp_lib_srcdir/utils.sh"
4 years ago
4 years ago
gcp_info_noninteractive_help="You should only this script non-interactively / in pipes once you have tested it locally on the command line because some services may prompt you for choices, eg. Cloud Run, which you should save to your GCloud SDK config settings first"
4 years ago
gcp_info_formatting_help="In interactive mode, prints fancy boxes around GCP info to be easier on the eye. In non-interactive mode it skips formatting so it's easier to parse or process with other commands like grep / awk etc. Non-interactive mode happens automatically when the output is piped or redirected to a file or another command, or when \$NO_FORMATTING=1 is set in environment"
4 years ago
4 years ago
if is_piped || [ -n "${NO_FORMATTING:-}" ]; then
4 years ago
gcloud_formatting=''
4 years ago
else
# want deferred expansion
# shellcheck disable=SC2016
4 years ago
gcloud_formatting='"[box,title=\"$title\"]"'
4 years ago
fi
4 years ago
# not anchoring here any more so that we can use these to compose more complex regex - client should anchor regex in matches
gcr_image_regex='([^\.]+\.)?gcr\.io/[^/]+/[^:]+'
gcr_image_tag_regex="$gcr_image_regex:.+"
gcr_image_optional_tag_regex="$gcr_image_regex(:.+)?"
4 years ago
gcp_info(){
local title="$1"
shift || :
4 years ago
if [ -z "$gcloud_formatting" ]; then
4 years ago
#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
4 years ago
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
4 years ago
fi
4 years ago
}