Skip to content

Add pause reconciliation support for Device and associated resources#183

Open
felix-kaestner wants to merge 4 commits intomainfrom
pause
Open

Add pause reconciliation support for Device and associated resources#183
felix-kaestner wants to merge 4 commits intomainfrom
pause

Conversation

@felix-kaestner
Copy link
Contributor

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.

@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 4 times, most recently from 0ac30a1 to b981f25 Compare February 16, 2026 13:56
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.
@github-actions
Copy link

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 63.57% (-0.91%) 👎
github.com/ironcore-dev/network-operator/internal/controller/core 61.20% (-5.80%) 👎

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.60% (-0.25%) 219 (+3) 113 (+1) 106 (+2) 👎
github.com/ironcore-dev/network-operator/internal/controller/cisco/nx/system_controller.go 64.65% (-0.98%) 99 (+3) 64 (+1) 35 (+2) 👎
github.com/ironcore-dev/network-operator/internal/controller/cisco/nx/vpcdomain_controller.go 75.60% (-1.59%) 209 (+3) 158 (-1) 51 (+4) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/acl_controller.go 56.45% (-7.97%) 124 (+20) 70 (+3) 54 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/banner_controller.go 56.58% (-7.06%) 152 (+20) 86 (+2) 66 (+18) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/bgp_controller.go 56.45% (-7.97%) 124 (+20) 70 (+3) 54 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/bgp_peer_controller.go 65.22% (-7.12%) 161 (+20) 105 (+3) 56 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/certificate_controller.go 56.52% (-7.04%) 138 (+20) 78 (+3) 60 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/device_controller.go 62.09% (-5.06%) 211 (+1) 131 (-10) 80 (+11) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/dns_controller.go 56.20% (-8.16%) 121 (+20) 68 (+3) 53 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/evpninstance_controller.go 68.06% (-6.21%) 191 (+20) 130 (+3) 61 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/interface_controller.go 75.00% (-0.87%) 376 (+3) 282 (-1) 94 (+4) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/isis_controller.go 54.14% (-6.93%) 133 (+20) 72 (+3) 61 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/managementaccess_controller.go 56.20% (-0.58%) 121 (+3) 68 (+1) 53 (+2) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/ntp_controller.go 56.20% (-8.16%) 121 (+20) 68 (+3) 53 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/nve_controller.go 68.47% (-0.03%) 203 (+3) 139 (+2) 64 (+1) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/ospf_controller.go 54.27% (-5.45%) 164 (+20) 89 (+3) 75 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/pim_controller.go 54.14% (-6.93%) 133 (+20) 72 (+3) 61 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/prefixset_controller.go 60.48% (-8.75%) 124 (+20) 75 (+3) 49 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/routingpolicy_controller.go 65.52% (-6.56%) 174 (+20) 114 (+3) 60 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/snmp_controller.go 56.20% (-8.16%) 121 (+20) 68 (+3) 53 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/syslog_controller.go 56.45% (-7.97%) 124 (+20) 70 (+3) 54 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/user_controller.go 55.26% (-6.10%) 152 (+20) 84 (+3) 68 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/vlan_controller.go 59.70% (-7.84%) 134 (+20) 80 (+3) 54 (+17) 👎
github.com/ironcore-dev/network-operator/internal/controller/core/vrf_controller.go 62.70% (-5.23%) 126 (+20) 79 (+7) 47 (+13) 👎

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: No status

Development

Successfully merging this pull request may close these issues.

2 participants