Add arvbox support for overriding settings in application.yml
authorPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 12 Feb 2016 20:14:01 +0000 (15:14 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 12 Feb 2016 20:14:01 +0000 (15:14 -0500)
no issue #

README.md
bin/arvbox
lib/arvbox/docker/Dockerfile.base
lib/arvbox/docker/application_yml_override.py [new file with mode: 0755]
lib/arvbox/docker/service/api/run-service
lib/arvbox/docker/service/sso/run-service
lib/arvbox/docker/service/workbench/run-service

index 9ced1d11d1cb58eb50575436b6bd6b15da84bc25..809868656be7555d279d8a1a48c0aa1e4b5ca540 100644 (file)
--- a/README.md
+++ b/README.md
@@ -46,6 +46,11 @@ are bind mounted from the host file system for easy access and persistence
 across container rebuilds.  Services are bound to the Docker container's
 network IP address and can only be accessed on the local host.
 
 across container rebuilds.  Services are bound to the Docker container's
 network IP address and can only be accessed on the local host.
 
+In "dev" mode, you can override the default autogenerated settings of Rails
+projects by adding "application.yml.override" to any Rails project (sso, api,
+workbench).  This can be used to test out API server settings or point
+Workbench at an alternate API server.
+
 ### localdemo
 Demo configuration.  Boots a complete Arvados environment inside the container.
 Unlike the development configuration, code directories are included in the demo
 ### localdemo
 Demo configuration.  Boots a complete Arvados environment inside the container.
 Unlike the development configuration, code directories are included in the demo
index d60c35497d2db565213703f4a65e5e129263e771..10fac0db5503787fc1d2cf0a7e45f78600b02c3a 100755 (executable)
@@ -196,7 +196,7 @@ run() {
                    WORKSPACE=/usr/src/arvados \
                    GEM_HOME=/var/lib/gems \
                    "$@"
                    WORKSPACE=/usr/src/arvados \
                    GEM_HOME=/var/lib/gems \
                    "$@"
-        else
+        elif echo "$1" | grep 'dev$' ; then
             docker run \
                    --detach \
                    --name=$ARVBOX_CONTAINER \
             docker run \
                    --detach \
                    --name=$ARVBOX_CONTAINER \
@@ -212,6 +212,8 @@ run() {
             updateconf
             wait_for_arvbox
             echo "The Arvados source code is checked out at: $ARVADOS_ROOT"
             updateconf
             wait_for_arvbox
             echo "The Arvados source code is checked out at: $ARVADOS_ROOT"
+        else
+            echo "Unknown configuration '$1'"
         fi
     fi
 }
         fi
     fi
 }
@@ -348,15 +350,18 @@ case "$subcmd" in
         fi
         ;;
 
         fi
         ;;
 
-    log|svrestart)
+    log)
         if test -n "$1" ; then
         if test -n "$1" ; then
-            if test "$subcmd" = log ; then
-                docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM less --follow-name +GF "/etc/service/$1/log/main/current"
-            fi
-            if test "$subcmd" = svrestart ; then
-                docker exec -ti $ARVBOX_CONTAINER sv restart "$1"
-                docker exec -ti $ARVBOX_CONTAINER sv restart ready
-            fi
+            docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM less --follow-name +GF "/etc/service/$1/log/main/current"
+        else
+            docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM tail $(docker exec -ti $ARVBOX_CONTAINER find -L /etc -path '/etc/service/*/log/main/current' -printf " %p")
+        fi
+        ;;
+
+    svrestart)
+        if test -n "$1" ; then
+            docker exec -ti $ARVBOX_CONTAINER sv restart "$1"
+            docker exec -ti $ARVBOX_CONTAINER sv restart ready
         else
             echo "Usage: $0 $subcmd <service>"
             echo "Available services:"
         else
             echo "Usage: $0 $subcmd <service>"
             echo "Available services:"
index 108ed533789afbf354c3d001c5558e1d5412d26b..c0dc7671d79694345607924e65d9b2a24179fe86 100644 (file)
@@ -6,7 +6,7 @@ RUN apt-get update && \
     ruby rake bundler curl libpq-dev \
     libcurl4-openssl-dev libssl-dev zlib1g-dev libpcre3-dev \
     openssh-server python-setuptools netcat-traditional \
     ruby rake bundler curl libpq-dev \
     libcurl4-openssl-dev libssl-dev zlib1g-dev libpcre3-dev \
     openssh-server python-setuptools netcat-traditional \
-    libpython-dev fuse libfuse-dev python-pip \
+    libpython-dev fuse libfuse-dev python-pip python-yaml \
     pkg-config libattr1-dev python-llfuse python-pycurl \
     libwww-perl libio-socket-ssl-perl libcrypt-ssleay-perl \
     libjson-perl nginx gitolite3 lsof python-epydoc graphviz
     pkg-config libattr1-dev python-llfuse python-pycurl \
     libwww-perl libio-socket-ssl-perl libcrypt-ssleay-perl \
     libjson-perl nginx gitolite3 lsof python-epydoc graphviz
@@ -27,7 +27,9 @@ ADD fuse.conf /etc/
 ADD crunch-setup.sh gitolite.rc \
     keep-setup.sh common.sh createusers.sh \
     logger runsu.sh waitforpostgres.sh \
 ADD crunch-setup.sh gitolite.rc \
     keep-setup.sh common.sh createusers.sh \
     logger runsu.sh waitforpostgres.sh \
+    application_yml_override.py \
     /usr/local/lib/arvbox/
     /usr/local/lib/arvbox/
+
 ADD service/ /usr/local/lib/arvbox/service
 RUN rmdir /etc/service && ln -sf /usr/local/lib/arvbox/service /etc
 
 ADD service/ /usr/local/lib/arvbox/service
 RUN rmdir /etc/service && ln -sf /usr/local/lib/arvbox/service /etc
 
diff --git a/lib/arvbox/docker/application_yml_override.py b/lib/arvbox/docker/application_yml_override.py
new file mode 100755 (executable)
index 0000000..98a8e48
--- /dev/null
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+
+import yaml
+
+try:
+    with open("application.yml.override") as f:
+        b = yaml.load(f)
+except IOError:
+    exit()
+
+with open("application.yml") as f:
+    a = yaml.load(f)
+
+def recursiveMerge(a, b):
+    if isinstance(a, dict) and isinstance(b, dict):
+        for k in b:
+            print k
+            a[k] = recursiveMerge(a.get(k), b[k])
+        return a
+    else:
+        return b
+
+with open("application.yml", "w") as f:
+    yaml.dump(recursiveMerge(a, b), f)
index 530a039079dc07f91a9b5b8fbeb511c14fc4e1df..058939c477723d703960b19ccb4331641b1d56eb 100755 (executable)
@@ -64,6 +64,8 @@ development:
   default_collection_replication: 1
 EOF
 
   default_collection_replication: 1
 EOF
 
+(cd config && /usr/local/lib/arvbox/application_yml_override.py)
+
 if ! test -f /var/lib/arvados/api_database_pw ; then
     ruby -e 'puts rand(2**128).to_s(36)' > /var/lib/arvados/api_database_pw
 fi
 if ! test -f /var/lib/arvados/api_database_pw ; then
     ruby -e 'puts rand(2**128).to_s(36)' > /var/lib/arvados/api_database_pw
 fi
index 2f501a4d2f6c827f3f8710823df311d6236b71ec..da413e09de3d189b57c2924a0dec7a189e53270f 100755 (executable)
@@ -39,6 +39,8 @@ development:
   allow_account_registration: true
 EOF
 
   allow_account_registration: true
 EOF
 
+(cd config && /usr/local/lib/arvbox/application_yml_override.py)
+
 if ! test -f /var/lib/arvados/sso_database_pw ; then
     ruby -e 'puts rand(2**128).to_s(36)' > /var/lib/arvados/sso_database_pw
 fi
 if ! test -f /var/lib/arvados/sso_database_pw ; then
     ruby -e 'puts rand(2**128).to_s(36)' > /var/lib/arvados/sso_database_pw
 fi
index 7f0542fc8fe98d31652cfd7efb174cad42bb2027..850022a792c6b37b134f495857dd53d48e0d9f50 100755 (executable)
@@ -36,3 +36,5 @@ development:
   keep_web_url: http://$localip:${services[keep-web]}/c=%{uuid_or_pdh}
   arvados_docsite: http://$localip:${services[doc]}/
 EOF
   keep_web_url: http://$localip:${services[keep-web]}/c=%{uuid_or_pdh}
   arvados_docsite: http://$localip:${services[doc]}/
 EOF
+
+(cd config && /usr/local/lib/arvbox/application_yml_override.py)