instance-jupyter.cfg.in 6.93 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
{% set additional_frontend = slapparameter_dict.get('frontend-additional-instance-guid') %}

[buildout]
parts =
  instance
  publish-connection-parameter
  jupyter-notebook-config
  erp5-kernel
  kernel-json
  custom-js
  frontend-promise
  {% if additional_frontend %}
  frontend-additional-promise
  {% endif %}
  monitor-base
extends =
  {{ monitor_template_rendered }}/template-monitor.cfg


eggs-directory = {{ eggs_directory }}
develop-eggs-directory = {{ develop_eggs_directory }}
offline = true

[slapconfiguration]
recipe = slapos.cookbook:slapconfiguration.serialised
computer = ${slap-connection:computer-id}
partition = ${slap-connection:partition-id}
url = ${slap-connection:server-url}
key = ${slap-connection:key-file}
cert = ${slap-connection:cert-file}

# ERP5 URL to use in Jupyter by default
# default value is empty - which means no default ERP5 URL
configuration.erp5-url =

[instance-parameter]
port = 8888
host = ${slapconfiguration:ipv6-random}
cert_file = ${generate-certificate:cert_file}
key_file = ${generate-certificate:key_file}
logfile = ${directory:log}/jupyter_notebook.log
notebook_dir = ${directory:notebook_dir}

[slap-parameter]
frontend-software-type = RootSoftwareInstance
frontend-software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg
frontend-instance-guid =
frontend-instance-name = Jupyter Frontend
frontend-additional-software-type = RootSoftwareInstance
frontend-additional-software-url = http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/apache-frontend/software.cfg
frontend-additional-instance-guid =
frontend-additional-instance-name = Jupyter Frontend Additional

54 55 56 57
{% for k, v in slapparameter_dict.items() -%}
{{ k }} = {{ v }}
{% endfor -%}

58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
[generate-certificate]
; TODO: there is a slapos recipe to generate certificates. Use it instead
recipe = plone.recipe.command
command =
  if [ ! -e ${instance-parameter:key_file} ]
  then
    {{ openssl_output }} req -x509 -nodes -days 3650 \
      -subj "/C=AA/ST=X/L=X/O=Dis/CN=${instance-parameter:host}" \
      -newkey rsa:1024 -keyout ${instance-parameter:key_file} \
      -out ${instance-parameter:cert_file}
  fi
update-command = ${:command}
cert_file = ${directory:etc}/jupyter_cert.crt
key_file = ${directory:etc}/jupyter_cert.key

[instance]
recipe = slapos.cookbook:wrapper
command-line =
  {{ bin_directory }}/jupyter-lab
  --no-browser
  --ip=${instance-parameter:host}
  --port=${instance-parameter:port}
  --port-retries=0
  --certfile=${instance-parameter:cert_file}
  --keyfile=${instance-parameter:key_file}
  --notebook-dir=${instance-parameter:notebook_dir}
  --log-level="DEBUG"
wrapper-path = ${directory:service}/jupyter-lab
environment =
  JUPYTER_PATH=${directory:jupyter_dir}
  JUPYTER_CONFIG_DIR=${directory:jupyter_config_dir}
  JUPYTER_RUNTIME_DIR=${directory:jupyter_runtime_dir}
  LANG=C.UTF-8

92 93 94 95
[jupyter-password]
recipe = slapos.cookbook:generate.password
bytes = 10

96
[jupyter-notebook-config]
97
recipe = slapos.recipe.template:jinja2
98 99
url = {{ jupyter_config_location }}/{{ jupyter_config_filename }}
output = ${directory:jupyter_config_dir}/jupyter_notebook_config.py
100
context =
101
  key password jupyter-password:passwd
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
  raw gcc_location {{ gcc_location }}
  raw cythonplus_repository {{ cythonplus_repository }}

[directory]
recipe = slapos.cookbook:mkdirectory
home = ${buildout:directory}
etc = ${:home}/etc
var = ${:home}/var
script = ${:etc}/run/
service = ${:etc}/service
log = ${:var}/log
notebook_dir = ${:var}/notebooks
# Add folders to explicitly define jupyter directory
jupyter_dir = ${:home}/jupyter
jupyter_config_dir = ${:jupyter_dir}/etc
jupyter_kernel_dir = ${:jupyter_dir}/kernels
jupyter_runtime_dir = ${:jupyter_dir}/runtime
jupyter_custom_dir = ${:jupyter_config_dir}/custom
jupyter_nbextensions_dir = ${:jupyter_dir}/nbextensions
erp5_kernel_dir = ${:jupyter_kernel_dir}/ERP5

[request-slave-frontend-base]
recipe = slapos.cookbook:requestoptional
server-url = ${slap-connection:server-url}
key-file = ${slap-connection:key-file}
cert-file = ${slap-connection:cert-file}
computer-id = ${slap-connection:computer-id}
partition-id = ${slap-connection:partition-id}
130
shared = true
131 132 133 134 135 136 137 138 139 140 141 142 143
config-type = notebook
config-url = https://[${instance-parameter:host}]:${instance-parameter:port}
return = secure_access

[request-slave-frontend]
<= request-slave-frontend-base
software-url = ${slap-parameter:frontend-software-url}
software-type = ${slap-parameter:frontend-software-type}
name = ${slap-parameter:frontend-instance-name}
sla-instance_guid = ${slap-parameter:frontend-instance-guid}

[frontend-promise]
<= monitor-promise-base
144
promise = check_url_available
145 146 147 148 149 150 151 152 153 154 155 156 157
name = frontend_promise.py
config-url = ${publish-connection-parameter:url}

{% if additional_frontend %}
[request-slave-frontend-additional]
<= request-slave-frontend-base
software-url = ${slap-parameter:frontend-additional-software-url}
software-type = ${slap-parameter:frontend-additional-software-type}
name = ${slap-parameter:frontend-additional-instance-name}
sla-instance_guid = ${slap-parameter:frontend-additional-instance-guid}

[frontend-additional-promise]
<= monitor-promise-base
158
promise = check_url_available
159 160 161 162 163 164 165 166 167 168 169
name = frontend_additional_promise.py
config-url = ${publish-connection-parameter:url-additional}
{% endif %}

[monitor-instance-parameter]
monitor-base-url = ${monitor-frontend-promise:url}
# In case you're using a developer instance you should edit these in:
# monitor-base-url = ${monitor-httpd-conf-parameter:url}
# cors-domains = softinstXXXXX.host.vifib.net (or equivalent)
# interface-url = https://softinstXXXXX.host.vifib.net/erp5/web_site_module/monitoring_rjs_unsafe
instance-configuration =
170
  raw jupyter-password ${jupyter-password:passwd}
171 172

[publish-connection-parameter]
173
recipe = slapos.cookbook:publish
174 175 176 177 178 179 180 181
jupyter-classic-url = ${request-slave-frontend:connection-secure_access}/tree
url = ${:jupyter-classic-url}
jupyterlab-url = ${request-slave-frontend:connection-secure_access}/lab
{% if additional_frontend %}
jupyter-classic-url-additional = ${request-slave-frontend-additional:connection-secure_access}/tree
url-additional = ${:jupyter-classic-url-additional}
jupyterlab-url-additional = ${request-slave-frontend-additional:connection-secure_access}/lab
{% endif %}
182
password = ${jupyter-password:passwd}
183 184 185 186 187 188 189

[erp5-kernel]
recipe = slapos.cookbook:symbolic.link
link-binary = {{ erp5_kernel_location }}/{{ erp5_kernel_filename }}
target-directory = ${directory:erp5_kernel_dir}

[kernel-json]
190
recipe = slapos.recipe.template:jinja2
191 192
url = {{ kernel_json_location }}/{{ kernel_json_filename }}
output = ${directory:erp5_kernel_dir}/kernel.json
193 194 195 196 197 198 199 200 201 202 203 204
# Use python2.7 executable bin file for kernel config
context =
  raw python_executable {{ python_executable }}
  raw kernel_dir ${erp5-kernel:target-directory}/{{ erp5_kernel_filename }}
  key erp5_url slapconfiguration:configuration.erp5-url 
  raw display_name ERP5
  raw language_name python

[custom-js]
recipe = slapos.cookbook:symbolic.link
target-directory = ${directory:jupyter_custom_dir}
link-binary = {{ custom_js_location }}/custom.js