github nolar/kopf 1.29.0rc1

latest releases: 1.37.2, 1.37.1, 1.37.0...
pre-release3 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 DeprecationWarnings 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:

  • Public fields & methods of OperatorRegistry — use it only as an object for the registry= kwarg. #625 #611
  • All internal sub-registries: Resource[Watching|Spawning|Changing]Registry, ActivityRegistry. #625 #611
  • All legacy registries: SimpleRegistry, GlobalRegistry, etc. #625

Deprecated:

  • operator(namespace='…')operator(namespaces=['…']). #600
  • operator(namespace=None)operator(clusterwide=True). #600

New features:

  • Namespace serving:
    • Multiple namespaces: e.g. -n default -n myapp. #500
    • Namespace globs: e.g. --namespace myapp-*,!*-pr-*. #500
    • Namespace precompiled regexps (only in embedded mode). #500
  • Resource serving:
    • Resources specified partially with/without versions: @kopf.on.event('kopf.dev', 'kex'). #500
    • Resources specified by secondary names (short, singular, kind): @kopf.on.event(kind='Pod'). #500
    • Resources specified by minimally sufficient auto-guess names: @kopf.on.event('pods'). #500
    • Handling of whole categories of resources: @kopf.on.event(category='all'). #500
    • Handling of all resources (do not try on real clusters): @kopf.on.event(kopf.EVERYTHING). #500
  • Field filters:
    • Fields' presence/absence filters: e.g. @kopf.on.event(…, field='spec.field', value=kopf.PRESENT). #573
    • Fields' value filters: e.g. @kopf.on.event(…, field='spec.field', value='value'); callbacks are supported. #573
    • Fields' diff filters (only for update): @kopf.on.update(…, field='spec.field', old=1, new=2); callbacks are supported. #573
    • Fields' filters are now applicable to all handlers: creation/update/deletion/resuming, daemons, timers, events. #573
  • Peering behaviour is now configurable via settings. #572

Improvements:

  • The operator's core ("reactor") is full reworked for dynamic detection of resources and namespaces. #600
  • Better identifiers of peers in IPv6 networks: for easier identification. #569
  • Better log messages in change-detecting processing: #605
  • Faster (near-instant) unfreezing when peers are gone/expire. #581
  • More notes on x-kubernetes-preserve-unknown-fields in the docs. #612

Bugfixes:

  • Resources with no uids are now supported too. #596
  • CLI for freezing/resuming was failing due to missing authentication. #568
  • Ignore irrelevant handlers in superseding causes (e.g. deletion-during-creation). #606
  • Fixed configuration of the official Kubernetes library, if used for auth piggybacking. #567
  • Guaranteed finalisation of watchers & workers. #628

Contributor experience:

  • Switched to GitHub Actions for CI. #582 #586
  • API errors are wrapped into our own classes, to prevent abstraction leakage of an HTTP client. #575
  • Async timeouts used in the tests, some asyncio tests are time-limited. #608
  • Stricter typing on resources & namespaces. #623 #624
  • Squashed per-resource registries into combined ones. #622
  • Some other refactorings for code clarity: #577 #576 #578 #597 #598 #609 #610 #626 #627

Don't miss a new kopf release

NewReleases is sending notifications on new releases.