summaryrefslogtreecommitdiff
path: root/genesisctl.sh
diff options
context:
space:
mode:
Diffstat (limited to 'genesisctl.sh')
-rwxr-xr-xgenesisctl.sh104
1 files changed, 104 insertions, 0 deletions
diff --git a/genesisctl.sh b/genesisctl.sh
new file mode 100755
index 0000000..21fdf7d
--- /dev/null
+++ b/genesisctl.sh
@@ -0,0 +1,104 @@
+#!/usr/bin/env bash
+# genesisctl - Genesis VPS Provisioning and Reboot CLI
+# Usage:
+# genesisctl provision <label> <region> <type> <image> [root_pass]
+# genesisctl reboot <linode-id>
+# genesisctl list regions|types|images
+# genesisctl ultra <label> [root_pass]
+# genesisctl safe <label> [root_pass]
+# genesisctl micro <label> [root_pass]
+# genesisctl mastodon <label> [root_pass]
+# genesisctl destroy <label>
+
+LINODE_API_TOKEN="f8b1552bf1f2f791e16fed0c1474d56014330de1c33810527523e44a7389cb6f"
+
+# Package presets
+PACKAGE_ULTRA_REGION="us-east"
+PACKAGE_ULTRA_TYPE="g6-dedicated-4"
+PACKAGE_ULTRA_IMAGE="linode/ubuntu22.04"
+
+PACKAGE_SAFE_REGION="us-east"
+PACKAGE_SAFE_TYPE="g6-standard-2"
+PACKAGE_SAFE_IMAGE="linode/ubuntu22.04"
+
+PACKAGE_MICRO_REGION="us-east"
+PACKAGE_MICRO_TYPE="g6-nanode-1"
+PACKAGE_MICRO_IMAGE="linode/ubuntu22.04"
+
+PACKAGE_MASTODON_REGION="us-east"
+PACKAGE_MASTODON_TYPE="g6-standard-4"
+PACKAGE_MASTODON_IMAGE="linode/ubuntu22.04"
+
+for f in functions/*.sh; do source "$f"; done
+
+# Helper for DNS pre-propagation check (used after provisioning)
+await_dns_propagation() {
+ HOSTNAME="$1"
+ EXPECTED_IP="$2"
+
+ echo "⏳ Waiting for DNS A record to propagate for $HOSTNAME to $EXPECTED_IP..."
+ for i in {1..10}; do
+ ACTUAL_IP=$(dig +short "$HOSTNAME")
+ if [[ "$ACTUAL_IP" == "$EXPECTED_IP" ]]; then
+ echo "✅ DNS A record found: $HOSTNAME → $EXPECTED_IP"
+ return 0
+ fi
+ echo "...still waiting ($i/10)..."
+ sleep 10
+ done
+ echo "❌ DNS A record for $HOSTNAME did not propagate in time. Skipping rDNS setup."
+ return 1
+}
+
+case "$1" in
+ provision)
+ provision_vps "$2" "$3" "$4" "$5" "$6"
+ ;;
+ reboot)
+ reboot_vps "$2"
+ ;;
+ destroy)
+ destroy_vps_by_label "$2"
+ ;;
+ safe)
+ provision_vps "$2" "$PACKAGE_SAFE_REGION" "$PACKAGE_SAFE_TYPE" "$PACKAGE_SAFE_IMAGE" "$3"
+ ;;
+ ultra)
+ provision_vps "$2" "$PACKAGE_ULTRA_REGION" "$PACKAGE_ULTRA_TYPE" "$PACKAGE_ULTRA_IMAGE" "$3"
+ ;;
+ micro)
+ provision_vps "$2" "$PACKAGE_MICRO_REGION" "$PACKAGE_MICRO_TYPE" "$PACKAGE_MICRO_IMAGE" "$3"
+ ;;
+ mastodon)
+ provision_vps "$2" "$PACKAGE_MASTODON_REGION" "$PACKAGE_MASTODON_TYPE" "$PACKAGE_MASTODON_IMAGE" "$3"
+ ;;
+ backup)
+ enable_backups_by_label "$2"
+ ;;
+ disable-backup)
+ disable_backups_by_label "$2"
+ ;;
+ status)
+ status_vps "$2"
+ ;;
+ listvps)
+ list_all_vps
+ ;;
+ disable)
+ disable_ip "$2"
+ ;;
+ resize)
+ resize_vps "$2" "$3"
+ ;;
+ safe-create)
+ safe_create_dataset "$2" "$3"
+ ;;
+ verify_ptr)
+ verify_ptr "$2"
+ ;;
+ *)
+ echo "Usage: $0 <command> [...]"
+ echo "Available commands: provision, reboot, destroy, safe, ultra, micro, mastodon"
+ exit 1
+ ;;
+esac