Releases: nolar/kopf
0.28rc3
0.28rc2
General topic: stability, resilience, recoverability, better logging and error handling.
New features:
Bugfixes:
- On-field handlers were triggered for non-existent fields with
None
→None
change. #523 - Sub-handlers' state was not purged, preventing their execution in the future. #517
Resilience improvements:
- Annotations from other Kopf-based operators are fully ignored to avoid ping-pong effects. #539 #538
- The operator will force-stop itself by SIGKILL after 10 minutes of attempts to stop gracefully. #543
- Crash the whole operator on unrecoverable errors in watchers/workers. #509
- Throttle individual resource processing on unexpected errors. #510
- Extra exceptions are intercepted and ignored for k8s-event posting. #507
- Treat client timeouts during watches similar to other API errors. #506
- Handle all connection errors from the initial streaming request. #512
Experience improvements:
- Annotations restrictions on key length are reworked to allow longer names (v2/v1 keys). #529
- Annotations values are now compacted (no spaces) for the better visual outlook. #516
- Log/warn when the resulting patched object does not match the intended patch. #527
- Filtered-out resources do not create phantom logs & do not get annotated anymore. #545
- Cluster-scoped objects are logged by their name, without "None" as the namespace. #544
- Better phrasing for some log messages to avoid confusion. #540
- Documentation fixes. #530
Internal changes:
- The first release since the fork. #502 #500 #505 #546
- CI feedback is sped up from ≈40-50 mins to ≈5 mins per push. #536 #537
- K3d/K3s is used for CI functional/integration testing; Minikube is for nightly tests. #536 #547
- K8s versions are updated for CI builds. #501
- Imports are sorted with
isort
. #525 #531 - Added tests for operators' peering. #519
- Added tests for logging & loggers. #544
- Get rid of mocks for causes & registries, use normal classes. #521
- Time-based tests are stabilised (though not fully fixed). #534 #528 #520 #522
- Asyncio tasks are now named in Python 3.8+, which makes the debugging easier. #542
0.27
Originally released on 2020-05-11 16:37:41+00:00 (link).
WARNING: The changes are backward-compatible (in theory). But the changes are also massive, so things can break unexpectedly (in practice). Test this upgrade carefully.
New features:
@kopf.daemon
for background resource-accompanying tasks/threads. #330 #342 #360@kopf.timer
for regular and/or delayed activities & checks. #330 #342 #360kopf.PRESENT
for labels/annotations filters (instead of misleadingNone
). #327kopf.ABSENT
for labels/annotations filters. #327- Arbitrary callbacks for labels/annotations filters. #328
kopf.all_()
,kopf.any_()
,kopf.not_()
,kopf.none_()
helpers for callbacks aggregation. #345- A proper official documented way to configure operators; plus docs. #336 #337 #331
- Identities of operators, allowing multiple non-colliding operators for the same resources. #331 #344
- Configurable client-side timeouts for watch requests. #322 #336
- Configurable storages for handling state & diff-bases. #331 #346 #353
Improvements:
- Internal instant functions (lifecycles, when-filters) do not use thread pools anymore. #326
- Bodies & patches now have magical properties for metadata, spec, status, with "live view" into data. #327
- Labels and annotations are passed as additional kwargs (similar to body/spec/meta/status). #327
- All user-facing types and classes are published as framework's public interface (via top-level package). #341
- Switch
KopfExample
&KopfPeering
from v1beta1 to v1 CRD API; keep v1beta1 nearby. #364 - Documentation is restructured for separate pages for all aspects of handling (kwargs, filters, etc). #325
- Explain the "structural schemas" of K8s 1.16+, and v1-vs-v1beta1 CRD differences. #364
Fixes:
- Threads from the sync handlers executors are not leaked (not left orphaned) at exit. #326
- Handlers' state is now persisted in annotations, not in status: for custom & built-in resources. This solves the issues with built-ins not handled properly in K8s 1.16+. #331
- Fix the on-field handler not being invoked when the diff is too generic (relative to the field). #340
- Provoke after-sleep handling cycles even on resources with no arbitrary field preservation. #343
- Fix premature finalizer removal with 2+ deletion handlers. #361
- Avoid no-effect patching and potentially delaying handling cycles. #362
Internal changes:
0.27rc6
Originally released on 2020-05-11 16:37:41+00:00 (link).
Documentation:
- Explain the "structural schemas" of K8s 1.16+, and v1-vs-v1beta1 CRD differences. #364
- Switch
KopfExample
&KopfPeering
from v1beta1 to v1 CRD API; keep v1beta1 nearby. #364
Fixes:
- Better detection of instantly exiting daemons/timers. #360
- Fix premature finalizer removal with 2+ deletion handlers. #361
- Avoid no-effect patching and potentially delaying handling cycles. #362
Internal changes:
- Coveralls is made optional. #363
0.27rc5
0.27rc4
0.27rc3
0.27rc2
Originally released on 2020-04-07 12:07:16+00:00 (link).
Improvements:
- Make finalizer's name configurable. #344
- Daemons-with-filters' behaviour is clarified: stop when mismatches, re-spawn when matches again. #342
- All user-facing types and classes are published as framework's public interface (via top-level package). #341
Fixes:
0.27rc1
Originally released on 2020-04-01 10:17:05+00:00 (link).
WARNING: The changes are backward-compatible (in theory). But the changes are also massive, so things can break unexpectedly (in practice). Test this upgrade carefully.
New features:
@kopf.daemon
for background resource-accompanying tasks/threads. #330@kopf.timer
for regular and/or delayed activities & checks. #330kopf.PRESENT
for labels/annotations filters (instead of misleadingNone
). #327kopf.ABSENT
for labels/annotations filters. #327- Arbitrary callbacks for labels/annotations filters. #328
- A proper official documented way to configure operators; plus docs. #336 #337
- Operators can be configured to use their own names for persistence, allowing multiple non-colliding operators for the same resources. #331
Improvements:
- Internals instant functions (lifecycles, when-filters) do not use thread pools anymore. #326
- Documentation is restructured for separate pages for all aspects of handling (kwargs, filters, etc). #325
- Bodies & patches now have magical properties for metadata, spec, status, with "live view" into data. #327
- Labels and annotations are passed as additional kwargs (similar to body/spec/meta/status). #327
- Configurable client-side timeouts for watch requests. #322 #336
- Configurable storages for handling state & diff-bases. #331
Fixes:
- Threads from the sync handlers executors are not leaked (not left orphaned) at exit. #326
- Handlers' state is now persisted in annotations, not in status: for custom & built-in resources. This solves the issues with built-ins not handled properly in K8s 1.16+. #331
Internal changes:
- Compatibility with Kubernetes 1.18 in CI/CD. #335
0.26
Originally released on 2020-02-20 16:05:16+00:00 (link).
Improvements:
- Status as a sub-resource is detected and patched via separate API endpoints. #313
- Security: Stop exposing the
Authorization:
and other HTTP headers in logs. #306 - Documentation's little fixes. #97 #303
CI/CD automation:
- Warnings now do fail the tests (warnings must be fixed — same as regular errors). #312
- Python 3.8 in CI/CD. Python 3.7 is still tested. Python 3.9-dev for preview. #314
- LGTM checks added to CI/CD, code improved. #302
Internal changes: