Changes in KubeSpawner#
Unreleased#
7.0#
7.0.0 - 2024-10-25#
Breaking changes#
The new config
slug_scheme
defaults tosafe
(recommended) instead of the legacy modeescape
(#744). Upgrade docs are available at Upgrading from kubespawner < 7.
New features added#
Add escape_slug as a utility function alongside safe_slug #865 (@consideRatio, @minrk)
Add KubeSpawner.version_info #852 (@consideRatio)
Add modern app.kubernetes.io labels alongside old #835 (@consideRatio, @sgaist, @manics, @yuvipanda, @minrk)
add ‘safe’ slug scheme #744 (@minrk, @consideRatio, @Ph0tonic, @yuvipanda, @manics)
Enhancements made#
Allow all list based config to be assigned dictionaries #845 (@sunu, @yuvipanda, @consideRatio)
Allow list based config
volumes
andvolume_mounts
to be assigned dictionaries #843 (@sunu, @yuvipanda)
Bugs fixed#
Reset cur_delay after listing resources #869 (@d-gol, @manics)
await asyncio.ensure_future #860 (@manics, @consideRatio)
Reflectors watch: close after stop #859 (@manics, @consideRatio)
fix some safe slug patterns #856 (@minrk, @consideRatio)
specify wheel build target for hatch explicitly #832 (@willh-cmyk, @consideRatio)
Ensure Kubespawner internal SSL secret is correctly encoded as base64 #828 (@manics, @consideRatio)
Don’t attempt to expand callable environment variables #826 (@manics, @consideRatio)
Fix build with hatch by specifying folder name explicitly #818 (@consideRatio, @minrk)
Maintenance and upkeep improvements#
Refresh sphinx config file and resolve failure in sphinx 8 #853 (@consideRatio)
update images used in tests #841 (@minrk, @consideRatio)
Improve exception handling for listing Kubernetes resources #837 (@josefhandl, @yuvipanda, @consideRatio)
temporary pin: pytest-asyncio < 0.23 #817 (@minrk, @consideRatio)
Documentation improvements#
Make changelog links consistent #862 (@consideRatio)
Add changelog for 7.0.0b3 #861 (@consideRatio)
changelog for 7.0.0b2 #857 (@minrk, @consideRatio)
docs: add example on upgrading slug scheme for a volume mount and list more template fields #854 (@consideRatio)
Add changelog for 7.0.0b1 #851 (@consideRatio, @minrk)
Fix typo in docs (missing `) #844 (@krassowski, @consideRatio)
Contributors to this release#
The following people contributed discussions, new ideas, code and documentation contributions, and review. See our definition of contributors.
(GitHub contributors page for this release)
@consideRatio (activity) | @d-gol (activity) | @dolfinus (activity) | @harsimranmaan (activity) | @jabbera (activity) | @josefhandl (activity) | @jwclark (activity) | @krassowski (activity) | @manics (activity) | @minrk (activity) | @moschlar (activity) | @Ph0tonic (activity) | @sgaist (activity) | @shenghu (activity) | @sunu (activity) | @willh-cmyk (activity) | @yuvipanda (activity)
6.2.0 - 2023-11-23#
New features added#
Add
k8s_api_verify_ssl
config #801 (@devenami, @yuvipanda)
Bugs fixed#
Omit ImagePullPolicy by default #807 (@yuvipanda, @GeorgianaElena, @minrk)
typo in reflector failure message #798 (@minrk, @consideRatio)
make sure futures can be cancelled #797 (@minrk, @consideRatio)
Maintenance and upkeep improvements#
update_k8s_model: log override at info not warn #808 (@manics, @consideRatio)
Update comment about why we save pod_name in db state #806 (@yuvipanda, @consideRatio)
Pull default image from quay.io, not dockerhub #800 (@yuvipanda, @consideRatio)
Documentation improvements#
docs: fix outdated k8s api reference links #809 (@consideRatio)
Dynamically retrieve podCIDR for routing in CONTRIBUTING #793 (@yuvipanda, @minrk, @consideRatio)
docs: add detail to internal_ssl + fix typos #790 (@byteMuncher0x, @consideRatio, @yuvipanda)
Continuous integration improvements#
ci: update python and k8s versions to test with, include py312 #810 (@consideRatio)
Contributors to this release#
The following people contributed discussions, new ideas, code and documentation contributions, and review. See our definition of contributors.
(GitHub contributors page for this release)
@byteMuncher0x (activity) | @consideRatio (activity) | @devenami (activity) | @GeorgianaElena (activity) | @manics (activity) | @minrk (activity) | @yuvipanda (activity)
6.1#
6.1.0 - 2023-09-28#
Warning
If you have been using z2jh 3.0 or KubeSpawner 5.0-6.0, you may have orphaned user server pods due to a now fixed bug, these are pods that are running but inaccessible by users because JupyterHub doesn’t understand they are running.
These should be cleaned up to avoid incurring pointless costs. For more information about this, see this forum post.
This release comes bugfixes, a performance improvement, and a new feature part
of KubeSpawner.profile_list
. profile_list
’s sub-config
profile_options
can now be include unlisted_choice
that enables JupyterHub
users to not just select a pre-defined choice, but to provide free text input.
This can for example enable users to start any image they’d like, or any image
matching a provided regular expression.
New features added#
Allow dropdown text for unlisted choice to be configurable #777 (@batpad, @consideRatio)
Allow end user to select a choice different from list of available choices in profile_list #735 (@batpad, @GeorgianaElena, @consideRatio, @yuvipanda, @ranchodeluxe, @jbusecke, @echarles)
Enhancements made#
improve efficiency of reflector #755 (@juliantaylor, @yuvipanda, @minrk)
only log pod names, not all pod contents when reflector has issues #746 (@minrk, @consideRatio)
Bugs fixed#
Don’t sort keys by default in tojson when rendering profile forms #787 (@yuvipanda, @minrk, @consideRatio)
Support lists and dicts as values in
kubespawner_override
#785 (@yuvipanda, @consideRatio, @minrk)Fix for unlisted_choice, docstring updates, and misc refactoring #773 (@consideRatio, @GeorgianaElena)
only strip trailing ‘-’ if it was added by a template variable #770 (@minrk, @manics)
[bufix] Allow POST requests without profile_options specified (defaults will be used) #769 (@GeorgianaElena, @consideRatio, @yuvipanda)
[bugfix] Using unlisted_choice a second time doesn’t work #766 (@GeorgianaElena, @consideRatio, @yuvipanda)
Expand only environment variables set via Spawner.environment #759 (@yuvipanda, @consideRatio)
return poll status after first load finish #742 (@ivyxjc, @minrk, @consideRatio, @danilopeixoto)
Maintenance and upkeep improvements#
Rework of profile_list backend validation for readability and details #774 (@consideRatio, @GeorgianaElena)
Reword docstring to match new reality #771 (@yuvipanda, @consideRatio)
Contributors to this release#
The following people contributed discussions, new ideas, code and documentation contributions, and review. See our definition of contributors.
(GitHub contributors page for this release)
@batpad (activity) | @consideRatio (activity) | @danilopeixoto (activity) | @echarles (activity) | @GeorgianaElena (activity) | @ivyxjc (activity) | @jbusecke (activity) | @juliantaylor (activity) | @manics (activity) | @minrk (activity) | @ranchodeluxe (activity) | @yuvipanda (activity)
6.0#
6.0.0 - 2023-05-31#
Breaking changes#
New features added#
Allow building more complex profile_list templates #724 (@yuvipanda)
Bugs fixed#
Maintenance and upkeep improvements#
Require jupyterhub 4+, currently latest kubernetes_asyncio, and stop testing k8s 1.23 #726 (@consideRatio)
Documentation improvements#
Contributors to this release#
(GitHub contributors page for this release)
@batpad | @consideRatio | @dolfinus | @manics | @pre-commit-ci | @yuvipanda
5.0#
5.0.0 - 2023-04-19#
Breaking changes#
Versions of K8s older than 1.23 are no longer supported, KubeSpawner may still work but this is not guaranteed. #718
KubeSpawner.environment
now reserve the symbols{
and}
for use by variable expansion. To retain existing behavior, replace{
and}
with{{
and}}
respectively. #642KubeSpawner.profile_list
’skubespawner_override
behavior has changed to merge instead of replace dictionary based configuration. #650More about
kubespawner_override
behavior changeIf for example
KubeSpawner.node_selector
is set to{"a": "a"}
, andkubespawner_override
to{"node_selector": {"b": "b"}}
, then the resultingnode_selector
configuration becomes{"a": "a", "b": "b"}
. Before KubeSpawner 5 it would have become{"b": "b"}
.Since only
KubeSpawner.common_labels
has a non empty dictionary by default in either KubeSpawner or the JupyterHub Helm chart, this is likely only to be an issue for users that first have configured one of these values and then expect it to be entirely replaced inkubespawner_override
.To conclude if this is a breaking change to your deployment, audit use of
kubespawner_override
to replace rather than merge KubeSpawner’s dictionary based configuration that is listed below.common_labels environment extra_annotations extra_container_config extra_labels extra_pod_config extra_resource_guarantees extra_resource_limits lifecycle_hooks node_selector storage_extra_annotations storage_extra_labels storage_selector user_namespace_annotations user_namespace_labels
The pod label
hub.jupyter.org/servername
is now given a escaped servername as value. #694
New features added#
Allow to watch multiple namespaces at the same time #678 (@dolfinus)
[KubeIngressProxy] Add KubeIngressProxy.ingress_class_name #668 (@dolfinus)
[KubeIngressProxy] Add KubeIngressProxy.ingress_specifications #667 (@dolfinus)
[KubeIngressProxy] Add reuse_existing_services option #656 (@dolfinus)
[KubeIngressProxy] Add ingress_extra_annotations and ingress_extra_labels #655 (@dolfinus)
Bugs fixed#
Fix error message when default profile is missing options #704 (@holzman)
Escape pod label
hub.jupyter.org/servername
(pod annotation remains unescaped) #694 (@yuvipanda)Fix hard-coded component label for services_enabled=True #654 (@dolfinus)
Let
kubespawner_override
merge instead of replace dictionaries #650 (@yuvipanda)
Maintenance and upkeep improvements#
Drop support for k8s 1.20-1.22 (stop testing against it) #718 (@consideRatio)
dependabot: monthly updates of github actions #713 (@consideRatio)
Add test to restore pod name from previous spawner state after JupyterHub restart #682 (@dolfinus)
Add test to spawn a pod in a separate namespace #681 (@dolfinus)
Avoid class state by passing relevant config to PodReflector on instanciation #672 (@dolfinus)
maint: pyproject.toml, hatchling, tbump, .readthedocs.yaml updates #666 (@consideRatio)
Documentation improvements#
docs: add pypi/conda-forge badges to readme #720 (@consideRatio)
docs: fix broken api references #687 (@consideRatio)
docs: run rst2myst #684 (@consideRatio)
docs: stick with docs/requirements.txt #683 (@consideRatio)
Update docs on setting up a development environment #680 (@shaneknapp)
docs: relocate docs/requirements.txt into pyproject.toml #673 (@consideRatio)
docs: fix typo in release.md #671 (@consideRatio)
Continuous integration improvements#
ci: Make sure we run the publish workflow on every tag pushed #664 (@GeorgianaElena)
Contributors to this release#
(GitHub contributors page for this release)
@consideRatio | @dependabot | @dolfinus | @droctothorpe | @GeorgianaElena | @holzman | @jbusecke | @manics | @meeseeksmachine | @minrk | @pre-commit-ci | @shaneknapp | @totycro | @welcome | @yuvipanda
4.3#
4.3.0 - 2022-11-03#
New features added#
Enhancements made#
Allow profile_options callable to be async #640 (@yuvipanda)
Set first value in
profile-options
as default when none is specified #631 (@GeorgianaElena)Add “http” as a name to created k8s Services’ port (required by Istio) #614 (@ddebeau)
Bugs fixed#
Fix dict keys iteration #662 (@GeorgianaElena)
[KubeIngressProxy] Set
should_start
to false and documentation fix #647 (@dolfinus)[KubeIngressProxy] Fix 404 error in
add_route
#646 (@dolfinus)Fix async
modify_pod_hook
s - use jupyterhub.utils.maybe_future instead of tornado.get.maybe_future #645 (@dolfinus)properly handle IPv6 IPs #619 (@nikhiljha)
Documentation improvements#
Add changelog for 4.2.0 #636 (@consideRatio)
Continuous integration improvements#
ci: add dependabot to bump github action versions, and bump them #624 (@consideRatio)
ci: misc ci updates #661 (@consideRatio)
Contributors to this release#
(GitHub contributors page for this release)
@abkfenris | @consideRatio | @ddebeau | @dolfinus | @GeorgianaElena | @manics | @minrk | @nikhiljha | @pre-commit-ci | @sgibson91 | @TomHellier | @welcome | @yuvipanda | @zv0n
4.2#
4.2.0 - 2022-08-29#
New features added#
Add
storage_extra_annotations
configuration, used when PVCs are created #630 (@TomHellier)Add user_namespace_labels and user_namespace_annotations for use with enable_user_namespaces #612 (@zv0n)
Enhancements made#
Bugs fixed#
properly handle IPv6 IPs #619 (@nikhiljha)
Continuous integration#
ci: add dependabot to bump github action versions, and bump them #624 (@consideRatio)
Contributors to this release#
(GitHub contributors page for this release)
@abkfenris | @consideRatio | @ddebeau | @GeorgianaElena | @minrk | @nikhiljha | @sgibson91 | @TomHellier | @zv0n
4.1#
4.1.0 - 2022-05-19#
New features added#
Support dropdown list choices for
profile_list
profiles viaprofile_options
#607 (@yuvipanda)
Maintenance and upkeep improvements#
[pre-commit.ci] pre-commit autoupdate #608 (@pre-commit-ci)
Contributors to this release#
(GitHub contributors page for this release)
@consideRatio | @keniseli | @pre-commit-ci | @rabernat | @yuvipanda
4.0#
4.0.0 - 2022-04-23#
Breaking changes#
Support for use against k8s 1.17-1.19 is no longer maintained, please upgrade to k8s 1.20+ to ensure function.
If you have configured
c.JupyterHub.proxy_class
to useKubeIngressProxy
, please read the notes in #598 along with the disclaimer for use of this JupyterHub proxy class.
New features added#
Bugs fixed#
[KubeIngressProxy] breaking: Migrate to networking.k8s.io/v1 api for Ingress resources #598 (@consideRatio)
Maintenance and upkeep improvements#
pre-commit: replace reorder-python-imports with isort #606 (@consideRatio)
Continuous integration#
ci: stop testinging 1.17-1.19, assume k8s 1.20+ going onwards #599 (@consideRatio)
Contributors to this release#
(GitHub contributors page for this release)
@agt | @consideRatio | @JJ11teen | @yuvipanda | @zflamig
3.0#
3.0.2 - 2022-03-15#
Bugs fixed#
[KubeIngressProxy] Fix critical regression from typo #593 (@ondave, @yuvipanda, @consideRatio)
Maintenance and upkeep improvements#
refactor: add pre-commit hook pyupgrade, and run it #586 (@consideRatio)
Documentation improvements#
DOCS: Update theme to use book theme #591 (@choldgraf, @consideRatio)
Contributors to this release#
3.0.1 - 2022-03-14#
Bugs fixed#
Fix typo in reflector._stopping #587 (@minrk, @consideRatio)
3.0.0 - 2022-03-14#
This release replaces a synchronous Kubernetes client library with an async alternative, allowing the use of native Python async features.
Breaking changes#
Support for Python 3.6 dropped
The configuration
k8s_api_threadpool_workers
is removed as we don’t create threads any more, but now instead relies on scheduling everything to run in an event loop.A dependency on the library
kubernetes
is replaced with a dependency on the librarykubernetes_asyncio
.Methods considered internal to Kubespawner are now prefixed with
_
.
Maintenance and upkeep improvements#
Please flake8 by removing unused imports #584 (@consideRatio)
close shared clients when loop closes #579 (@minrk, @consideRatio)
Simplify async init #576 (@minrk, @consideRatio)
Replace recommonmark with myst_parser and fix changelog rendering #575 (@rccern, @consideRatio, @welcome, @choldgraf, @manics)
[KubeIngressProxy] Add underscore prefix to private functions:
safe_name_for_routespec
anddelete_if_exists
#572 (@consideRatio, @manics, @minrk)Misc maintenance details #571 (@consideRatio, @minrk)
Rely on the event loop: use
kubernetes_asyncio
instead ofkubernetes
and dedicated threads #563 (@athornton, @yuvipanda, @consideRatio, @minrk, @manics)
Documentation improvements#
[KubeIngressProxy] Add a long docstring to KubeIngressProxy class #568 (@consideRatio, @yuvipanda, @GeorgianaElena)
Contributors to this release#
(GitHub contributors page for this release)
@athornton | @choldgraf | @clkao | @consideRatio | @GeorgianaElena | @manics | @minrk | @rccern | @welcome | @yuvipanda
2.0#
2.0.1 - 2022-02-15#
Maintenance and upkeep improvements#
Support recent version of kubernetes client library (21.7.0) that introduced a breaking change #558 (@athornton)
Contributors to this release#
2.0.0 - 2021-11-28#
Breaking changes#
A breaking change was introduced in #545, making the default value of allow_privilege_escalation
be False
. This means a user can’t use sudo
unless allow_privilege_escalation
is explicitly set to True
. The JupyterHub user Pod that KubeSpawner creates will have a container with a securityContext
that has allowPrivilegeEscalation
set to false
by default.
For reference, the following can be read about allowPrivilegeEscalation
in Kubernetes official documentation:
AllowPrivilegeEscalation: Controls whether a process can gain more privileges than its parent process. This bool directly controls whether the
no_new_privs
flag gets set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run asPrivileged
OR 2) hasCAP_SYS_ADMIN
.
To revert to the previous behavior of using the cluster’s default, set allow_privilege_escalation
explicitly to None
.
Bugs fixed#
Default allow_privilege_escalation to False #545 (@yuvipanda)
Ensure that the _start_future attribute exists. #541 (@athornton)
Contributors to this release#
(GitHub contributors page for this release)
@athornton | @minrk | @mriedem | @welcome | @yuvipanda
1.1#
1.1.2 - 2021-11-03#
Bugs fixed#
Fix race condition between spawn() calling _start() and progress() #511 (@consideRatio)
Maintenance and upkeep improvements#
Rename master to main #535 (@consideRatio)
Remove .pylintrc config #534 (@consideRatio)
Warn about cli args being ignored when KubeSpawner.cmd is not set #533 (@minrk)
Other merged PRs#
ci: misc fixes, don’t run tests on markdown changes, etc #539 (@consideRatio)
docs: require sphinx >=2 #538 (@consideRatio)
[pre-commit.ci] pre-commit autoupdate #537 (@pre-commit-ci)
Update our docs config #536 (@consideRatio)
[pre-commit.ci] pre-commit autoupdate #530 (@pre-commit-ci)
Contributors to this release#
(GitHub contributors page for this release)
@athornton | @consideRatio | @manics | @minrk | @pre-commit-ci | @yuvipanda
1.1.1 - 2021-10-04#
Bugs fixed#
Terminate process correctly from reflector thread #525 (@yuvipanda)
Continuous integration#
[pre-commit.ci] pre-commit autoupdate #526 (@pre-commit-ci)
Contributors to this release#
1.1.0 - 2021-07-21#
Enhancements made#
Expand username etc. in configured service_account #518 (@consideRatio)
Sort env to reliably expand nested env references #510 (@consideRatio)
Bugs fixed#
Ensure to omit empty lists in security contexts #517 (@consideRatio)
Maintenance and upkeep improvements#
Generalize omit_namespace functionality #514 (@droctothorpe)
Remove unneeded dep #508 (@dhirschfeld)
Documentation improvements#
Other merged PRs#
[KubeIngressProxy] Set configuration before instantiating reflectors #515 (@droctothorpe)
Contributors to this release#
(GitHub contributors page for this release)
@consideRatio | @dhirschfeld | @droctothorpe | @mggger | @yuvipanda
1.0#
1.0.0 - 2021-05-14#
This release is the continuation of version 0.16.1 and could have been 0.17.0 in practice. We opted to release 1.0.0 as it enables us to communicate changes according to SemVer. Using SemVer versioning, a change in each of the three version numbers (major.minor.patch) represents a different kind of change.
Breaking changes#
When using KubeSpawner 1.0.0 or later together with JupyterHub 1.4.1 or later, deleting a JupyterHub user or deleting (not just stopping) a named server will lead to removing the associated PVC resource. To opt out of this behavior set the
delete_pvc
configuration toFalse
.
New features added#
Allow configuration of kubernetes client’s options: ssl_ca_cert, host #494 (@kafonek)
add method to delete namespaced PVC in spawner base class #475 (@nsshah1288)
Enhancements made#
Maintenance and upkeep improvements#
Add MANIFEST.in (LICENCE, README.md) #495 (@dhirschfeld)
Documentation improvements#
Continuous integration#
ci: test against recent k8s versions and misc workflow updates #506 (@consideRatio)
Contributors to this release#
(GitHub contributors page for this release)
@cbanek | @consideRatio | @dhirschfeld | @jabbera | @kafonek | @manics | @meeseeksmachine | @minrk | @nsshah1288 | @octavd
0.16#
0.16.1 - 2021-03-01#
Bugs fixed#
Contributors to this release#
0.16.0 - 2021-02-26#
Enhancements made#
Add pod_security_context and container_security_context config #480 (@cyrilcros)
Allow mounting of service account token to be configurable (automount_service_account_token) #476 (@dtaniwaki)
Add user namespace support #458 (@athornton)
Bugs fixed#
Maintenance and upkeep improvements#
Refactor: remove a third way to name the same thing in make_pod’s parameters #483 (@consideRatio)
pre-commit: use prettier as autoformatter (markdown, yaml) #482 (@consideRatio)
adopt black (via pre-commit) for code formatting #473 (@minrk)
remove duplicated secret_mount_path definition #472 (@minrk)
Other merged PRs#
Contributors to this release#
(GitHub contributors page for this release)
@athornton | @betatim | @clkao | @consideRatio | @cyrilcros | @dhirschfeld | @dtaniwaki | @lresende | @manics | @meeseeksmachine | @minrk | @mriedem | @remche | @shanestarcher-okta | @stv0g | @tirumerla | @yuvipanda
0.15#
0.15.0 - 2020-10-15#
Enhancements made#
Expand storage selector #463 (@dtaniwaki)
Add pod_connect_ip config regarding how kubespawner reach the pod #460 (@dtaniwaki)
[Feature] Add AllowPrivilegeEscalation to container’s securityContext #450 (@captnbp)
Bugs fixed#
Wrap concurrent.futures Future in polling function #467 (@ondave)
Let uid/gid/fs_gid default to None instead of 0 #453 (@consideRatio)
Maintenance and upkeep improvements#
Don’t run tests on unsupported k8s client versions #464 (@yuvipanda)
Migrate from travis to GitHub actions #459 (@consideRatio)
Cleanup JS patch of JupyterHub 0.8 HTML not needed in 0.9+ #455 (@consideRatio)
Contributors to this release#
(GitHub contributors page for this release)
@athornton | @betatim | @captnbp | @celine168 | @clkao | @consideRatio | @DarkmatterVale | @dkipping | @dtaniwaki | @erolosty | @gcavalcante8808 | @gsemet | @gweis | @h4gen | @joelpfaff | @manics | @meeseeksmachine | @minrk | @ondave | @ryanlovett | @stefanvangastel | @support | @tjcrone | @welcome | @yuvipanda
0.14#
0.14.1 - 2020-10-23#
Bugs fixed#
KubeSpawner.image_pull_secrets malfunctions in 0.14.0 - this fixes it #451 (@johnhoman)
Maintenance and upkeep improvements#
CI: bump to kubernetes client v12, and test k8s 1.19 also #449 (@consideRatio)
Contributors to this release#
(GitHub contributors page for this release)
@consideRatio | @johnhoman | @rkdarst | @welcome | @yuvipanda
0.14.0 - 2020-10-05#
Enhancements made#
Allow image_pull_secrets config to be specified the k8s native way #442 (@consideRatio)
Bugs fixed#
Allow pod to spawn if the PVC specified already exists #438 (@gravenimage)
Add timeout and retry to create_namespaced_pod #433 (@gravenimage)
Maintenance and upkeep improvements#
Manage regexp syntax deprecation #445 (@consideRatio)
Python 3.6+ migration: async in 3.5 and async with yeild in 3.6 #444 (@consideRatio)
Add an explicit dependency on urllib3 #437 (@yuvipanda)
Delete remnant now unused parts in spawner.py #382 (@bitnik)
0.13#
0.13.0 - 2020-09-20#
Noteworthy for this release are: performance improvements, Kubernetes native environment variable specification, the possibility to run multiple JupyterHub’s in the same namespace.
Breaking changes#
The following changes probably won’t break typical usage of KubeSpawner, but could for example break logic to customized the progress page JupyerHub displays while spawning a Kubernetes pod for the user.
The Kubernetes EventsReflector, which is providing the KubeSpawner instances with information about Kubernetes Events describing events for other resources, is now exposing events as python dictionaries rather than
V1Event
objects.V1Event
is defined in the kubernetes-client/python library as a representation of a Kubernetes Event.KubeSpawner’s
.progress
method implementation (https://github.com/jupyterhub/jupyterhub/pull/1771) which is generating a formattedmessage
as well as a KubeSpawner specificraw_event
entry now returns theraw_event
as a Python dictionary with entries formatted incamelCase
where the keys were formatted insnake_case
.
New#
Support EnvVar’s with ‘valueFrom’ as well as with ‘value’ #426 (@consideRatio)
Breaking change / performance: don’t make kubernetes-client deserialize k8s events into objects #424 (@rmoe)
Add component_label property to support multiple hub instances in the… #418 (@harsimranmaan)
Fixes#
Maintenance#
CI: test k8s 1.18 and require success, publish without test, bump minikube #417 (@consideRatio)
Contributors to this release#
@abinet | @chancez | @consideRatio | @harsimranmaan | @meeseeksmachine | @mriedem | @rmoe | @shenghu | @welcome | @yuvipanda | @zlanyi
This list of contributors were generated by github-activity
according to these criteria.
0.12#
0.12.0 - 2020-07-17#
Security#
Security fix: CVE-2020-15110 / GHSA-v7m9-9497-p9gr. When named-servers are enabled, certain username patterns, depending on authenticator, could allow collisions. The default named-server template is changed to prevent collisions, meaning that upgrading will lose associations of named-servers with their PVCs if the default templates are used. Data should not be lost (old PVCs will be ignored, not deleted), but will need manual migration to new PVCs prior to deletion of old PVCs.
New features#
Fixes#
Maintenance#
Fix CI builds #394 (@consideRatio)
use bump2version and add release documentation #376 (@consideRatio)
improve development documentation #377 (@consideRatio)
test with JupyterHub master #380 (@consideRatio)
0.11#
[0.11.1] - 2019-11-29#
0.11.1 consists of a small bugfix that made the progress reporting break.
Fixes#
Fix spawn progress events now showing up due to failure to serialize #381 (@consideRatio)
Maintenance#
Don’t require deploy job to also run tests #379 (@consideRatio)
[0.11.0] - 2019-11-28#
0.11.0 features minor feature additions, compatebility measures, and fixes. KubeSpawner now require Python 3.5 and is no longer actively tested against Kubernetes clusters versioned 1.10 as before, but is now being tested against version 1.12-1.16 with the python kubernetes client library version 8-11 that is compatible with k8s 1.11-1.15.
New#
Fixes#
Scope security context to container from pod where it is possible #334 (@shoelsch)
Permit storage class to be empty string. #337 (@GrahamDumpleton)
Fix pod name prefix escaping for named servers #309 (@dmarth)
Allow None on UID and GID #286 (@dtaniwaki)
Compatibility#
CI reworked, support modern k8s high resolution timestamps, event monitoring is made more reliable, kubernetes=>8 required, python>=3.6 required, inline docs added #368 (@consideRatio)
Fix for Kubernetes 1.16 regarding datetime comparison #362 (@consideRatio)
More idiomatic python syntax #356 (@AnotherCodeArtist)
Compatibility with kubernetes, jupyterhub prereleases #314 (@minrk)
Pin kubernetes version to 8.0 #292 (@yuvipanda)
Maintenance#
Iteration of local development instructions #377 (@consideRatio)
Add RELEASE.md and utilize bump2version #376 (@consideRatio)
Fix docs build #371 (@consideRatio)
Add relevant badges to README.md #365 (@consideRatio)
Update SETUP.md instructions to match current state of JupyterHub #353 (@yuvipanda)
codecov badge #312 (@choldgraf)
Update documentation regarding run_as_gid behavior #297 (@kevin-bates)
making kubespawner docs links more discoverable #287 (@choldgraf)
0.10#
0.10.1 - 2018-12-11#
0.10.1 is a tiny bugfix release, fixing regressions in 0.10.0.
Fix deprecation of
KubeSpawner.hub_connect_ip
, which caused errors in 0.10 when the deprecated config was used.
0.10.0 - 2018-12-05#
0.10.0 is a small release, with minor changes and fixes.
Deprecate
KubeSpawner.image_spec
configuration in favor of standardKubeSpawner.image
.image_spec
continues to work with deprecation warningsStop pinning an exact kubernetes client version; instead, require kubernetes client >= 7. If desired, pinning should be done in images/installations
Expand username template variables in extra_containers
Set pod restart policy to OnFailure, so that notebook servers that terminate themselves cleanly do not restart automatically
Formally deprecate
KubeSpawner.hub_connect_ip
andKubeSpawner.hub_connect_ip
in favor ofJupyterHub.hub_connect_ip
, available in jupyterhub >= 0.8
0.9#
0.9.0 - 2018-09-03#
KubeSpawner 0.9.0 is a big release of KubeSpawner.
Change highlights:
Require Kubernetes >= 1.6
Require JupyterHub >= 0.8
Require Python >= 3.5
Expose lots more Kubernetes options
Support configuration profiles via :attr:
.KubeSpawner.profile_list
Support Kubernetes events for the progress API in JupyterHub 0.9.
Update Kubernetes Python client to 6.0 (supporting Kubernetes 1.10 APIs)
Numerous bugfixes