-
-
Save JonTheNiceGuy/4f28d36fd19aa69d947b304d9333812e to your computer and use it in GitHub Desktop.
A bash script to get the latest Xen Orchestrator template name, looking for a prefix.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
trap cleanup SIGINT SIGTERM EXIT | |
exit_message="" | |
set_exit=0 | |
fail() { | |
[ -n "$1" ] && echo "$1" >&2 | |
[ "$2" -gt 0 ] && exit $2 | |
} | |
cleanup() { | |
trap - SIGINT SIGTERM EXIT | |
[ "$UNREGISTER" -eq 1 ] && [ "$STATE" == "signed_in" ] && xo-cli --unregister 2>&1 | |
[ -n "$exit_message" ] && fail "$exit_message" $set_exit | |
} | |
log_debug() { | |
[ -n "$DEBUG" ] && echo "$1" >> "$DEBUG" | |
} | |
parse_params() { | |
UNREGISTER=1 | |
DEBUG="" | |
while :; do | |
case "${1-}" in | |
-h | --help) | |
echo "usage: get_xoa_template.sh --template SomeTemplatePrefix" >&2 | |
echo "" >&2 | |
echo "Options:" >&2 | |
echo " -t | --template MyTemplatePrefix = The template to look for (required)" >&2 | |
echo " -s | --server ws://192.0.2.1 = Sign into Xen Orchestrator on 192.0.2.1" >&2 | |
echo " [Default to using XOA_URL environment variable]" >&2 | |
echo " -u | --user username@example.org = Sign into Xen Orchestrator using this username" >&2 | |
echo " [Default to using XOA_USER environment variable]" >&2 | |
echo " -p | --password hunter2 = Sign into Xen Orchestrator using this password" >&2 | |
echo " [Default to using XOA_PASSWORD environment variable]" >&2 | |
echo " -l | --pool MyXenPool1 = Use this pool when looking for the template." >&2 | |
echo " [Omit to ignore]" >&2 | |
echo " -x | --no-unregister = Don't log out from the XOA server once connected." >&2 | |
echo " -d | --debug = Log output to /tmp/xocli_output" >&2 | |
echo " -d | --debug /path/to/debug = Log output to the specified path" >&2 | |
echo " --debug=/path/to/debug = Log output to the specified path" >&2 | |
exit 255 | |
;; | |
-s | --server) | |
XOA_URL="${2-}" | |
shift | |
;; | |
-u | --user) | |
XOA_USER="${2-}" | |
shift | |
;; | |
-p | --password) | |
XOA_PASSWORD="${2-}" | |
shift | |
;; | |
-l | --pool) | |
XOA_POOL="${2-}" | |
shift | |
;; | |
-t | --template) | |
TEMPLATE="${2-}" | |
shift | |
;; | |
-x | --no-unregister) | |
UNREGISTER=0 | |
;; | |
-d | --debug) | |
DEBUG=/tmp/xocli_output | |
[ -n "${2-}" ] && [ "$(echo "${2-}" | cut -c1)" != "-" ] && DEBUG="${2-}" && shift | |
;; | |
--debug=*) | |
DEBUG="$(echo $1 | sed -E -e 's/^[^=]+=//')" | |
;; | |
*) | |
break | |
;; | |
esac | |
shift | |
done | |
} | |
sign_in() { | |
[ -z "$XOA_URL" ] || [ -z "$XOA_USER" ] || [ -z "$XOA_PASSWORD" ] && fail "Missing sign-in details" 1 | |
log_debug "Logging in" | |
if [ -n "$DEBUG" ] | |
then | |
xo-cli --register --au "$XOA_URL" "$XOA_USER" "$XOA_PASSWORD" 2>&1 | tee -a "$DEBUG" | grep -q 'Successfully' || fail "Login failed" 2 | |
else | |
xo-cli --register --au "$XOA_URL" "$XOA_USER" "$XOA_PASSWORD" 2>&1 | grep -q 'Successfully' || fail "Login failed" 2 | |
fi | |
STATE="signed_in" | |
} | |
get_pool() { | |
[ -z "$XOA_POOL" ] && log_debug "No Pool" && return 0 | |
log_debug "Getting Pool ID" | |
if [ -n "$DEBUG" ] | |
then | |
POOL_ID="\$pool=$(xo-cli --list-objects type=pool | jq -c -r ".[] | select(.name_label | match(\"${XOA_POOL}\")) | .uuid" | sort | tail -n 1 | tee -a "$DEBUG")" | |
else | |
POOL_ID="\$pool=$(xo-cli --list-objects type=pool | jq -c -r ".[] | select(.name_label | match(\"${XOA_POOL}\")) | .uuid" | sort | tail -n 1)" | |
fi | |
[ "$POOL_ID" == "\$pool=" ] && fail "Pool provided but no ID received" 3 | |
} | |
get_template() { | |
log_debug "Getting template" | |
if [ -n "$DEBUG" ] | |
then | |
TEMPLATE_IS="$(xo-cli --list-objects type=VM-template "${POOL_ID-}" | jq -c ".[] | select(.name_label | match(\"${TEMPLATE}\")) | .name_label" | sort | tail -n 1 | tee -a "$DEBUG")" | |
else | |
TEMPLATE_IS="$(xo-cli --list-objects type=VM-template "${POOL_ID-}" | jq -c ".[] | select(.name_label | match(\"${TEMPLATE}\")) | .name_label" | sort | tail -n 1)" | |
fi | |
[ -z "$TEMPLATE_IS" ] && fail "Could not match this template" 4 | |
if [ -n "$DEBUG" ] | |
then | |
echo "{\"is\": ${TEMPLATE_IS}}" | tee -a "$DEBUG" | |
else | |
echo "{\"is\": ${TEMPLATE_IS}}" | |
fi | |
} | |
[ -n "$(command -v xo-cli)" ] || fail "xo-cli is missing, and is a required dependency for this script. Please install it; \`sudo npm -g install xo-cli\`" 5 | |
parse_params "$@" | |
if [ -n "$DEBUG" ] | |
then | |
rm -f "$DEBUG" | |
log_debug "Invoked: $(date)" | |
log_debug "Template: $TEMPLATE" | |
log_debug "Pool: $XOA_POOL" | |
fi | |
sign_in | |
get_pool | |
get_template |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment