Skip to content

Releases: nolar/kopf

0.28rc3

12 Sep 23:16
7567d71
Compare
Choose a tag to compare
0.28rc3 Pre-release
Pre-release

Bugfixes:

  • Timers were ticking forever after the resource was deleted (if there were no finalizers). #548

0.28rc2

12 Sep 17:11
d712db2
Compare
Choose a tag to compare
0.28rc2 Pre-release
Pre-release

General topic: stability, resilience, recoverability, better logging and error handling.

New features:

  • JSON logging with --log-format=json. #544
  • Plain-text logging --log-format=plain. #544

Bugfixes:

  • On-field handlers were triggered for non-existent fields with NoneNone 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

18 Aug 22:13
349a976
Compare
Choose a tag to compare

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 #360
  • kopf.PRESENT for labels/annotations filters (instead of misleading None). #327
  • kopf.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:

  • Coveralls is made optional. #363
  • Compatibility with Kubernetes 1.18 in CI/CD. #335
  • pytest & pytest-asyncio are pinned temporarily until fixed on their side. #352

0.27rc6

18 Aug 22:13
349a976
Compare
Choose a tag to compare
0.27rc6 Pre-release
Pre-release

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

18 Aug 22:13
e81c109
Compare
Choose a tag to compare
0.27rc5 Pre-release
Pre-release

Originally released on 2020-04-28 12:29:32+00:00 (link).

Fixes:

  • Restrict annotation names to end with alphanumeric characters only. #353

Internal changes:

  • pytest & pytest-asyncio are pinned temporarily until fixed on their side. #352

0.27rc4

18 Aug 22:13
47b4424
Compare
Choose a tag to compare
0.27rc4 Pre-release
Pre-release

Originally released on 2020-04-16 17:02:14+00:00 (link).

Fixes:

  • Limit annotation names for handlers' statuses to 63 characters. #346

0.27rc3

18 Aug 22:13
698171a
Compare
Choose a tag to compare
0.27rc3 Pre-release
Pre-release

Originally released on 2020-04-08 14:52:29+00:00 (link).

Improvements:

  • kopf.all_(), kopf.any_(), kopf.not_(), kopf.none_() helpers for callbacks aggregation. #345

0.27rc2

18 Aug 22:13
fbc050d
Compare
Choose a tag to compare
0.27rc2 Pre-release
Pre-release

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:

  • 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

0.27rc1

18 Aug 22:13
df4e51b
Compare
Choose a tag to compare
0.27rc1 Pre-release
Pre-release

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. #330
  • kopf.PRESENT for labels/annotations filters (instead of misleading None). #327
  • kopf.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

18 Aug 22:13
51a3a70
Compare
Choose a tag to compare

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:

  • Rebalanced modules for lower complexity: classes & functions moved. #298
  • Deprecate prefixes and proxying methods of registries, make registries simpler. #315