aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/gce_setup/new_grpc_docker_builder_on_startup.sh
diff options
context:
space:
mode:
authorGravatar Nicolas Noble <nnoble@google.com>2015-01-06 18:08:25 -0800
committerGravatar Nicolas Noble <nnoble@google.com>2015-01-06 18:08:25 -0800
commitddef24620a67fa352d94415dc56121c01e3d8af8 (patch)
treef2383ee6e84a21e92f1524d23436ab28cfe04756 /tools/gce_setup/new_grpc_docker_builder_on_startup.sh
parent9f2b09e112f5b95e843de786d7d3ecfd026170b6 (diff)
Adding the tools directory to the git export.
Diffstat (limited to 'tools/gce_setup/new_grpc_docker_builder_on_startup.sh')
-rwxr-xr-xtools/gce_setup/new_grpc_docker_builder_on_startup.sh70
1 files changed, 70 insertions, 0 deletions
diff --git a/tools/gce_setup/new_grpc_docker_builder_on_startup.sh b/tools/gce_setup/new_grpc_docker_builder_on_startup.sh
new file mode 100755
index 0000000000..87e8aac1e7
--- /dev/null
+++ b/tools/gce_setup/new_grpc_docker_builder_on_startup.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+# Startup script that initializes a grpc-dev GCE machine.
+#
+# A grpc-docker GCE machine is based on docker container image.
+#
+# On startup, it copies the grpc dockerfiles to a local directory, and update its address
+# so that the docker containers within it have git-on-borg-access.
+
+# _load_metadata curls a metadata url
+_load_metadata() {
+ local metadata_root=http://metadata/computeMetadata/v1
+ local uri=$1
+ [[ -n $uri ]] || { echo "missing arg: uri" >&2; return 1; }
+
+ if [[ $uri =~ ^'attributes/' ]]
+ then
+ for a in $(curl -H "X-Google-Metadata-Request: True" $metadata_root/instance/attributes/)
+ do
+ [[ $uri =~ "/$a"$ ]] && { curl $metadata_root/instance/$uri -H "X-Google-Metadata-Request: True"; return; }
+ done
+ fi
+
+ # if the uri is a full request uri
+ [[ $uri =~ ^$metadata_root ]] && { curl $uri -H "X-Google-Metadata-Request: True"; return; }
+}
+
+_source_gs_script() {
+ local script_attr=$1
+ [[ -n $script_attr ]] || { echo "missing arg: script_attr" >&2; return 1; }
+
+ local gs_uri=$(_load_metadata "attributes/$script_attr")
+ [[ -n $gs_uri ]] || { echo "missing metadata: $script_attr" >&2; return 1; }
+
+ local out_dir='/var/local/startup_scripts'
+ local script_path=$out_dir/$(basename $gs_uri)
+ mkdir -p $out_dir
+ gsutil cp $gs_uri $script_path || {
+ echo "could not cp $gs_uri -> $script_path"
+ return 1
+ }
+ chmod a+rwx $out_dir $script_path
+ source $script_path
+}
+
+main() {
+ local script_attr='shared_startup_script_url'
+ _source_gs_script $script_attr || {
+ echo "halting, script 'attributes/$script_attr' could not be sourced"
+ return 1
+ }
+ grpc_dockerfile_pull
+ chmod -R a+rw /var/local/dockerfile
+
+ # Install git and emacs
+ apt-get update && apt-get install -y git emacs || return 1
+
+ # Enable access to git repos on git-on-borg
+ local git_root='/var/local/git'
+ install_gob_daemon $git_root/gerrit-gcompute-tools || return 1
+
+ # Startup the docker registry
+ grpc_docker_launch_registry && grpc_docker_pull_known
+
+ # Add a sentinel file to indicate that startup has completed.
+ local sentinel_file=/var/log/GRPC_DOCKER_IS_UP
+ touch $sentinel_file
+}
+
+set -x
+main "$@"