tilt-gcp-up.sh 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. # Tilt cannot differentiate between the listen and web address, so we need to jerry-rig the
  4. # external IP onto the external interface and undo the DNAT.
  5. if [[ "$EUID" -eq 0 ]]; then
  6. echo "Do not run as root"
  7. exit 1
  8. fi
  9. EXT_IP=$(curl -s -H "Metadata-Flavor: Google" \
  10. "http://metadata/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip")
  11. IFACE=$(ip route | awk '/default/ { print $5 }')
  12. if [[ -z "${IFACE}" ]]; then
  13. echo "Could not find interface"
  14. exit 1
  15. fi
  16. if [[ -z "${EXT_IP}" ]]; then
  17. echo "Could not find external IP"
  18. exit 1
  19. fi
  20. if ! ip addr show dev $IFACE | grep -q "inet $EXT_IP"; then
  21. echo "Adding IP $EXT_IP to $IFACE"
  22. sudo ip addr add "$EXT_IP/32" dev $IFACE
  23. fi
  24. RULE="-i $IFACE -p tcp ! --dport 22 -j DNAT --to-destination $EXT_IP"
  25. if ! sudo iptables -t nat -C PREROUTING $RULE; then
  26. echo "Adding iptables rule $RULE"
  27. sudo iptables -t nat -I PREROUTING $RULE
  28. fi
  29. tilt up --host=$EXT_IP --port=8080 -- "--webHost=$EXT_IP" ${@}