| a33b2b6 | | | 1 | #!/usr/bin/env bash |
| a33b2b6 | | | 2 | set -euo pipefail |
| a33b2b6 | | | 3 | |
| a33b2b6 | | | 4 | HOSTS_FILE="${HOSTS_FILE:-/etc/hosts}" |
| a33b2b6 | | | 5 | HOSTS=( |
| a33b2b6 | | | 6 | "grove.test" |
| a33b2b6 | | | 7 | "canopy.grove.test" |
| a33b2b6 | | | 8 | "ring.grove.test" |
| bf6031c | | | 9 | "collab.grove.test" |
| a33b2b6 | | | 10 | ) |
| a33b2b6 | | | 11 | |
| a33b2b6 | | | 12 | if [[ ! -f "$HOSTS_FILE" ]]; then |
| a33b2b6 | | | 13 | echo "Hosts file not found: $HOSTS_FILE" >&2 |
| a33b2b6 | | | 14 | exit 1 |
| a33b2b6 | | | 15 | fi |
| a33b2b6 | | | 16 | |
| a33b2b6 | | | 17 | missing=() |
| a33b2b6 | | | 18 | for host in "${HOSTS[@]}"; do |
| a33b2b6 | | | 19 | pattern="(^|[[:space:]])${host//./\\.}([[:space:]]|$)" |
| a33b2b6 | | | 20 | if ! grep -Eq "$pattern" "$HOSTS_FILE"; then |
| a33b2b6 | | | 21 | missing+=("$host") |
| a33b2b6 | | | 22 | fi |
| a33b2b6 | | | 23 | done |
| a33b2b6 | | | 24 | |
| a33b2b6 | | | 25 | if [[ ${#missing[@]} -eq 0 ]]; then |
| a33b2b6 | | | 26 | exit 0 |
| a33b2b6 | | | 27 | fi |
| a33b2b6 | | | 28 | |
| a33b2b6 | | | 29 | lines="" |
| a33b2b6 | | | 30 | for host in "${missing[@]}"; do |
| a33b2b6 | | | 31 | lines+="127.0.0.1 ${host}"$'\n' |
| a33b2b6 | | | 32 | done |
| a33b2b6 | | | 33 | |
| a33b2b6 | | | 34 | echo "Adding local host aliases to ${HOSTS_FILE}: ${missing[*]}" |
| a33b2b6 | | | 35 | |
| a33b2b6 | | | 36 | if [[ "$HOSTS_FILE" != "/etc/hosts" || -w "$HOSTS_FILE" ]]; then |
| a33b2b6 | | | 37 | printf "%s" "$lines" >> "$HOSTS_FILE" |
| a33b2b6 | | | 38 | exit 0 |
| a33b2b6 | | | 39 | fi |
| a33b2b6 | | | 40 | |
| a33b2b6 | | | 41 | if ! printf "%s" "$lines" | sudo tee -a /etc/hosts >/dev/null; then |
| a33b2b6 | | | 42 | echo "Failed to update /etc/hosts." >&2 |
| a33b2b6 | | | 43 | echo "Add these lines manually:" >&2 |
| a33b2b6 | | | 44 | printf "%s" "$lines" >&2 |
| a33b2b6 | | | 45 | exit 1 |
| a33b2b6 | | | 46 | fi |