A Python framework to write Kubernetes operators in just a few lines of code
MIT License
Bot releases are hidden (Show)
Published by nolar over 3 years ago
New features:
Bugfixes:
Improvements:
Union
is needed). #747 #753Contributor experience:
Internal refactoring:
Published by nolar over 3 years ago
New features:
Improvements:
Contributor experience:
Internal refactoring:
Published by nolar over 3 years ago
Bugfixes:
Improvements:
Union
is needed). #747 #753Internal refactoring:
Contributor experience:
Published by nolar over 3 years ago
New features:
Improvements:
Bugfix:
Contributor experience:
Published by nolar over 3 years ago
Bugfixes:
Published by nolar over 3 years ago
Bugfix:
Published by nolar over 3 years ago
Bugfix:
Published by nolar over 3 years ago
New features:
Improvements:
Contributor experience:
Published by nolar over 3 years ago
Documentation only (to rebuild ReadTheDocs):
Published by nolar over 3 years ago
Bugfixes:
Contribution workflow:
master
branch is renamed to main
. #711Published by nolar over 3 years ago
New features:
memo
with keys available throughout all operator- & resource-level handlers. #667memo=
with arbitrary values to be used as a context. #667memo
classes for embedded operators instead of the default kopf.Memo
. #667Improvements:
pykube-ng
& kubernetes
) objects/models are now supported for hierarchies. #672forced=
flag in all functions, incl. names/namespaces.nested=
now accepts a single string too: nested="spec.jobTemplate"
.adopt()
has got forced
& strict
options (in addition to nested
).Bugfixes:
0.0.0.0
for liveness probes in docs. #665 by @brennermContributors experience:
Refactorings:
Published by nolar over 3 years ago
New features:
memo
with keys available throughout all operator- & resource-level handlers. #667memo=
with arbitrary values to be used as a context. #667memo
classes for embedded operators instead of the default kopf.Memo
. #667Improvements:
pykube-ng
& kubernetes
) objects/models are now supported for hierarchies. #672forced=
flag in all functions, incl. names/namespaces.nested=
now accepts a single string too: nested="spec.jobTemplate"
.adopt()
has got forced
& strict
options (in addition to nested
).Bugfixes:
0.0.0.0
for liveness probes in docs. #665 by @brennermContributors experience:
Refactorings:
Published by nolar over 3 years ago
Slightly BREAKING in cases assumed to be extremely rare (see #674 for details):
id=
.field=
) are used on resume/create/update/delete handlers AND the resource is in the handling cycle at the moment of the upgrade, these handlers will be re-executed;
<1.29
) are not affected.Bugfixes:
Published by nolar over 3 years ago
New features:
param
option & param
kwarg. #659Bugfixes:
resource
kwarg is added to replace cause.resource
(forgotten by mistake). #658Published by nolar over 3 years ago
BREAKING CHANGES! The major version increase (0.x → 1.x) means that there are changes in the public interface with no backwards compatibility. Pay attention when upgrading — most of them have quick replacements.
Most of these legacies are extremely old and it is highly unlikely that they were used in any existing operators. The DeprecationWarning
s were issued for all these features (except namespaces). See #511.
Dropped features with replacements:
Removed feature | Replacement feature |
---|---|
cooldown= option of decorators |
backoff= option |
event kwarg in @kopf.on.event
|
reason kwarg |
cause kwarg in handlers |
use all kwargs directly |
kopf.login() sync function |
@kopf.on.login handlers and async activities |
kopf.config module |
settings kwarg of @kopf.on.startup() handlers |
kopf.config.get_pykube_cfg() for patching |
@kopf.on.login() handlers |
kopf.HandlerFatalError |
kopf.PermanentError |
kopf.HandlerRetryError |
kopf.TemporaryError |
kopf.create_tasks() (sync) |
kopf.spawn_tasks() (async) |
kopf.events.event/info/warn/exception() |
the same directly in the kopf module |
None for labels= /annotations= filters |
kopf.PRESENT (None now raises exceptions) |
Positional field in @on.field('group', 'v1', 'plural', 'field')
|
kwarg field='field' instead |
Unversioned keys in storages | generate v1/v2 keys explicitly |
Storages with unprefixed annotations | prefix is now mandatory; defaults to kopf.zalando.org/…
|
@kopf.on.this(…) for sub-handlers |
@kopf.subhandler(…) (for readability) |
Dropped features without replacements:
OperatorRegistry
— use it only as an object for the registry=
kwarg. #625 #611Resource[Watching|Spawning|Changing]Registry
, ActivityRegistry
. #625 #611SimpleRegistry
, GlobalRegistry
, etc. #625Deprecated features:
operator(namespace='…')
→ operator(namespaces=['…'])
. #600operator(namespace=None)
→ operator(clusterwide=True)
. #600pykube-ng
is not installed implicitly as a dependency (install explicitly or via kopf[full-auth]
). #655New features:
-n default -n myapp
. #500--namespace myapp-*,!*-pr-*
. #500@kopf.on.event('kopf.dev', 'kex')
. #500@kopf.on.event(kind='Pod')
. #500@kopf.on.event('pods')
. #500@kopf.on.event(category='all')
. #500@kopf.on.event(kopf.EVERYTHING)
. #500@kopf.on.event(…, field='spec.field', value=kopf.PRESENT)
. #573@kopf.on.event(…, field='spec.field', value='value')
; callbacks are supported. #573@kopf.on.update(…, field='spec.field', old=1, new=2)
; callbacks are supported. #573Improvements of existing features:
Documentation improvements:
x-kubernetes-preserve-unknown-fields
in the docs. #612kopf.zalando.org/v1
to kopf.dev/v1
(but not annotations and finalizers). #643 #644Bugfixes:
kind: Event
from EVERYTHING
to avoid "resource explosion". #636Contributor experience:
Internal refactorings:
pytest-mock
with asynctest
. #645Published by nolar over 3 years ago
Internal:
kubernetes
is removed from e2e dependencies. #655pykube-ng
is removed from implicit dependencies. #655pykube-ng
& kubernetes
are re-exposed via the kopf[full-auth]
extra. #655Published by nolar over 3 years ago
Bugfix:
Published by nolar over 3 years ago
Bugfixes:
when=
, values, labels, annotations) were called for apriori mismatching resources/selectors. #650Internal:
Published by nolar over 3 years ago
Bugfixes:
kind: Event
from EVERYTHING
to avoid "resource explosion". #636Documentation:
kopf.zalando.org/v1
to kopf.dev/v1
(but not annotations and finalizers). #643 #644Other internal changes:
pytest-mock
with asynctest
. #645Published by nolar almost 4 years ago
BREAKING CHANGES! The major version increase (0.x → 1.x) means that there are changes in the public interface with no backwards compatibility. Pay attention when upgrading — most of them have quick replacements.
Most of these legacies are extremely old and it is highly unlikely that they were used in any existing operators. The DeprecationWarning
s were issued for all these features (except namespaces). See #511.
Removed feature | Replacement feature |
---|---|
cooldown= option of decorators |
backoff= option |
event kwarg in @kopf.on.event
|
reason kwarg |
cause kwarg in handlers |
use all kwargs directly |
kopf.login() sync function |
@kopf.on.login handlers and async activities |
kopf.config module |
settings kwarg of @kopf.on.startup() handlers |
kopf.config.get_pykube_cfg() for patching |
@kopf.on.login() handlers |
kopf.HandlerFatalError |
kopf.PermanentError |
kopf.HandlerRetryError |
kopf.TemporaryError |
kopf.create_tasks() (sync) |
kopf.spawn_tasks() (async) |
kopf.events.event/info/warn/exception() |
the same directly in the kopf module |
None for labels= /annotations= filters |
kopf.PRESENT (None now raises exceptions) |
Positional field in @on.field('group', 'v1', 'plural', 'field')
|
kwarg field='field' instead |
Unversioned keys in storages | generate v1/v2 keys explicitly |
Storages with unprefixed annotations | prefix is now mandatory; defaults to kopf.zalando.org/…
|
@kopf.on.this(…) for sub-handlers |
@kopf.subhandler(…) (for readability) |
Dropped without replacements:
OperatorRegistry
— use it only as an object for the registry=
kwarg. #625 #611Resource[Watching|Spawning|Changing]Registry
, ActivityRegistry
. #625 #611SimpleRegistry
, GlobalRegistry
, etc. #625Deprecated:
operator(namespace='…')
→ operator(namespaces=['…'])
. #600operator(namespace=None)
→ operator(clusterwide=True)
. #600New features:
-n default -n myapp
. #500--namespace myapp-*,!*-pr-*
. #500@kopf.on.event('kopf.dev', 'kex')
. #500@kopf.on.event(kind='Pod')
. #500@kopf.on.event('pods')
. #500@kopf.on.event(category='all')
. #500@kopf.on.event(kopf.EVERYTHING)
. #500@kopf.on.event(…, field='spec.field', value=kopf.PRESENT)
. #573@kopf.on.event(…, field='spec.field', value='value')
; callbacks are supported. #573@kopf.on.update(…, field='spec.field', old=1, new=2)
; callbacks are supported. #573Improvements:
x-kubernetes-preserve-unknown-fields
in the docs. #612Bugfixes:
Contributor experience: