Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Add pause reconciliation support for Device and associated resources#183

Merged
felix-kaestner merged 6 commits intomainironcore-dev/network-operator:mainfrom
pauseironcore-dev/network-operator:pauseCopy head branch name to clipboard
Mar 4, 2026
Merged

Add pause reconciliation support for Device and associated resources#183
felix-kaestner merged 6 commits intomainironcore-dev/network-operator:mainfrom
pauseironcore-dev/network-operator:pauseCopy head branch name to clipboard

Conversation

@felix-kaestner
Copy link
Contributor

@felix-kaestner felix-kaestner commented Feb 10, 2026

Introduce the ability to pause reconciliation for Devices and their associated resources. This is useful for maintenance scenarios where network device configuration should be temporarily frozen.

Pausing can be enabled via:

  • Setting spec.paused: true on a Device (pauses Device and all associated resources)
  • Adding the networking.metal.ironcore.dev/paused annotation to any individual resource

When paused, controllers will skip reconciliation and log an info message indicating the resource is paused.

NOTE: Please review each commit with a detailed description about the change and rebase-merge to keep the trail of changes.

@felix-kaestner felix-kaestner requested a review from a team as a code owner February 10, 2026 09:29
@hardikdr hardikdr added the area/metal-automation Automation processes within the Metal project. label Feb 11, 2026
@hardikdr hardikdr added this to Roadmap Feb 11, 2026
@felix-kaestner felix-kaestner force-pushed the pause branch 5 times, most recently from b981f25 to 6c1ae39 Compare February 16, 2026 14:51
@felix-kaestner felix-kaestner force-pushed the pause branch 3 times, most recently from 9662284 to 0ef1218 Compare March 3, 2026 16:52
@felix-kaestner felix-kaestner enabled auto-merge (rebase) March 3, 2026 17:12
Introduce the ability to pause reconciliation for Devices and their
associated resources. This is useful for maintenance scenarios where
network device configuration should be temporarily frozen.

Pausing can be enabled via:
- Setting `spec.paused: true` on a Device (pauses Device and all
  associated resources)
- Adding the `networking.metal.ironcore.dev/paused` annotation to
  any individual resource

When paused, controllers will skip reconciliation and log an info
message indicating the resource is paused.
This patch adds a manager argument that can be used to restrict the
resources being reconciled by the manager to a particular namespace.
This option can be used independently or together with the already
present watch-filter label to fine tune the number of resources being
targeted by the operator deployment.
This patch updates the watches of each controller to trigger a
reconciliation of a resource once a resource linked in a
ProviderConfigRef gets updated.
While a shorter requeue-interval is useful for local development and
tiny fabrics to quickly observe and correct configuration drift it's not
appropriate for production environments where a large fleet of devices
are already in a desired state but just require a constant sync loop
every hour. Therefore the defaults are adjusted. Users of the
network-operator can still configure a custom value through specifying
the respective container arg in their helm deployment to fine tune the
requeue-interval to their respective needs.
Add watches on Device resources to all controllers that use
annotations.IsPaused to trigger reconciliation when a Device's Paused
spec field changes. This ensures resources are re-reconciled when their
parent Device is paused or unpaused.

Each controller now:
- Watches Device create/delete events (default behavior)
- Watches Device update events only when Spec.Paused changes
- Ignores Generic events for Device watches
- Uses deviceTo* map functions to find associated resources by label
@felix-kaestner felix-kaestner merged commit 145dc1e into main Mar 4, 2026
10 checks passed
@felix-kaestner felix-kaestner deleted the pause branch March 4, 2026 09:56
@github-project-automation github-project-automation bot moved this to Done in Roadmap Mar 4, 2026
@github-actions
Copy link

github-actions bot commented Mar 4, 2026

Merging this branch changes the coverage (2 decrease, 1 increase)

Impacted Packages Coverage Δ 🤖
github.com/ironcore-dev/network-operator/api/core/v1alpha1 0.00% (ø)
github.com/ironcore-dev/network-operator/cmd 0.00% (ø)
github.com/ironcore-dev/network-operator/internal/annotations 100.00% (+100.00%) 🌟
github.com/ironcore-dev/network-operator/internal/controller/cisco/nx 62.96% (-1.32%) 👎
github.com/ironcore-dev/network-operator/internal/controller/core 62.22% (-4.01%) 👎

Coverage by file

Changed files (no unit tests)

Changed File Coverage Δ Total Covered Missed 🤖
github.com/ironcore-dev/network-operator/api/core/v1alpha1/device_types.go 0.00% (ø) 0 0 0
github.com/ironcore-dev/network-operator/api/core/v1alpha1/groupversion_info.go 0.00% (ø) 0 0 0
github.com/ironcore-dev/network-operator/api/core/v1alpha1/zz_generated.deepcopy.go 0.00% (ø) 0 0 0
github.com/ironcore-dev/network-operator/cmd/main.go 0.00% (ø) 0 0 0
github.com/ironcore-dev/network-operator/internal/annotations/annotations.go 100.00% (+100.00%) 4 (+4) 4 (+4) 0 🌟
github.com/ironcore-dev/network-operator/internal/controller/cisco/nx/bordergateway_controller.go 51.91% (+0.29%) 235 (+20) 122 (+11) 113 (+9) 👍
github.com/ironcore-dev/network-operator/internal/controller/cisco/nx/system_controller.go 63.48% (-1.78%) 115 (+20) 73 (+11) 42 (+9) 👎
github.com/ironcore-dev/network-operator/internal/controller/cisco/nx/vpcdomain_controller.go 74.22% (-2.85%) 225 (+20) 167 (+9) 58 (+11) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/acl_controller.go 58.57% (-5.51%) 140 (+37) 82 (+16) 58 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/banner_controller.go 58.33% (-4.26%) 168 (+37) 98 (+16) 70 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/bgp_controller.go 58.57% (-5.51%) 140 (+37) 82 (+16) 58 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/bgp_peer_controller.go 64.97% (-7.17%) 177 (+37) 115 (+14) 62 (+23) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/certificate_controller.go 58.44% (-4.81%) 154 (+37) 90 (+16) 64 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/device_controller.go 64.56% (+4.46%) 206 (+3) 133 (+11) 73 (-8) 👍
github.com/ironcore-dev/network-operator/internal/controller/core/dns_controller.go 58.39% (-5.61%) 137 (+37) 80 (+16) 57 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/evpninstance_controller.go 67.63% (-6.48%) 207 (+37) 140 (+14) 67 (+23) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/interface_controller.go 75.00% (-0.81%) 392 (+20) 294 (+12) 98 (+8) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/isis_controller.go 56.38% (-4.34%) 149 (+37) 84 (+16) 65 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/managementaccess_controller.go 58.39% (+1.98%) 137 (+20) 80 (+14) 57 (+6) 👍
github.com/ironcore-dev/network-operator/internal/controller/core/ntp_controller.go 58.39% (-5.61%) 137 (+37) 80 (+16) 57 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/nve_controller.go 67.58% (-0.26%) 219 (+20) 148 (+13) 71 (+7) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/ospf_controller.go 56.11% (-3.33%) 180 (+37) 101 (+16) 79 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/pim_controller.go 56.38% (-4.34%) 149 (+37) 84 (+16) 65 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/prefixset_controller.go 62.14% (-6.79%) 140 (+37) 87 (+16) 53 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/routingpolicy_controller.go 65.26% (-6.63%) 190 (+37) 124 (+14) 66 (+23) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/snmp_controller.go 58.39% (-5.61%) 137 (+37) 80 (+16) 57 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/syslog_controller.go 58.57% (-5.51%) 140 (+37) 82 (+16) 58 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/user_controller.go 57.14% (-3.93%) 168 (+37) 96 (+16) 72 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/vlan_controller.go 61.33% (-5.92%) 150 (+37) 92 (+16) 58 (+21) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/vrf_controller.go 61.27% (-6.35%) 142 (+37) 87 (+16) 55 (+21) 👎

Please note that the "Total", "Covered", and "Missed" counts above refer to code statements instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/metal-automation Automation processes within the Metal project.

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants

Morty Proxy This is a proxified and sanitized view of the page, visit original site.