Commit Graph

24 Commits

Author SHA1 Message Date
Alexander Demicev 8718160b80
Perform `ResourceDiff` compare before patch (#317) (#318)
* Fmt fixes



* Implement custom resource comparison logic

Introduces a `ResourceDiff` trait and implements it for various Fleet API resources. This allows controllers to perform more granular comparisons between the desired state and the current state of resources, avoiding unnecessary updates and reconciliations.



* Improve readability of the wait conditions individually



---------

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
Co-authored-by: Danil Grigorev <danil.grigorev@suse.com>
2025-06-06 13:24:31 +02:00
Danil Grigorev 97fe195787
chore: Update dependencies, add clippy CI, and cleanup code (#305)
* chore: Update dependencies, add clippy CI, and cleanup code

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Add clipy task and fix lint

Downgrade opentelemetry to allow clippy to pass

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

---------

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2025-05-27 11:54:12 +00:00
Danil Grigorev 91d734fd43
bug: Add controller readiness barrier (#307)
Introduce a `tokio::sync::Barrier` to the shared controller state.
Each main controller waits on this barrier after completing its initial setup, including dynamic watch registration and initial reconciliation.
This allows external components or health checks to synchronize and wait for all core controllers to be ready before proceeding.

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2025-05-27 09:31:07 +00:00
Danil Grigorev fdb2abe446
Perform flags modification only in ConfigMap or install (#254)
Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2025-04-14 13:25:04 +00:00
Danil Grigorev 6caa96f610
Dynamic watches setup: wait until the first subscriber added (#232)
Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2025-03-28 10:03:04 +00:00
Danil Grigorev a8c77f93dd
Simplify dynamic watch setup version separation (#219)
* Drop finalizer on ClusterGroup

- Move BundleNamespaceMapping cleanup into Class reconciler
- Remove finalizer from ClusterGroup, causing issues
- Refactor controllers to use stable API (duplicate cache for
  ClusterGroup)
- Fix hot loop on Helm install due to chart version compare issue

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Simplify dynamic watch setup version separation

Current setup allows to use functionality available for k/k 1.32+
already with streaming_list() option by piggybacking type_meta
population on serialization as a typed object first with k/k below 1.32.

`TypeMeta` for core types in this scenario is always populated by
`k8s_openapi` implementation, even though list response does omit
type_meta for the inner set of objects.

Main differentiator here, is that streaming_list uses only `watch`,
which never omits type_meta of the resource, while regular watch setup
issues `list` request to collect initial events.

For the `Cluster` object defined as a `CRD`, `to_dynamic_event` performs
necessary conversion with type_meta population in-place.

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Implement default handling as trait extension

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

---------

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2025-03-24 08:59:56 +00:00
Danil Grigorev 9c46365d26
Add `BundleNamespaceMapping` generation (#217)
* Add bundleNamespaceMapping generation

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Update the docs on cluster group and bundle namespace mapping

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Refactor to use ref mut when possible

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

---------

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2025-03-19 12:14:19 +00:00
Danil Grigorev dd2a83d03b
Add conditions and expose Fleet FG through config (#215)
Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2025-03-17 16:44:46 +00:00
Danil Grigorev 82dc23c348
Replace cache wide requeue all with dynamic watches setup (#209)
Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2025-03-12 17:24:58 +00:00
Danil Grigorev 2555a81c25
Implement dynamic watcher for Clusters and Namespaces (#194)
Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2025-03-11 09:52:36 +00:00
Danil Grigorev 5b403db91b
Use Resource inherit for new types (#167)
- watch fleet-controller ConfigMap for changes

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2025-01-30 15:24:09 +00:00
Danil Grigorev 99d31961c5
Automate fleet helm chart install (#109)
* helm fleet install

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Maintain state of the fleet helm chart

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Set managed fields to empty value (actually)

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Implement install settings for FleetAddonConfig

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Leave just install-fleet for development

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

---------

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2024-09-17 11:04:55 +00:00
Danil Grigorev 4bba311d5c
Provide options to set api server url and ca (#105)
- Allow to automatically infer local endpoint and certificate

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2024-09-11 11:34:04 +00:00
Danil Grigorev 3de1621de4
Perform only patch or create+update, improve error handling (#88)
Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2024-08-02 10:54:05 +00:00
Danil Grigorev 11fb534c14
Filter duplicate events from ClusterGroup reconcile (#87)
- Enroll into unstable-runtime to control and reuse object streams from
  watches.
- Reduce cache size by removing managed_fields
- Set the finalizer on the ClusterGroup object to ensure deletion events
  are not missed, and object is recreated

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2024-08-01 13:53:54 +00:00
Danil Grigorev bd03e8c0b0
Label selector based import setting (#68)
* Use development branch for the time being

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Add support for namespace and cluster label selectors

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Rework FleetAgentConfig and include selectors

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

* Add e2e including FleetAddonConfig

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>

---------

Signed-off-by: Danil-Grigorev <danil.grigorev@suse.com>
2024-07-22 08:05:48 +00:00
Danil Grigorev 01b8b50fe9
Create a ClusterGroup per ClusterClass
- matching all Clusters referencing a ClusterClass
- fleet cluster gets a label with ClusterClass name
- emit an event on cluster/group create and delete
- add common tracing fields

Signed-off-by: Danil Grigorev <danil.grigorev@suse.com>
2024-04-21 15:13:35 +02:00
Danil Grigorev 2bb35203dd
Clippy fixes, e2e test added
Signed-off-by: Danil Grigorev <danil.grigorev@suse.com>
2024-04-16 16:06:42 +02:00
Danil Grigorev 4197ccf671
Add image build and deploy, fix 'conditions' genration in fleet api
Signed-off-by: Danil Grigorev <danil.grigorev@suse.com>
2024-04-16 13:58:21 +02:00
Danil Grigorev ac5601f8d4
Add a return early error and handling
Signed-off-by: Danil Grigorev <danil.grigorev@suse.com>
2024-04-16 13:58:21 +02:00
Danil Grigorev e9caf1a739
Refactor error handling and add label propagation
Signed-off-by: Danil Grigorev <danil.grigorev@suse.com>
2024-04-15 15:45:24 +02:00
Richard Case 48654035d7
feat: started to implement reconcile
Signed-off-by: Richard Case <richard.case@suse.com>
2024-04-12 17:05:27 +01:00
Richard Case 84a94fd1cc
chore: added dev stuff
Signed-off-by: Richard Case <richard.case@suse.com>
2024-04-11 16:52:10 +01:00
Richard Case 53b9391b96
init: initial project scaffolding
Signed-off-by: Richard Case <richard.case@suse.com>
2024-04-11 08:49:17 +01:00