Adding the tools directory to the git export.
diff --git a/tools/gce_setup/compute_extras.sh b/tools/gce_setup/compute_extras.sh
new file mode 100755
index 0000000..e0def1a
--- /dev/null
+++ b/tools/gce_setup/compute_extras.sh
@@ -0,0 +1,255 @@
+#!/bin/bash
+
+# Bash funcs shared that combine common gcutil actions into single commands
+
+# remove_instance removes a named instance
+#
+# remove_instance <project> <instance_name> [<zone>="us-central1-b"]
+remove_instance() {
+  local project=$1
+  [[ -n $project ]] || {
+    echo "$FUNCNAME: missing arg: project" 1>&2
+    return 1
+  }
+  local an_instance=$2
+  [[ -n $an_instance ]] || {
+    echo "$FUNCNAME: missing arg: an_instance" 1>&2
+    return 1
+  }
+  local zone=$3
+  [[ -n $zone ]] || zone="us-central1-b"
+
+  gcloud --project $project --quiet \
+    compute instances delete $an_instance  --zone=$zone
+}
+
+# has_instance checks if a project contains a named instance
+#
+# has_instance <project> <instance_name>
+has_instance() {
+  local project=$1
+  [[ -n $project ]] || {
+    echo "$FUNCNAME: missing arg: project" 1>&2
+    return 1
+  }
+  local checked_instance=$2
+  [[ -n $checked_instance ]] || {
+    echo "$FUNCNAME: missing arg: checked_instance" 1>&2
+    return 1
+  }
+
+  instances=$(gcloud --project $project compute instances list \
+    | sed -e 's/ \+/ /g' | cut -d' ' -f 1)
+  for i in $instances
+  do
+    if [[ $i == $checked_instance ]]
+    then
+      return 0
+    fi
+  done
+
+  return 1
+}
+
+# find_network_ip finds the ip address of a instance if it is present in the project.
+#
+# find_network_ip <project> <instance_name>
+find_network_ip() {
+  local project=$1
+  [[ -n $project ]] || {
+    echo "$FUNCNAME: missing arg: project" 1>&2
+    return 1
+  }
+  local checked_instance=$2
+  [[ -n $checked_instance ]] || {
+    echo "$FUNCNAME: missing arg: checked_instance" 1>&2
+    return 1
+  }
+
+  has_instance $project $checked_instance || return 1
+  gcloud --project $project compute instances list \
+    | grep -e "$checked_instance\s" | sed -e 's/ \+/ /g' | cut -d' ' -f 4
+}
+
+# delete_disks deletes a bunch of disks matching a pattern
+#
+# delete_disks <project> <disk_pattern>
+delete_disks() {
+  local project=$1
+  [[ -n $project ]] || {
+    echo "$FUNCNAME: missing arg: project" 1>&2
+    return 1
+  }
+  local disk_pattern=$2
+  [[ -n $disk_pattern ]] || {
+    echo "$FUNCNAME: missing arg: disk_pattern" 1>&2
+    return 1
+  }
+
+  trash_disks=$(gcloud --project=$project compute disks list \
+    | sed -e 's/ \+/ /g' | cut -d' ' -f 1 | grep $disk_pattern)
+  [[ -n $trash_disks ]] && gcloud --project $project \
+    --quiet compute disks delete $trash_disks
+}
+
+# has_firewall checks if a project contains a named firewall
+#
+# has_firewall <project> <checked_firewall>
+has_firewall() {
+  local project=$1
+  [[ -n $project ]] || {
+    echo "$FUNCNAME: missing arg: project" 1>&2
+    return 1
+  }
+  local checked_firewall=$2
+  [[ -n $checked_firewall ]] || {
+    echo "$FUNCNAME: missing arg: checked_firewall" 1>&2
+    return 1
+  }
+
+  instances=$(gcloud --project $project compute firewall-rules list \
+    | sed -e 's/ \+/ /g' | cut -d' ' -f 1)
+  for i in $instances
+  do
+    if [[ $i == $checked_firewall ]]
+    then
+      return 0
+    fi
+  done
+
+  return 1
+}
+
+# remove_firewall removes a named firewall from a project.
+#
+# remove_firewall <project> <checked_firewall>
+remove_firewall() {
+  local project=$1
+  [[ -n $project ]] || {
+    echo "$FUNCNAME: missing arg: project" 1>&2
+    return 1
+  }
+  local a_firewall=$2
+  [[ -n $a_firewall ]] || {
+    echo "$FUNCNAME: missing arg: a_firewall" 1>&2
+    return 1
+  }
+
+  gcloud --project $project --quiet compute firewall-rules delete $a_firewall
+}
+
+# has_network checks if a project contains a named network
+#
+# has_network <project> <checked_network>
+has_network() {
+  local project=$1
+  [[ -n $project ]] || {
+    echo "$FUNCNAME: missing arg: project" 1>&2
+    return 1
+  }
+  local checked_network=$2
+  [[ -n $checked_network ]] || {
+    echo "$FUNCNAME: missing arg: checked_network" 1>&2
+    return 1
+  }
+
+  instances=$(gcloud --project $project compute networks list \
+    | sed -e 's/ \+/ /g' | cut -d' ' -f 1)
+  for i in $instances
+  do
+    if [[ $i == $checked_network ]]
+    then
+      return 0
+    fi
+  done
+
+  return 1
+}
+
+# maybe_setup_dev_network adds a network with the given name with firewalls
+# useful to development
+#
+# - All machines can accessed internally and externally over SSH (port 22)
+# - All machines can access one another other the internal network
+# - All machines can be accessed externally via port 80, 443, 8080 and 8443
+maybe_setup_dev_network() {
+  local name=$1
+  [[ -n $name ]] || {
+    echo "$FUNCNAME: missing arg: network name" 1>&2
+    return 1
+  }
+
+  local project=$2
+  [[ -n $project ]] || {
+    echo "$FUNCNAME: missing arg: project" 1>&2
+    return 1
+  }
+
+  has_network $project $name || {
+    echo "creating network '$name'" 1>&2
+    gcloud compute --project $project networks create $name || return 1
+  }
+
+  # allow instances on the network to connect to each other internally
+  has_firewall $project "$name-ssh" || {
+    echo "adding firewall '$name-ssh'" 1>&2
+    gcloud compute --project $project firewall-rules create "$name-ssh" \
+      --network $name  \
+      --allow tcp:22 || return 1;
+  }
+
+ # allow instances on the network to connect to each other internally
+  has_firewall $project "$name-internal" || {
+    echo "adding firewall '$name-internal'" 1>&2
+    gcloud compute --project $project firewall-rules create "$name-internal" \
+      --network $name  \
+      --source-ranges 10.0.0.0/16 --allow tcp udp icmp || return 1;
+  }
+
+  # allow instances on the network to be connected to from external ips on
+  # specific ports
+  has_firewall $project "$name-external" || {
+    echo "adding firewall '$name-external'" 1>&2
+    gcloud compute --project $project firewall-rules create "$name-external" \
+      --network $name  \
+      --allow tcp:80 tcp:8080 tcp:443 tcp:8443 || return 1;
+  }
+}
+
+# maybe_remove_dev_network removes a network set up by maybe_setup_dev_network
+maybe_remove_dev_network() {
+  local name=$1
+  [[ -n $name ]] || {
+    echo "$FUNCNAME: missing arg: network name" 1>&2
+    return 1
+  }
+
+  local project=$2
+  [[ -n $project ]] || {
+    echo "$FUNCNAME: missing arg: project" 1>&2
+    return 1
+  }
+
+  has_network $project $name || {
+    echo "network $name is not present"
+    return 0
+  }
+  for i in $(gcloud compute firewall-rules list \
+    | grep "$name-" | cut -d' ' -f 1)
+  do
+    gcloud compute --quiet firewall-rules delete $i || return 1;
+  done
+  gcloud compute --quiet networks delete $name
+}
+
+# find_named_ip finds the external ip address for a given name.
+#
+# find_named_ip <named-ip-address>
+find_named_ip() {
+  local name=$1
+  [[ -n $name ]] || { echo "$FUNCNAME: missing arg: name" 1>&2; return 1; }
+  [[ $name == 'none' ]] && return 0;
+
+  gcloud compute addresses list | sed -e 's/ \+/ /g' \
+    | grep $name | cut -d' ' -f 3
+}