2025-05-19 09:03:48 -04:00
|
|
|
#!/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"
|
|
|
|
|
2025-05-21 16:08:22 -04:00
|
|
|
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
|
2025-05-19 09:03:48 -04:00
|
|
|
fi
|
2025-05-21 16:08:22 -04:00
|
|
|
echo "...still waiting ($i/10)..."
|
|
|
|
sleep 10
|
|
|
|
done
|
|
|
|
echo "❌ DNS A record for $HOSTNAME did not propagate in time. Skipping rDNS setup."
|
|
|
|
return 1
|
2025-05-19 09:03:48 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
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"
|
|
|
|
;;
|
2025-05-21 16:08:22 -04:00
|
|
|
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"
|
|
|
|
;;
|
2025-05-19 09:03:48 -04:00
|
|
|
*)
|
|
|
|
echo "Usage: $0 <command> [...]"
|
|
|
|
echo "Available commands: provision, reboot, destroy, safe, ultra, micro, mastodon"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|