You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: Create applylib for use by instance reconciler
* Applylib is inspired from:
* kubectl pkg/cmd/apply/applyset.go
* kubebuilder-declarative-pattern/applylib
* Creating a simpler, self-contained version of the library that is purpose built for controllers.
* Handle pruning and uses server-side apply
* RGD controller changes
* fix linter warnings for func defn lines being too long
* Inject restMapper to be passed to instance controllers
* Instance controller changes
* When patching instance status, use retry-on-conflict loop
* Since we apply all resolved resources, Join() errors across
resources (apply/update errors)
* Add changes to get restMapper and pass it on to applylib
* Instance reconciler changes
* Refactor reconcileInstance to use Applylib
* Makefile
* Add target to setup/install envtest
* Setup envtest, kubebuilder assets for running e2e tests locally
* Remove pkg/controller/instance/delta since we dont compute delta
locally. We defer it to the server.
* With SSA, we need to be careful about setting field manager
* different reconciler paths use different managers
* Introduce source-rgd labels to differenciate b/w parent rgd that
creates an instance and the source rgd that defines the instance CRD
* This is useful when we have an RGD creating and instance of
another RG. Today we have a bug where the parent and the child
reconcilers overwrite the labels.
* (next steps) lifecycle support in applylib
* redo externalRef as lifecycle hints
* decorate lifecycle hint (create or update, no delete)
-----------------------
Addressing review comments:
* Move applyset/applylib -> pkg/applylib
* Add more docs
* Add a reference to the applyset KEP in comments
* Add docs.go and interface docs
* Improvements:
* remove caching a json marshalled copy of obj
* Remove name/namespace in PruneObject and instead derive it from object. Also change object type from runtime.Object to unstructured.
* use fieldmanager config param to remove kro hardcoding in applyset
* Aggregate pruneErrors and applyErrors into single Errors()
* add recordPruneObject helper
* switched from waitGroup to errgroup when collecting objects to prune across namespaces
* take logr as a config in ApplySet. Added more logging in applyset.
* use superset of namespaces and GKs we compute before apply for pruning
* Add simple tests in the applyset pkg
* use namespace-scoped resource interface when pruning
* use force=True when applying in setManaged()
* Removed un-necessary deepcopy in updateParentLabelsAndAnnotations
* Add Unit tests to verify pruning and apply logic
* Fix bugs in pruning logic that missed old namespaces and GKs
* Remove callbacks and make code more procedural
* Make pruning sequential by default
* Refactors:
* add RestMapper to the client-set
* use Unstrucutred in ApplyableObject instead of interface and forcing it to be unstructured in code
* minor restruction in processLoad() method
* Refactor code that was using errors.Join and an array
* Use ContainsFinalizer
* Converting unstructured to PartialObjectMetadata for parent in applyset.
* Cleanups:
* Fix typos in comments, prints etc
* Remove obseleted comments
* Make the exported resources strutter less, applyset.ApplySet -> applyset.Set, NewApplySet -> New etc.
* Fix captilaization for var names. Uid -> UID, ...
* use consts for labelManager strings
* remove pure formatting changes in unrelated files to minimize PR changeset
Split out:
* Remove pkg/metadata/finalizer.go changes and create a separate PR kubernetes-sigs#625
* move envtest makefile changes to kubernetes-sigs#636
* removing labeller changes and moving them to kubernetes-sigs#631
* Fix regression when removing labeller changes:
`dynamic-controller Error syncing item, requeuing with rate limit {"item": {"NamespacedKey":"chainsaw-special-quail/test-instance","GVR":{"Group":"kro.run","Version":"v1alpha1","Resource":"checkinstancecreationsimpledeployments"}}, "error": "failed to setup instance: failed to set finalizer: error getting finalizers: .metadata.finalizers accessor error: [] is of the type []string, expected []interface{}"}`
0 commit comments