For detailed changes from the prior release, click on the version number, and
its link will bring up a GitHub listing of changes. Use git log
on the
command line for details.
JupyterHub 0.8.1 is a collection of bugfixes and small improvements on 0.8.
jupyterhub --upgrade-db
flag for automatically upgrading the database as part of startup.
This is useful for cases where manually running jupyterhub upgrade-db
as a separate step is unwieldy.jupyterhub upgrade-db
./
is not allowed in usernames.bower
for javascript client dependencies.JupyterHub 0.8 is a big release!
Perhaps the biggest change is the use of OAuth to negotiate authentication between the Hub and single-user services. Due to this change, it is important that the single-user server and Hub are both running the same version of JupyterHub. If you are using containers (e.g. via DockerSpawner or KubeSpawner), this means upgrading jupyterhub in your user images at the same time as the Hub. In most cases, a
pip install jupyterhub==version
in your Dockerfile is sufficient.
JupyterHub now defined a Proxy
API for custom
proxy implementations other than the default.
The defaults are unchanged,
but configuration of the proxy is now done on the ConfigurableHTTPProxy
class instead of the top-level JupyterHub.
TODO: docs for writing a custom proxy.
Single-user servers and services (anything that uses HubAuth) can now accept token-authenticated requests via the Authentication header.
Authenticators can now store state in the Hub's database.
To do so, the authenticate
method should return a dict of the form
{
'username': 'name'
'state': {}
}
This data will be encrypted and requires JUPYTERHUB_CRYPT_KEY
environment variable to be set
and the Authenticator.enable_auth_state
flag to be True.
If these are not set, auth_state returned by the Authenticator will not be stored.
There is preliminary support for multiple (named) servers per user in the REST API. Named servers can be created via API requests, but there is currently no UI for managing them.
Add LocalProcessSpawner.popen_kwargs
and LocalProcessSpawner.shell_cmd
for customizing how user server processes are launched.
Add Authenticator.auto_login
flag for skipping the "Login with..." page explicitly.
Add JupyterHub.hub_connect_ip
configuration
for the ip that should be used when connecting to the Hub.
This is promoting (and deprecating) DockerSpawner.hub_ip_connect
for use by all Spawners.
Add Spawner.pre_spawn_hook(spawner)
hook for customizing
pre-spawn events.
Add JupyterHub.active_server_limit
and JupyterHub.concurrent_spawn_limit
for limiting the total number of running user servers and the number of pending spawns, respectively.
.get_env()
)
rather than CLI arguments (.get_args()
)JUPYTERHUB_API_TOKEN
env is available at all times,
rather than being removed during single-user start.
The token is now accessible to kernel processes,
enabling user kernels to make authenticated API requests to Hub-authenticated services.So many things fixed!
httponly
on cookies because it's prudent.jupyterhub-singleuser
for easier deployment of notebook servers as a Service.--group
parameter for deploying jupyterhub-singleuser
as a Service with group authentication./user-redirect/
Spawner.will_resume
for signaling that a single-user server is paused instead of stopped.
This is needed for cases like DockerSpawner.remove_containers = False
,
where the first API token is re-used for subsequent spawns.set('string')
typo in config.next_url
, which is AOK./api/
and /api/info
endpoints #675/hub/user-redirect/...
URL for redirecting users to a file on their own server.Bugfixes on 0.6:
jupyterhub
namespace on GitHub and Docker. What was juptyer/jupyterhub
is now jupyterhub/jupyterhub
, etc.jupyterhub/jupyterhub
image on DockerHub no longer loads the jupyterhub_config.py in an ONBUILD step. A new jupyterhub/jupyterhub-onbuild
image does thisc.JupyterHub.statsd_{host,port,prefix}
@default
, @observe
APIs for traitsc.PAMAuthenticator.open_sessions = False
. This may be needed on SELinux-enabled systems, where our PAM session logic often does not work properlySpawner.environment
configurable, for defining extra environment variables to load for single-user serversJupyterHub.api_tokens
, a dict of token: username
./api/authorizations/token
.
This can only be used if the Authenticator has a username and password.--no-ssl
confirmation to allow the Hub to be run without SSL (e.g. behind SSL termination in nginx)Spawner.disable_user_config
for preventing user-owned configuration from modifying single-user servers.JupyterHub.subdomain_host = 'https://jupyterhub.domain.tld[:port]'
.127.0.0.1
for local communication instead of localhost
, avoiding issues with DNS on some systems.Spawner.user_options_form
for specifying an HTML form to present to users,
allowing users to influence the spawning of their own servers.Authenticator.pre_spawn_start
and Authenticator.post_spawn_stop
hooks,
so that Authenticators can do setup or teardown (e.g. passing credentials to Spawner,
mounting data sources, etc.).
These methods are typically used with custom Authenticator+Spawner pairs.First preview release