13879: Arvbox support for arvados-controller
authorPeter Amstutz <pamstutz@veritasgenetics.com>
Thu, 19 Jul 2018 22:15:03 +0000 (18:15 -0400)
committerPeter Amstutz <pamstutz@veritasgenetics.com>
Fri, 20 Jul 2018 13:29:03 +0000 (09:29 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>

27 files changed:
tools/arvbox/lib/arvbox/docker/Dockerfile.base
tools/arvbox/lib/arvbox/docker/api-setup.sh
tools/arvbox/lib/arvbox/docker/common.sh
tools/arvbox/lib/arvbox/docker/crunch-setup.sh
tools/arvbox/lib/arvbox/docker/keep-setup.sh
tools/arvbox/lib/arvbox/docker/service/api/run-service
tools/arvbox/lib/arvbox/docker/service/arv-git-httpd/run-service
tools/arvbox/lib/arvbox/docker/service/composer/run-service
tools/arvbox/lib/arvbox/docker/service/controller/log/main/.gitstub [new file with mode: 0644]
tools/arvbox/lib/arvbox/docker/service/controller/log/run [new symlink]
tools/arvbox/lib/arvbox/docker/service/controller/run [new file with mode: 0755]
tools/arvbox/lib/arvbox/docker/service/crunch-dispatch-local/run-service
tools/arvbox/lib/arvbox/docker/service/doc/run-service
tools/arvbox/lib/arvbox/docker/service/gitolite/run-service
tools/arvbox/lib/arvbox/docker/service/keep-web/run-service
tools/arvbox/lib/arvbox/docker/service/keepproxy/run-service
tools/arvbox/lib/arvbox/docker/service/nginx/log/main/.gitstub [new file with mode: 0644]
tools/arvbox/lib/arvbox/docker/service/nginx/log/run [new symlink]
tools/arvbox/lib/arvbox/docker/service/nginx/run [new symlink]
tools/arvbox/lib/arvbox/docker/service/nginx/run-service [new file with mode: 0755]
tools/arvbox/lib/arvbox/docker/service/ready/run-service
tools/arvbox/lib/arvbox/docker/service/sso/run-service
tools/arvbox/lib/arvbox/docker/service/vm/run
tools/arvbox/lib/arvbox/docker/service/vm/run-service
tools/arvbox/lib/arvbox/docker/service/websockets/run-service
tools/arvbox/lib/arvbox/docker/service/workbench/run-service
tools/arvbox/lib/arvbox/docker/yml_override.py [moved from tools/arvbox/lib/arvbox/docker/application_yml_override.py with 79% similarity]

index 1ac0e76c373cd3240175a5c3c81c00aeb44b138e..374692689a7027544bd26e4233c4b65dd4e00189 100644 (file)
@@ -89,7 +89,7 @@ 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 api-setup.sh \
+    yml_override.py api-setup.sh \
     go-setup.sh \
     /usr/local/lib/arvbox/
 
index 1618c11e42d4e2378cc7ca076f10b2ba67a9b44f..749df4ad0b86dca10c86e51915fdce7c85122dc4 100755 (executable)
@@ -68,7 +68,7 @@ $RAILS_ENV:
   keep_web_service_url: http://$localip:${services[keep-web]}/
 EOF
 
-(cd config && /usr/local/lib/arvbox/application_yml_override.py)
+(cd config && /usr/local/lib/arvbox/yml_override.py application.yml)
 
 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
index 319889baef28152a1a933bdc25cab7aa85491e1a..a82a964ea9c2f7cec5f16fd474664e89acc2a45c 100644 (file)
@@ -20,7 +20,9 @@ fi
 declare -A services
 services=(
   [workbench]=80
-  [api]=8000
+  [api]=8004
+  [controller]=8003
+  [controller-ssl]=8000
   [sso]=8900
   [composer]=4200
   [arv-git-httpd]=9001
index b3ec5cd10441f695522c50500a2e64fd3f6d8f5d..a36e5891bcef2c717ff4a0e1a2b51b3036428ed9 100755 (executable)
@@ -19,7 +19,7 @@ else
   RAILS_ENV=development
 fi
 
-export ARVADOS_API_HOST=$localip:${services[api]}
+export ARVADOS_API_HOST=$localip:${services[controller-ssl]}
 export ARVADOS_API_HOST_INSECURE=1
 export ARVADOS_API_TOKEN=$(cat /usr/src/arvados/services/api/superuser_token)
 export CRUNCH_JOB_BIN=/usr/src/arvados/sdk/cli/bin/crunch-job
index 8ef66a60687ce817e46308311dbcd4d80c6691ad..ec63027ef43b85df708fc22b7a50cd94c40de95c 100755 (executable)
@@ -19,7 +19,7 @@ fi
 
 mkdir -p /var/lib/arvados/$1
 
-export ARVADOS_API_HOST=$localip:${services[api]}
+export ARVADOS_API_HOST=$localip:${services[controller-ssl]}
 export ARVADOS_API_HOST_INSECURE=1
 export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
 
index f7ab6be6a03549fb84ead7628ebd98648f4e5750..f052b5d636cf6095ce12b004d40ec87d4fd2812c 100755 (executable)
@@ -31,6 +31,4 @@ if test "$1" = "--only-setup" ; then
     exit
 fi
 
-exec bundle exec passenger start --port=${services[api]} \
-                  --ssl --ssl-certificate=/var/lib/arvados/self-signed.pem \
-                  --ssl-certificate-key=/var/lib/arvados/self-signed.key
+exec bundle exec passenger start --port=${services[api]}
index 1383f7140f4ed961637d8c8ef160bfb3b575d317..9339f2328c6a9ee8a5e3058e537cb212ddbd0c00 100755 (executable)
@@ -16,7 +16,7 @@ if test "$1" = "--only-deps" ; then
     exit
 fi
 
-export ARVADOS_API_HOST=$localip:${services[api]}
+export ARVADOS_API_HOST=$localip:${services[controller-ssl]}
 export ARVADOS_API_HOST_INSECURE=1
 export PATH="$PATH:/var/lib/arvados/git/bin"
 cd ~git
index abd350f073c0f449b37b25362185b9b24a963136..f00b7f776ae5748a944cf44006b29e25a023ceda 100755 (executable)
@@ -18,5 +18,5 @@ if test "$1" = "--only-deps" ; then
     exit
 fi
 
-echo "apiEndPoint: https://${localip}:${services[api]}" > /usr/src/composer/src/composer.yml
+echo "apiEndPoint: https://${localip}:${services[controller-ssl]}" > /usr/src/composer/src/composer.yml
 exec node_modules/.bin/ng serve --host 0.0.0.0 --port 4200 --env=webdev
diff --git a/tools/arvbox/lib/arvbox/docker/service/controller/log/main/.gitstub b/tools/arvbox/lib/arvbox/docker/service/controller/log/main/.gitstub
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tools/arvbox/lib/arvbox/docker/service/controller/log/run b/tools/arvbox/lib/arvbox/docker/service/controller/log/run
new file mode 120000 (symlink)
index 0000000..d6aef4a
--- /dev/null
@@ -0,0 +1 @@
+/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/tools/arvbox/lib/arvbox/docker/service/controller/run b/tools/arvbox/lib/arvbox/docker/service/controller/run
new file mode 100755 (executable)
index 0000000..c2afc17
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/bash
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+exec 2>&1
+set -ex -o pipefail
+
+. /usr/local/lib/arvbox/common.sh
+. /usr/local/lib/arvbox/go-setup.sh
+
+flock /var/lib/gopath/gopath.lock go get -t "git.curoverse.com/arvados.git/cmd/arvados-server"
+install $GOPATH/bin/arvados-server /usr/local/bin
+(cd /usr/local/bin && ln -sf arvados-server arvados-controller)
+
+if test "$1" = "--only-deps" ; then
+    exit
+fi
+
+uuid_prefix=$(cat /var/lib/arvados/api_uuid_prefix)
+database_pw=$(cat /var/lib/arvados/api_database_pw)
+
+mkdir -p /etc/arvados
+
+cat >/var/lib/arvados/cluster_config.yml <<EOF
+Clusters:
+  ${uuid_prefix}:
+    NodeProfiles:
+      "*":
+        arvados-controller:
+          Listen: ":${services[controller]}" # choose a port
+        arvados-api-server:
+          Listen: ":${services[api]}" # must match Rails server port in your Nginx config
+    PostgreSQL:
+      ConnectionPool: 32 # max concurrent connections per arvados server daemon
+      Connection:
+        # All parameters here are passed to the PG client library in a connection string;
+        # see https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-PARAMKEYWORDS
+        Host: localhost
+        User: arvados
+        Password: ${database_pw}
+        DBName: arvados_development
+        client_encoding: utf8
+EOF
+
+/usr/local/lib/arvbox/yml_override.py /var/lib/arvados/cluster_config.yml
+
+cp /var/lib/arvados/cluster_config.yml /etc/arvados/config.yml
+
+exec /usr/local/lib/arvbox/runsu.sh /usr/local/bin/arvados-controller
index decbccddeeecce662a0e353da0dd01c26ce91021..87c427cd29ae0140b34d086f788a2df6e7aa4a48 100755 (executable)
@@ -23,7 +23,7 @@ exec /usr/local/bin/crunch-run -container-enable-networking=always -container-ne
 EOF
 chmod +x /usr/local/bin/crunch-run.sh
 
-export ARVADOS_API_HOST=$localip:${services[api]}
+export ARVADOS_API_HOST=$localip:${services[controller-ssl]}
 export ARVADOS_API_HOST_INSECURE=1
 export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
 
index 183ff2abfd5e4e162c5b0102c298991adeb33cdf..83225ed0bc6028335261742f35a3cd59a9feb581 100755 (executable)
@@ -18,34 +18,7 @@ if test "$1" = "--only-deps" ; then
     exit
 fi
 
-set -u
-
-cat <<EOF >/var/lib/arvados/doc-nginx.conf
-worker_processes auto;
-pid /var/lib/arvados/doc-nginx.pid;
-
-error_log stderr;
-daemon off;
-
-events {
-       worker_connections 64;
-}
-
-http {
-     access_log off;
-     include /etc/nginx/mime.types;
-     default_type application/octet-stream;
-     server {
-            listen ${services[doc]} default_server;
-            listen [::]:${services[doc]} default_server;
-            root /usr/src/arvados/doc/.site;
-            index index.html;
-            server_name _;
-     }
-}
-EOF
-
 cd /usr/src/arvados/doc
-bundle exec rake generate baseurl=http://$localip:${services[doc]} arvados_api_host=$localip:${services[api]} arvados_workbench_host=http://$localip
+bundle exec rake generate baseurl=http://$localip:${services[doc]} arvados_api_host=$localip:${services[controller-ssl]} arvados_workbench_host=http://$localip
 
-exec nginx -c /var/lib/arvados/doc-nginx.conf
+sv stop doc >/dev/null
index a38e49a0deadb9b36e771e69f6ca98f6e9b87ff4..eea0e120b29917d31f25016da47e94394804a8c5 100755 (executable)
@@ -10,7 +10,7 @@ set -eux -o pipefail
 
 mkdir -p /var/lib/arvados/git
 
-export ARVADOS_API_HOST=$localip:${services[api]}
+export ARVADOS_API_HOST=$localip:${services[controller-ssl]}
 export ARVADOS_API_HOST_INSECURE=1
 export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
 
@@ -112,7 +112,7 @@ cat > config/arvados-clients.yml <<EOF
 $RAILS_ENV:
   gitolite_url: /var/lib/arvados/git/repositories/gitolite-admin.git
   gitolite_tmp: /var/lib/arvados/git
-  arvados_api_host: $localip:${services[api]}
+  arvados_api_host: $localip:${services[controller-ssl]}
   arvados_api_token: "$ARVADOS_API_TOKEN"
   arvados_api_host_insecure: true
   gitolite_arvados_git_user_key: "$git_user_key"
index 70f2470b9fe7decd8a03efdfb09d5da8ab52f372..b539b6ae1eb5405d88e6e65044a73a34c548b721 100755 (executable)
@@ -16,7 +16,7 @@ if test "$1" = "--only-deps" ; then
     exit
 fi
 
-export ARVADOS_API_HOST=$localip:${services[api]}
+export ARVADOS_API_HOST=$localip:${services[controller-ssl]}
 export ARVADOS_API_HOST_INSECURE=1
 export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
 
index 199247b7a0e2bfc6dcabdd929dc5177275f730bc..bf802d45f3d8bdb9f13868bb39f66136ab34f42c 100755 (executable)
@@ -17,7 +17,7 @@ if test "$1" = "--only-deps" ; then
     exit
 fi
 
-export ARVADOS_API_HOST=$localip:${services[api]}
+export ARVADOS_API_HOST=$localip:${services[controller-ssl]}
 export ARVADOS_API_HOST_INSECURE=1
 export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
 
diff --git a/tools/arvbox/lib/arvbox/docker/service/nginx/log/main/.gitstub b/tools/arvbox/lib/arvbox/docker/service/nginx/log/main/.gitstub
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tools/arvbox/lib/arvbox/docker/service/nginx/log/run b/tools/arvbox/lib/arvbox/docker/service/nginx/log/run
new file mode 120000 (symlink)
index 0000000..d6aef4a
--- /dev/null
@@ -0,0 +1 @@
+/usr/local/lib/arvbox/logger
\ No newline at end of file
diff --git a/tools/arvbox/lib/arvbox/docker/service/nginx/run b/tools/arvbox/lib/arvbox/docker/service/nginx/run
new file mode 120000 (symlink)
index 0000000..a388c8b
--- /dev/null
@@ -0,0 +1 @@
+/usr/local/lib/arvbox/runsu.sh
\ No newline at end of file
diff --git a/tools/arvbox/lib/arvbox/docker/service/nginx/run-service b/tools/arvbox/lib/arvbox/docker/service/nginx/run-service
new file mode 100755 (executable)
index 0000000..6e9ae2b
--- /dev/null
@@ -0,0 +1,54 @@
+#!/bin/bash
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+exec 2>&1
+set -ex -o pipefail
+
+. /usr/local/lib/arvbox/common.sh
+
+cat <<EOF >/var/lib/arvados/nginx.conf
+worker_processes auto;
+pid /var/lib/arvados/nginx.pid;
+
+error_log stderr;
+daemon off;
+
+events {
+       worker_connections 64;
+}
+
+http {
+     access_log off;
+     include /etc/nginx/mime.types;
+     default_type application/octet-stream;
+     server {
+            listen ${services[doc]} default_server;
+            listen [::]:${services[doc]} default_server;
+            root /usr/src/arvados/doc/.site;
+            index index.html;
+            server_name _;
+     }
+
+  upstream controller {
+    server localhost:${services[controller]};
+  }
+  server {
+    listen *:${services[controller-ssl]} ssl default_server;
+    server_name keepproxy;
+    ssl_certificate "/var/lib/arvados/self-signed.pem";
+    ssl_certificate_key "/var/lib/arvados/self-signed.key";
+    location  / {
+      proxy_pass http://controller;
+      proxy_set_header Host \$http_host;
+      proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
+      proxy_set_header X-Forwarded-Proto https;
+      proxy_redirect off;
+    }
+  }
+}
+
+EOF
+
+exec nginx -c /var/lib/arvados/nginx.conf
index 6d5fe243e09d6ec639f166ba618001e94bc7f4d8..cfd7d5aa5745e69037ef66f5f45cadaa721d9e6b 100755 (executable)
@@ -45,7 +45,7 @@ if ! (ps x | grep -v grep | grep "crunch-dispatch") > /dev/null ; then
     waiting="$waiting crunch-dispatch"
 fi
 
-export ARVADOS_API_HOST=$localip:${services[api]}
+export ARVADOS_API_HOST=$localip:${services[controller-ssl]}
 export ARVADOS_API_HOST_INSECURE=1
 
 vm_ok=0
index ab20d5758c96a5f298e3ce25e5248611a3446e21..28140594926be5381737bd85adef390d5fb6f209 100755 (executable)
@@ -47,7 +47,7 @@ $RAILS_ENV:
   allow_account_registration: true
 EOF
 
-(cd config && /usr/local/lib/arvbox/application_yml_override.py)
+(cd config && /usr/local/lib/arvbox/yml_override.py application.yml)
 
 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
index 2b571a820abe2bcb572977dd9ab62e62f413b5b2..863de73410236941e98e9b6a4f8fd747c84e8ae0 100755 (executable)
@@ -14,7 +14,7 @@ git config --system "credential.http://$localip:${services[arv-git-httpd]}/.help
 
 cd /usr/src/arvados/services/login-sync
 
-export ARVADOS_API_HOST=$localip:${services[api]}
+export ARVADOS_API_HOST=$localip:${services[controller-ssl]}
 export ARVADOS_API_HOST_INSECURE=1
 export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
 export ARVADOS_VIRTUAL_MACHINE_UUID=$(cat /var/lib/arvados/vm-uuid)
index 134f767dc03da690542f7ff4e7204b65f6db6e11..065c557011c482c2c646b864d774dfccc6ad72b0 100755 (executable)
@@ -18,7 +18,7 @@ fi
 
 set -u
 
-export ARVADOS_API_HOST=$localip:${services[api]}
+export ARVADOS_API_HOST=$localip:${services[controller-ssl]}
 export ARVADOS_API_HOST_INSECURE=1
 export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
 export ARVADOS_VIRTUAL_MACHINE_UUID=$(cat /var/lib/arvados/vm-uuid)
index 2d01d907985c0c9ca6e0cf1e39969e1b4ce2d7fd..ebdf266c6b0a981710fa598f87968a2022047149 100755 (executable)
@@ -27,7 +27,7 @@ database_pw=$(cat /var/lib/arvados/api_database_pw)
 
 cat >/var/lib/arvados/arvados-ws.yml <<EOF
 Client:
-  APIHost: $localip:${services[api]}
+  APIHost: $localip:${services[controller-ssl]}
   Insecure: true
 Postgres:
   dbname: arvados_$RAILS_ENV
index 09d77e01d0f6a28548b32e44787a38a5b8a610ad..366096ace7a24b28f7286f24d13d941bde368846 100755 (executable)
@@ -40,8 +40,8 @@ fi
 cat >config/application.yml <<EOF
 $RAILS_ENV:
   secret_token: $secret_token
-  arvados_login_base: https://$localip:${services[api]}/login
-  arvados_v1_base: https://$localip:${services[api]}/arvados/v1
+  arvados_login_base: https://$localip:${services[controller-ssl]}/login
+  arvados_v1_base: https://$localip:${services[controller-ssl]}/arvados/v1
   arvados_insecure_https: true
   keep_web_download_url: http://$localip:${services[keep-web]}/c=%{uuid_or_pdh}
   keep_web_url: http://$localip:${services[keep-web]}/c=%{uuid_or_pdh}
@@ -52,4 +52,4 @@ EOF
 
 bundle exec rake assets:precompile
 
-(cd config && /usr/local/lib/arvbox/application_yml_override.py)
+(cd config && /usr/local/lib/arvbox/yml_override.py application.yml)
similarity index 79%
rename from tools/arvbox/lib/arvbox/docker/application_yml_override.py
rename to tools/arvbox/lib/arvbox/docker/yml_override.py
index bec067a8843fa6225239ae11d74d9d6a09a54b2f..b44acf4c3ab1fd9a3b4da433c936c6c079cebf6b 100755 (executable)
@@ -4,14 +4,17 @@
 # SPDX-License-Identifier: AGPL-3.0
 
 import yaml
+import sys
+
+fn = sys.argv[1]
 
 try:
-    with open("application.yml.override") as f:
+    with open(fn+".override") as f:
         b = yaml.load(f)
 except IOError:
     exit()
 
-with open("application.yml") as f:
+with open(fn) as f:
     a = yaml.load(f)
 
 def recursiveMerge(a, b):
@@ -23,5 +26,5 @@ def recursiveMerge(a, b):
     else:
         return b
 
-with open("application.yml", "w") as f:
+with open(fn, "w") as f:
     yaml.dump(recursiveMerge(a, b), f)