159 lines
3.6 KiB
Bash
Executable File
159 lines
3.6 KiB
Bash
Executable File
#!/bin/sh -e
|
|
|
|
SERVER= # set by set_server()
|
|
SERVER_NAME= # set by set_server()
|
|
ACTION= # set by set_action()
|
|
SNAPSHOT= # set by set_snapshot()
|
|
IMAGE= # set by set_image()
|
|
|
|
show_state() {
|
|
printf "SERVER: %s\n" "$SERVER"
|
|
printf "SERVER_NAME: %s\n" "$SERVER_NAME"
|
|
printf "ACTION: %s\n" "$ACTION"
|
|
printf "SNAPSHOT: %s\n" "$SNAPSHOT"
|
|
printf "IMAGE: %s\n" "$IMAGE"
|
|
printf "\nContinue? "
|
|
read -r _c
|
|
case $_c in
|
|
[Yy]) return; ;;
|
|
*) exit 2; ;;
|
|
esac
|
|
}
|
|
|
|
########################
|
|
### SERVER SELECTION ###
|
|
########################
|
|
|
|
set_server() {
|
|
SERVER_LIST="$(hcloud server list \
|
|
-o noheader \
|
|
-o columns=id,name,status,ipv4,ipv6)"
|
|
SERVER="$(printf '%s\n%s' \
|
|
"$SERVER_LIST" \
|
|
"0 create new server" \
|
|
| fzf --tac --exact --with-nth=2.. \
|
|
| cut -d" " -f1 \
|
|
)"
|
|
}
|
|
|
|
########################
|
|
### ACTION SELECTION ###
|
|
########################
|
|
|
|
# Format: key Description...
|
|
ACTION_LIST="\
|
|
create_snap Create snapshot
|
|
delete_snap Delete snapshot
|
|
restore_snap Restore snapshot
|
|
on Turn on
|
|
off Turn off
|
|
delete_server Delete VM(!!!!)
|
|
"
|
|
|
|
set_action() {
|
|
ACTION="$(printf '%s\n' "$ACTION_LIST" \
|
|
| fzf --tac --exact --with-nth=2.. \
|
|
--header="Action for Server ID ${SERVER}" \
|
|
| cut -d" " -f1 \
|
|
)"
|
|
}
|
|
|
|
##########################
|
|
### SNAPSHOT SELECTION ###
|
|
##########################
|
|
# needs: SERVER
|
|
|
|
set_snap() {
|
|
SNAPSHOT="$(hcloud image list \
|
|
-o columns=id,description \
|
|
-o noheader \
|
|
-t snapshot \
|
|
| fzf --tac --exact --with-nth=2.. \
|
|
| cut -d" " -f1 \
|
|
)"
|
|
}
|
|
|
|
#######################
|
|
### IMAGE SELECTION ###
|
|
#######################
|
|
|
|
set_image() {
|
|
IMAGE="$(hcloud image list \
|
|
-o columns=id,description \
|
|
-o noheader \
|
|
-t system \
|
|
| fzf --tac --exact --with-nth=2.. \
|
|
| cut -d" " -f1 \
|
|
)"
|
|
}
|
|
|
|
#########################
|
|
### CREATE NEW SERVER ###
|
|
#########################
|
|
# needs: SERVER=0, IMAGE
|
|
create_server() {
|
|
echo NOT IMPLEMENTED
|
|
}
|
|
|
|
#####################
|
|
### DELETE SERVER ###
|
|
#####################
|
|
# needs: SERVER=0
|
|
delete_server() {
|
|
echo NOT IMPLEMENTED
|
|
}
|
|
|
|
#########################
|
|
### RESTORE FROM SNAP ###
|
|
#########################
|
|
# needs: SERVER, SNAPSHOT
|
|
restore_snap() {
|
|
echo NOT IMPLEMENTED
|
|
}
|
|
|
|
#######################
|
|
### CREATE SNAPSHOT ###
|
|
#######################
|
|
# needs: SERVER
|
|
create_snap() {
|
|
echo NOT IMPLEMENTED
|
|
}
|
|
|
|
#######################
|
|
### DELETE SNAPSHOT ###
|
|
#######################
|
|
# needs: SERVER, SNAPSHOT
|
|
|
|
delete_snap() {
|
|
echo NOT IMPLEMENTED
|
|
}
|
|
|
|
|
|
|
|
################################
|
|
### MAIN PROGRAM STARTS HERE ###
|
|
################################
|
|
|
|
# We need a server
|
|
set_server
|
|
|
|
# In case we want a new server, the action is implicit. For all other
|
|
# cases, we ask for user input.
|
|
if [ $SERVER -eq 0 ]; then
|
|
ACTION=create_server
|
|
else
|
|
set_action
|
|
fi
|
|
|
|
# Now we evaluate the action and execute the next steps
|
|
case $ACTION in
|
|
delete_snap) set_snap; delete_snap; ;;
|
|
restore_snap) set_snap; restore_snap; ;;
|
|
create_snap) create_snap; ;;
|
|
create_server) create_server; ;;
|
|
delete_server) delete_server; ;;
|
|
console) hcloud server request-console ${SERVER}; ;;
|
|
turn*on) hcloud server poweron ${SERVER}; exit 0; ;;
|
|
turn*off) hcloud server poweroff ${SERVER}; exit 0; ;;
|
|
esac
|