diff --git a/README.md b/README.md index efc61155e7766846fc0027b1b4a056278a40df03..fbddb3d79bdc3744122261117e075e21e870eaef 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,43 @@ use With minikube do ./deploy.sh --chown-root /data --nomad-root /hosthome/$USER/nomadlab + + +machine specific deploy: + +# labdev-nomad + + cd /nomad/nomadlab/servers/labdev-nomad/analytics/beaker + ./deploy.sh --env labdev-nomad --target-hostname labdev-nomad --secret-web-certs web-certs --debug + +development machine, deploy mirroring the filesystem, you might need to manully execute npm install in the container to if you update packages + +# nomad-vis-test + +from labdev-nomad.container + + cd /nomad/nomadlab/servers/nomad-vis-test/analytics/remotevis + +Update info on services of labdev that we use as we share the session db (we should probably clean up this ugly command) + + kubectl exec -ti $(kubectl get po | grep nomad-container-manager-beaker | cut -f1 -d ' ') node app.js serviceDumper -- --out-file labdev-nomad.services.yaml + +update config with current info on the redis dbs of labdev (default-remotevis.hjson.in -> default-remotevis.hjson) + + docker run -ti -v $PWD:/usr/src/app -v /nomad/nomadlab/servers/labdev-nomad/analytics/beaker:/mnt -w /usr/src/app --rm node:carbon node app.js templateEvaluer --replacements /mnt/labdev-nomad.services.yaml --template config/nomad-vis-test.hjson.in --out-file config/nomad-vis-test.hjson + +deploy + ./deploy.sh --tls --env nomad-vis-test --target-hostname nomad-vis-test --secret-web-certs web-certs + +and execute the deploy for remote vis + + kubectl create -f container-manager-service-remotevis.yaml + if ! kubectl get deployment nomad-container-manager-remotevis >& /dev/null ; then + kubectl create --save-config -f container-manager-deploy-remotevis.yaml + else + kubectl apply -f container-manager-deploy-remotevis.yaml + fi + +if only that changed, otherwise on has also to create the secrets and analytics namespace. + +A serviceDump has to be run to reexport the ports to the frontend, then the frontend setup needs to be updated. diff --git a/app.js b/app.js index 66b14e6821c9aa3ff4aa313933fb1aaf6c3adce1..6c4f8da71c68b1256f4f7cf2252ab5c6e83a08eb 100644 --- a/app.js +++ b/app.js @@ -20,7 +20,8 @@ function main() { var cmds = [] const usage = `node ${args[1]} [-h|--help] [--image-type [beaker|jupyter|creedo|remotevis]] [webserver|watcher|apiserver] - node ${args[1]} serviceDumper <serviceListFile> + node ${args[1]} serviceDumper [--help <serviceListFile>...] + node ${args[1]} templateEvaluer [--help ...] ` var imageType = undefined if (iarg < args.length) { diff --git a/app/service-dumper.js b/app/service-dumper.js index 63d780ac212069c5269d43c77191980d227812a9..72169fee82434cb767e6f18b8288d3cd775a9af0 100644 --- a/app/service-dumper.js +++ b/app/service-dumper.js @@ -30,10 +30,12 @@ exports.serviceDumper = function(args) { iarg += 1 if (arg == '--help') { console.log(usage) + process.exit(0) return; } else if (arg == '--in-file') { if (iarg >= args.length) { console.log(`Expected in file after --in-file, ${usage}`) + process.exit(1) return; } inFile = args[iarg] @@ -41,6 +43,7 @@ exports.serviceDumper = function(args) { } else if (arg == '--out-file') { if (iarg >= args.length) { console.log(`Expected out file after --out-file, ${usage}`) + process.exit(1) return; } outFile = args[iarg] @@ -48,12 +51,14 @@ exports.serviceDumper = function(args) { } else if (arg == '--namespace') { if (iarg >= args.length) { console.log(`Expected namespace after --namespace, ${usage}`) + process.exit(1) return; } namespace = args[iarg] iarg += 1 } else { console.log(`unexpected argument ${arg}, ${usage}`) + process.exit(1) } } if (inFile.length > 0) { @@ -64,9 +69,10 @@ exports.serviceDumper = function(args) { services = inF.services } k8D.getServiceInfo(namespace, function(err, ss){ - if (err) + if (err) { logger.warn(`error getting services for namespace ${namespace}`) - else { + process.exit(1) + } else { let sss = ss if (services.length != 0){ sss = {} diff --git a/app/template-evaluer.js b/app/template-evaluer.js index 8a7c95eeb65c6bb9f390983c98e307562e091aa8..3edb56fa17503b5309b0a409934e79ea19f90683 100644 --- a/app/template-evaluer.js +++ b/app/template-evaluer.js @@ -1,7 +1,6 @@ const yaml = require('js-yaml') const logger = require('./logger') const fs = require('fs') -const k8D = require('./k8-data') const stringify = require('json-stringify-safe') const components = require('./components') @@ -27,10 +26,12 @@ exports.templateEvaluer = function(args) { iarg += 1 if (arg == '--help') { console.log(usage) + process.exit(0) return; } else if (arg == '--template') { if (iarg >= args.length) { console.log(`Expected in file after --template, ${usage}`) + process.exit(1) return; } inFile = args[iarg] @@ -38,6 +39,7 @@ exports.templateEvaluer = function(args) { } else if (arg == '--replacements') { if (iarg >= args.length) { console.log(`Expected a replacements file after --replacements, ${usage}`) + process.exit(1) return; } let repl = yaml.safeLoad(fs.readFileSync(args[iarg])) @@ -46,19 +48,21 @@ exports.templateEvaluer = function(args) { } else if (arg == '--out-file') { if (iarg >= args.length) { console.log(`Expected out file after --out-file, ${usage}`) + process.exit(1) return; } outFile = args[iarg] iarg += 1 } else { console.log(`unexpected argument ${arg}, ${usage}`) + process.exit(1) return; } } if (inFile.length > 0) { let inF = fs.readFileSync(inFile, {encoding:'utf8'}) let outF = components.templatize(inF)(replacements) - if (outFile.lenght > 0) + if (outFile.length > 0) fs.writeFileSync(outFile, outF, { encoding: 'utf8'}) else console.log(outF) diff --git a/config/default-jupyter.hjson b/config/default-jupyter.hjson index 7f43a2e8d3cfff73fe928ab8d2851c020e89067d..a51870d42a053cccc84bc2ac149df022de0f4793 100644 --- a/config/default-jupyter.hjson +++ b/config/default-jupyter.hjson @@ -1,7 +1,6 @@ k8component: { templatePath: "kube/jupyterTemplate.yaml" image: { - name: jupyter imageType: jupyter imageSubtype: default1 subType: default1 diff --git a/config/default-remotevis.hjson b/config/default-remotevis.hjson index aea6fed9246afff3d2c94f25104739c2654d80c1..aed4af20c2482354a36a4052f73fed1f1632fe59 100644 --- a/config/default-remotevis.hjson +++ b/config/default-remotevis.hjson @@ -1,10 +1,15 @@ k8component: { image: { - name: remotevis + imageType: remotevis subtype: default1 image: "labdev-nomad.esc.rzg.mpg.de:5000/nomadlab/notebook-jupyter-libatoms-tutorial", port: 8809, - prefix: "/jupyter", + prefix: "/remotevis", templatePath: "kube/remoteVisTemplate.yaml" } + entryPoint: { + redirectTarget: "{{prefix}}/vnc.html" + execCommand: [] + exclusiveStartPoint: true + } } diff --git a/config/nomad-vis-test.hjson b/config/nomad-vis-test.hjson new file mode 100644 index 0000000000000000000000000000000000000000..953de5b4380cdc523eae0c7e728de27fd7cab2b2 --- /dev/null +++ b/config/nomad-vis-test.hjson @@ -0,0 +1,8 @@ +session_redis: { + port: 30289 + host: 130.183.207.101 +} +usersettings_redis: { + port: 31996 + host: 130.183.207.101 +} diff --git a/config/nomad-vis-test.hjson.in b/config/nomad-vis-test.hjson.in new file mode 100644 index 0000000000000000000000000000000000000000..5c9fb8d43c073dbc0d46a71955e915e22a12ef35 --- /dev/null +++ b/config/nomad-vis-test.hjson.in @@ -0,0 +1,8 @@ +session_redis: { + port: {{analytics-session-db-redis-master.0.ports.0.nodePort}} + host: {{analytics-session-db-redis-master.0.nodes.[0]}} +} +usersettings_redis: { + port: {{user-settings-db-redis-master.0.ports.0.nodePort}} + host: {{user-settings-db-redis-master.0.nodes.[0]}} +} diff --git a/config/remotevis.hjson b/config/remotevis.hjson deleted file mode 100644 index 661b3f215b763e506235247cc46722a290bade5f..0000000000000000000000000000000000000000 --- a/config/remotevis.hjson +++ /dev/null @@ -1,16 +0,0 @@ -{ - k8component: { - imageType: remotevis - } - k8Api: { - url: "https://130.183.207.115:6443" - node: "130.183.207.115" - } - session_redis: { - # from labdev - # export KUBECONFIG=/etc/kubernetes/admin.conf - # kubectl svc analytics-session-db-redis-master - port: 30289 - host: "labdev3-nomad.rzg.mpg.de" - } -}