diff --git a/topics/Week2_Best_Practices/challenge/btpguid b/topics/Week2_Best_Practices/challenge/btpguid new file mode 100644 index 000000000..203df52ce --- /dev/null +++ b/topics/Week2_Best_Practices/challenge/btpguid @@ -0,0 +1,49 @@ +#!/bin/bash +# btpguid - return BTP subaccount/directory GUIDs + +# Usage: btpguid [-t|--target] displayname + +# Returns the GUID for the given subaccount or directory, which is +# specified by name. If the option -t or --target is specified, it +# will also set that subaccount or directory as the target. + +# Requires the btp CLI. Will direct you to log in first if you're +# not already logged in. + +# It uses the detail from the output of this command: +# btp get accounts/global-account --show-hierarchy + +# Uses the "${2:-$1}" technique seen in fff - see +# https://qmacro.org/autodidactics/2021/09/03/exploring-fff-part-1-main/ +# for details. + +gethier() { + btp get accounts/global-account --show-hierarchy 2> /dev/null +} + +main() { + + local hierarchy subtype guid displayname rc=0 + + displayname="${2:-$1}" + + [[ -z $displayname ]] && { + echo "No display name specified" + exit 1 + } + + hierarchy="$(gethier)" || { btp login && hierarchy="$(gethier)"; } + read -r subtype guid <<< "$(grep -P -o "^(subaccount|directory)\s+(\S+)(?=\s+$displayname)" <<< "$hierarchy")" + + # Set the subtype as target if requested + [[ $1 == -t ]] || [[ $1 == --target ]] && { + btp target "--${subtype}" "$guid" &> /dev/null + rc=$? + } + + echo "$guid" + return $rc + +} + +main "$@" \ No newline at end of file