Connection Parameters conn_params
App developers can use conn_params in the submit.yml.erb to pass runtime data generated
in the before.sh.erb back to the view.html.erb.
This is helpful for:
Data that is only known after the job submits and starts running.
Data that needs to be used to connect to the application.
This technique will generate a file in the jobs working directory called connection.yml
when the app launches which will contain the defined variables and their associated values.
Jupyter Notebook Example
Here's an example using a Jupyter application which needs
needs to know the exact API to connect to. We can either connect to
JupyterLab at /lab or Jupyter Notebook at /tree, but this
information is not known until the job has been submitted.
So once the job is submitted, we need to export the jupyter_api
environment variable that can then be written to connection.yml
which OnDemand will consume and use in the view.html.erb.
Warning
The environment variables in before.sh.erb must be lowercase and
exported through the export function.
# within template/before.sh.erb
JUPYTER_API="<%= context.jupyterlab_switch == "1" ? "lab" : "tree" %>"
export jupyter_api="$JUPYTER_API"
Now with that variable exported, you need to add it to conn_params in
submit.html.erb to ensure that OnDemand makes use of it.
In the view.html.erb, which renders after the submission in the interactive apps page,
you can access the value of this variable with:
<%-
...
next_url = "#{base_url}/#{jupyter_api}"
full_url="#{login_url}?next=#{CGI.escape(next_url)}"
...
%>
...
<form id="<%= form_id %>" action="<%= full_url %>" method="post" target="_blank" onsubmit="changeTarget()" >
This configuration uses the value from jupyter_api to populate
the action attribute in the rendered page in the interactive sessions.