Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
tf-dev-script.sh
#!/bin/bash
# Assumes you have a DIGITALOCEAN_TOKEN env var pre-set
# Assumes you have terraform and mutagen installed
# Assumes DO has an SSH key uploaded
DO_REGION="sgp1" # Set to DO region: https://www.digitalocean.com/docs/platform/availability-matrix/
SSH_KEY_FINGERPRINT="your-key-fingerprint" # You can find this in your control panel
if [ -z $DIGITALOCEAN_TOKEN ]; then
exit 1
fi
cat <<EOF > terraform.tf
provider "digitalocean" {}
resource "digitalocean_droplet" "web" {
image = "ubuntu-20-04-x64"
name = "dev"
region = "$DO_REGION"
size = "s-1vcpu-1gb"
ssh_keys = ["$SSH_KEY_FINGERPRINT"]
}
output "ip_addr" {
value = digitalocean_droplet.web.ipv4_address
}
EOF
terraform init
terraform apply -auto-approve
export REMOTE_IP_ADDR=`terraform output | ruby -e "puts STDIN.read.split.last"`
sleep 5 # give DO enough time to come up
ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null root@$REMOTE_IP_ADDR <<'ENDSSH'
apt install --yes make ruby ruby-dev build-essential
gem install bundler
bundle config set path 'vendor/bundle'
ENDSSH
mutagen sync create --sync-mode=one-way-safe --name=devproj-code . root@$REMOTE_IP_ADDR:~/
mutagen sync flush devproj-code
ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null root@$REMOTE_IP_ADDR "bundle install"
echo "Dev box ready: ssh root@$REMOTE_IP_ADDR"
# next line only works once the remote service is actually up
# mutagen forward create --name=devproj tcp:localhost:9292 root@$REMOTE_IP_ADDR:tcp:localhost:9292
# TODO: up/down/console/forward/run commands
# TODO: Vultr + other cloud provider support
# Down with:
# mutagen sync terminate -a && terraform destroy -auto-approve
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment