From 311ea6f113bf7c9c6e35b573ef808d754dd361bb Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Fri, 12 Feb 2016 15:14:01 -0500 Subject: [PATCH] Add arvbox support for overriding settings in application.yml no issue # --- README.md | 5 ++++ bin/arvbox | 23 +++++++++++------- lib/arvbox/docker/Dockerfile.base | 4 +++- lib/arvbox/docker/application_yml_override.py | 24 +++++++++++++++++++ lib/arvbox/docker/service/api/run-service | 2 ++ lib/arvbox/docker/service/sso/run-service | 2 ++ .../docker/service/workbench/run-service | 2 ++ 7 files changed, 52 insertions(+), 10 deletions(-) create mode 100755 lib/arvbox/docker/application_yml_override.py diff --git a/README.md b/README.md index 9ced1d11d1..809868656b 100644 --- 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. +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 diff --git a/bin/arvbox b/bin/arvbox index d60c35497d..10fac0db55 100755 --- a/bin/arvbox +++ b/bin/arvbox @@ -196,7 +196,7 @@ run() { WORKSPACE=/usr/src/arvados \ GEM_HOME=/var/lib/gems \ "$@" - else + elif echo "$1" | grep 'dev$' ; then 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" + else + echo "Unknown configuration '$1'" fi fi } @@ -348,15 +350,18 @@ case "$subcmd" in fi ;; - log|svrestart) + log) 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 " echo "Available services:" diff --git a/lib/arvbox/docker/Dockerfile.base b/lib/arvbox/docker/Dockerfile.base index 108ed53378..c0dc7671d7 100644 --- a/lib/arvbox/docker/Dockerfile.base +++ b/lib/arvbox/docker/Dockerfile.base @@ -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 \ - 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 @@ -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 \ + application_yml_override.py \ /usr/local/lib/arvbox/ + 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 index 0000000000..98a8e489a0 --- /dev/null +++ b/lib/arvbox/docker/application_yml_override.py @@ -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) diff --git a/lib/arvbox/docker/service/api/run-service b/lib/arvbox/docker/service/api/run-service index 530a039079..058939c477 100755 --- a/lib/arvbox/docker/service/api/run-service +++ b/lib/arvbox/docker/service/api/run-service @@ -64,6 +64,8 @@ development: 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 diff --git a/lib/arvbox/docker/service/sso/run-service b/lib/arvbox/docker/service/sso/run-service index 2f501a4d2f..da413e09de 100755 --- a/lib/arvbox/docker/service/sso/run-service +++ b/lib/arvbox/docker/service/sso/run-service @@ -39,6 +39,8 @@ development: 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 diff --git a/lib/arvbox/docker/service/workbench/run-service b/lib/arvbox/docker/service/workbench/run-service index 7f0542fc8f..850022a792 100755 --- a/lib/arvbox/docker/service/workbench/run-service +++ b/lib/arvbox/docker/service/workbench/run-service @@ -36,3 +36,5 @@ development: 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) -- 2.30.2