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
 | 
