Skip to content

Commit

Permalink
Merge pull request #931 from plexguide/dev
Browse files Browse the repository at this point in the history
Dev Update to Main
  • Loading branch information
Admin9705 authored Sep 4, 2024
2 parents b05cef0 + 2be6473 commit 99413ad
Show file tree
Hide file tree
Showing 4 changed files with 336 additions and 19 deletions.
13 changes: 12 additions & 1 deletion mods/scripts/apps_interface.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,21 @@ config_type=$2 # 'personal' for personal configurations, 'official' for officia

# Function: check_deployment_status
check_deployment_status() {
# Load the configuration file to get the port_number
if [[ "$config_type" == "personal" ]]; then
config_file="/pg/personal_configs/${app_name}.cfg"
else
config_file="/pg/config/${app_name}.cfg"
fi

if [[ -f "$config_file" ]]; then
source "$config_file"
fi

local container_status=$(docker ps --filter "name=^/${app_name}$" --format "{{.Names}}")

if [[ "$container_status" == "$app_name" ]]; then
echo -e "${GREEN}[Deployed]${NC} $app_name"
echo -e "${GREEN}[Deployed]${NC} $app_name - Port: $port_number"
else
echo -e "${RED}[Not Deployed]${NC} $app_name"
fi
Expand Down
256 changes: 256 additions & 0 deletions mods/scripts/cloud_hetzner.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,256 @@
#!/bin/bash

# Title: PG Cloud Hetzner Manager Script
# Description: Script to manage Hetzner Cloud servers using the new hcloud CLI

# Configuration file path for storing the token
TOKEN_FILE="/pg/hcloud/.token"

# ANSI color codes
CYAN="\033[0;36m"
RED="\033[0;31m"
ORANGE="\033[0;33m"
WHITE="\033[1;37m"
BOLD="\033[1m"
NC="\033[0m" # No color

# Function to install hcloud CLI if missing
install_hcloud() {
if ! command -v hcloud &> /dev/null; then
echo "Installing Hetzner CLI..."
curl -o /tmp/hcloud.tar.gz -L https://github.com/hetznercloud/cli/releases/latest/download/hcloud-linux-amd64.tar.gz
tar -xzf /tmp/hcloud.tar.gz -C /tmp
mv /tmp/hcloud /usr/local/bin/hcloud
chmod +x /usr/local/bin/hcloud
rm -rf /tmp/hcloud.tar.gz
fi
}

# Function to validate the Hetzner API token
validate_hcloud_token() {
if [[ -f "$TOKEN_FILE" ]]; then
export HCLOUD_TOKEN=$(cat "$TOKEN_FILE")
if ! hcloud server list &> /dev/null; then
echo -e "\n${RED}WARNING! The existing token is invalid.${NC}"
change_token
fi
else
change_token
fi
}

# Function to change or set the hcloud API token
change_token() {
echo -e "\nPlease provide a valid Hetzner API token."
echo -e "\nFollow these steps:"
echo -e "1. Activate a Hetzner Cloud Account"
echo -e "2. Create a Project"
echo -e "3. Go to Security (left-hand side)"
echo -e "4. Select and Click API Tokens"
echo -e "5. Create a Token and Save It\n"
echo -e "Type 'exit' to cancel and return to the main menu.\n"
read -p 'Paste your API token here (or type exit): ' api_token </dev/tty

# Check if the user typed exit
if [[ "${api_token,,}" == "exit" ]]; then
echo -e "\nToken generation canceled. Exiting interface...\n"
exit 0
fi

# Validate the token format (64 alphanumeric characters)
if [[ ! "$api_token" =~ ^[a-zA-Z0-9]{64}$ ]]; then
echo -e "\n${RED}Invalid token format. Please try again.${NC}"
change_token
fi

# Save the token to the TOKEN_FILE
echo "$api_token" > "$TOKEN_FILE"
export HCLOUD_TOKEN="$api_token"

# Verify the token
if ! hcloud server list &> /dev/null; then
echo -e "\n${RED}Invalid token provided. Please try again.${NC}\n"
rm -f "$TOKEN_FILE"
change_token
else
echo -e "\n${WHITE}Token successfully configured.${NC}"
fi
}

# Function to ensure necessary directories exist
setup_directories() {
mkdir -p /pg/hcloud
}

# Main menu function
main_menu() {
clear
echo -e "${CYAN}${BOLD}PG: Hetzner Cloud Manager${NC}\n"
echo -e "[1] Deploy a New Server"
echo -e "[2] Destroy a Server"
echo -e "[A] List Servers"
echo -e "[B] Show Initial Passwords"
echo -e "[T] Change API Token"
echo -e "[Z] Exit\n"
read -p 'Select an option: ' option </dev/tty

case ${option,,} in
1) deploy_server ;;
2) destroy_server ;;
a) list_servers ;;
b) show_initial_passwords ;;
t) change_token ;;
z) exit 0 ;;
*) main_menu ;;
esac
}

# Function to deploy a new server
deploy_server() {
clear
read -p 'Enter Server Name: ' server_name </dev/tty

# Select OS
echo -e "\n${CYAN}${BOLD}Select OS:${NC}\n"
echo -e "[1] Ubuntu 20.04"
echo -e "[2] Ubuntu 22.04"
echo -e "[3] Ubuntu 24.04"
echo -e "[4] Debian 11"
echo -e "[5] Fedora 40"
echo -e "[6] CentOS 9"
echo -e "[7] Rocky Linux 9"
echo -e "[8] AlmaLinux 9"
echo -e "[Z] Exit\n"
read -p 'Select an option: ' os_option </dev/tty

case $os_option in
1) os="ubuntu-20.04" ;;
2) os="ubuntu-22.04" ;;
3) os="ubuntu-24.04" ;;
4) os="debian-11" ;;
5) os="fedora-40" ;;
6) os="centos-9" ;;
7) os="rockylinux-9" ;;
8) os="almalinux-9" ;;
[Zz]) main_menu ;;
*) deploy_server ;;
esac

# Select CPU Type: Shared or Dedicated
echo -e "\n${CYAN}${BOLD}Select CPU Type:${NC}\n"
echo -e "[1] Shared vCPU (Lower Cost)"
echo -e "[2] Dedicated vCPU (Higher Performance)\n"
read -p 'Select an option: ' cpu_type_option </dev/tty

case $cpu_type_option in
1) cpu_type="shared" ;;
2) cpu_type="dedicated" ;;
*) deploy_server ;;
esac

# Select Server Type
if [[ "$cpu_type" == "shared" ]]; then
echo -e "\n${CYAN}${BOLD}Select Shared Server Type:${NC}\n"
echo -e "[1] CX22 - 2vCPU | 4GB RAM | Intel"
echo -e "[2] CPX11 - 2vCPU | 2GB RAM | AMD "
echo -e "[3] CX32 - 4vCPU | 8GB RAM | Intel"
echo -e "[4] CPX21 - 3vCPU | 4GB RAM | AMD "
echo -e "[5] CPX31 - 4vCPU | 8GB RAM | AMD "
echo -e "[6] CX42 - 8vCPU | 16GB RAM | Intel"
echo -e "[7] CPX41 - 8vCPU | 16GB RAM | AMD "
echo -e "[8] CX52 - 16vCPU | 32GB RAM | Intel"
echo -e "[9] CPX51 - 16vCPU | 32GB RAM | AMD "
echo -e "[Z] Exit\n"
read -p 'Select an option: ' server_type_option </dev/tty

case $server_type_option in
1) server_type="cx22" ;;
2) server_type="cpx11" ;;
3) server_type="cx32" ;;
4) server_type="cpx21" ;;
5) server_type="cpx31" ;;
6) server_type="cx42" ;;
7) server_type="cpx41" ;;
8) server_type="cx52" ;;
9) server_type="cpx51" ;;
[Zz]) main_menu ;;
*) deploy_server ;;
esac
else
echo -e "\n${CYAN}${BOLD}Select Dedicated Server Type:${NC}\n"
echo -e "[1] CCX13 - 2vCPU | 8GB RAM | AMD"
echo -e "[2] CCX23 - 4vCPU | 16GB RAM | AMD"
echo -e "[3] CCX33 - 8vCPU | 32GB RAM | AMD"
echo -e "[4] CCX43 - 16vCPU | 64GB RAM | AMD"
echo -e "[5] CCX53 - 32vCPU | 128GB RAM | AMD"
echo -e "[6] CCX63 - 48vCPU | 192GB RAM | AMD"
echo -e "[Z] Exit\n"
read -p 'Select an option: ' server_type_option </dev/tty

case $server_type_option in
1) server_type="ccx13" ;;
2) server_type="ccx23" ;;
3) server_type="ccx33" ;;
4) server_type="ccx43" ;;
5) server_type="ccx53" ;;
6) server_type="ccx63" ;;
[Zz]) main_menu ;;
*) deploy_server ;;
esac
fi

# Create the server
echo -e "\nDeploying server..."
hcloud server create --name "$server_name" --type "$server_type" --image "$os" > "/pg/hcloud/$server_name.info"
echo -e "\nServer information:"
cat "/pg/hcloud/$server_name.info"
read -p 'Press [ENTER] to continue...' </dev/tty
main_menu
}

# Function to list servers
list_servers() {
clear
echo -e "${CYAN}${BOLD}Hetzner Cloud Servers:${NC}\n"
hcloud server list | awk 'NR>1 {print $2}'
echo ""
read -p 'Press [ENTER] to continue...' </dev/tty
main_menu
}

# Function to destroy a server
destroy_server() {
clear
echo -e "${CYAN}${BOLD}Available Servers to Destroy:${NC}\n"
hcloud server list | awk 'NR>1 {print $2}'
echo ""
read -p 'Enter server name to destroy or [Z] to exit: ' server_name </dev/tty

if [[ "$server_name" =~ ^[Zz]$ ]]; then
main_menu
elif hcloud server list | grep -q "$server_name"; then
hcloud server delete "$server_name"
echo "Server $server_name destroyed."
else
echo "Server $server_name does not exist."
fi

read -p 'Press [ENTER] to continue...' </dev/tty
main_menu
}

# Function to show initial passwords
show_initial_passwords() {
clear
echo -e "${CYAN}${BOLD}Initial Server Passwords:${NC}\n"
grep -i 'password' /pg/hcloud/*.info
echo ""
read -p 'Press [ENTER] to continue...' </dev/tty
main_menu
}

# Execute script
install_hcloud
setup_directories
validate_hcloud_token
main_menu
43 changes: 43 additions & 0 deletions mods/scripts/cloud_server.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/bin/bash

# ANSI color codes
CYAN="\033[0;36m"
GOLD="\033[0;33m"
RED="\033[0;31m"
BOLD="\033[1m"
NC="\033[0m" # No color

# Clear the screen at the start
clear

# Main menu loop for PG Cloud Server Deployment Interface
cloud_server_menu() {
while true; do
clear

# Display the header
echo -e "${CYAN}${BOLD}PG Cloud Server Deployment Interface${NC}"
echo "" # Blank line for separation

# Display menu options
echo -e "[${GOLD}${BOLD}H${NC}] Hetzner (HCloud)"
echo -e "[${RED}${BOLD}Z${NC}] Exit"
echo "" # Space between options and input prompt

# Prompt for user input
read -p "Enter your choice: " choice

# Process user input
case ${choice,,} in
h) bash /pg/scripts/cloud_hetzner.sh ;;
z) exit 0 ;;
*)
echo -e "${RED}Invalid option. Please try again.${NC}"
read -p "Press Enter to continue..."
;;
esac
done
}

# Run the menu
cloud_server_menu
Loading

0 comments on commit 99413ad

Please sign in to comment.