[buildout] parts = instance jupyter_notebook read-knowledge0 publish-connection-parameter jupyter-notebook-config erp5-kernel kernel-json custom-js 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} [dynamic-jinja2-template-base] recipe = slapos.recipe.template:jinja2 mode = 0644 [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 parameters-extra = true environment = JUPYTER_PATH=${directory:jupyter_dir} JUPYTER_CONFIG_DIR=${directory:jupyter_config_dir} JUPYTER_RUNTIME_DIR=${directory:jupyter_runtime_dir} LANG=C.UTF-8 [jupyter-notebook-config] <= dynamic-jinja2-template-base template = {{ jupyter_config_location }}/{{ jupyter_config_filename }} rendered = ${directory:jupyter_config_dir}/jupyter_notebook_config.py mode = 0744 context = raw config_cfg ${buildout:directory}/knowledge0.cfg [directory] recipe = slapos.cookbook:mkdirectory home = ${buildout:directory} etc = ${:home}/etc var = ${:home}/var script = ${:etc}/run/ service = ${:etc}/service promise = ${:etc}/promise/ 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 [jupyter_notebook] # This part is called like this because knowledge0.write uses the part name for # the section name in the config file. recipe = slapos.cookbook:zero-knowledge.write password = filename = knowledge0.cfg [read-knowledge0] recipe = slapos.cookbook:zero-knowledge.read filename = knowledge0.cfg password = [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 = raw jupyter-password ${read-knowledge0:password} [publish-connection-parameter] recipe = slapos.cookbook:publish.serialised jupyter-classic-url = https://[${instance-parameter:host}]:${instance-parameter:port}/tree url = ${:jupyter-classic-url} jupyterlab-url = https://[${instance-parameter:host}]:${instance-parameter:port}/lab [erp5-kernel] recipe = slapos.cookbook:symbolic.link link-binary = {{ erp5_kernel_location }}/{{ erp5_kernel_filename }} target-directory = ${directory:erp5_kernel_dir} [kernel-json] <= dynamic-jinja2-template-base template = {{ kernel_json_location }}/{{ kernel_json_filename }} rendered = ${directory:erp5_kernel_dir}/kernel.json # 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