#! /usr/bin/env bash set -e SCRIPT_NAME="${0##/*}" usage() { printf '%s\n' \ 'Search Teleport for an ssh host with an interactive selection' \ '' \ 'Usage:' \ " [SILENT=1] [BATCH=1] [QUERY='query syntax'] ${SCRIPT_NAME} " \ '' \ 'Arguments:' \ '' \ 'Examples:' \ ' $ BATCH=1 tsh-get tesla' \ ' cluster_psnt=VAST-TESLA-AUS-1,hostname=aus08p1vstfs01-cn1-DO-NOT-LOGIN' \ ' cluster_psnt=VA22374479,hostname=c-0-1' \ ' cluster_psnt=VA22465472,hostname=c-0-1' \ '' \ ' tsh-get tesla ' \ '' exit 2 } if [[ $# -eq 0 ]]; then usage fi SILENT=${SILENT:-${BATCH:+1}} SEARCH="$1" QUERY="${QUERY:+--query=${QUERY}}" ${SILENT:+:} printf 'Searching for %s...' "$SEARCH" >&2 OPTIONS="$( tsh ls --search "$SEARCH" ${QUERY} --format json | jq -r ' .[] | ( if .metadata.labels.customer_name then "customer_name=" + .metadata.labels.customer_name + "," elif .metadata.labels.Customer then "Customer=" + .metadata.labels.Customer + "," else "" end) + "cluster_psnt=\(.metadata.labels.cluster_psnt)," + "hostname=\(.spec.hostname)" ' )" if [[ -z "$BATCH" && "${OPTIONS}" == *$'\n'* ]]; then SELECTED="$( tv --no-preview <<<"$OPTIONS" )" else SELECTED="$OPTIONS" fi if [[ -z "$SELECTED" ]]; then ${SILENT:+:} printf 'Aborted (empty response)\n' >&2 exit 2 fi ${SILENT:+:} printf '\n%s selected.\n' "$SELECTED" >&2 echo "$SELECTED"