Skip to content

Scaffold EVPN Fabric Resource and Controller#328

Open
felix-kaestner wants to merge 1 commit into
numbered-resourcesfrom
fabric-crd
Open

Scaffold EVPN Fabric Resource and Controller#328
felix-kaestner wants to merge 1 commit into
numbered-resourcesfrom
fabric-crd

Conversation

@felix-kaestner

Copy link
Copy Markdown
Contributor

This high-level CRD will take care of creating and managing all low-level resources that are required to build a EVPN VXLAN resource.

Its controller implementation is intentionally left empty to a large extend to be extended by future changes. The setup constructs a list of sub-reconciler functions that are called in sequence to build up the full lifecycle of the Fabric.

@hardikdr hardikdr added the area/switch-automation Automation processes for network switch management and operations. label Apr 29, 2026
@hardikdr hardikdr added this to Roadmap Apr 29, 2026
@felix-kaestner felix-kaestner force-pushed the numbered-resources branch 5 times, most recently from 7242b1a to 2ac3738 Compare May 4, 2026 08:46
@felix-kaestner felix-kaestner marked this pull request as ready for review May 4, 2026 13:30
@felix-kaestner felix-kaestner requested a review from a team as a code owner May 4, 2026 13:30
@felix-kaestner felix-kaestner force-pushed the numbered-resources branch 2 times, most recently from 866f5e6 to 012e6c0 Compare May 11, 2026 12:15
This high-level CRD will take care of creating and managing all
low-level resources that are required to build a EVPN VXLAN resource.

Its controller implementation is intentionally left empty to a large
extend to be extended by future changes. The setup constructs a list of
sub-reconciler functions that are called in sequence to build up the
full lifecycle of the `Fabric`.

Signed-off-by: Felix Kästner <felix.kaestner@sap.com>

@nikatza nikatza left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me :) The API is self-contained and explanatory, conventions also (the Unnumbered bool had let me thinking for a bit), the reconciler logic is also fitting for the purpose of this PR.

Before we merge I would like to sync on this issue: I am wondering if we would want to have a more modular and extendable design for the fabric type. For example, by default we could have a "plain routed" fabric with just deviceSelector, loopbacks, and underlay. Then, we could extend it with references to a specialized type, similar to what we do with the core types. Like this we could have support different fabrics, ike the current EVPN-VXLAN, EVPN MPLS, etc. Some of these fabrics would be reusing some types.

Obviously the evpn self-contained group is quite appealing too and eventually also the straight-forward way to go.

Thanks for opening this PR, looking forward 🚀

Comment on lines +13 to +14
// FabricSpec defines the desired state of Fabric.
type FabricSpec struct {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I quite like this API definition, it is straightforward and self-explanatory. I think thought, that there are some assumptions being made and that are not clear/documented: e.g., one device and all sub-resources belong to just one fabric. Either if this holds of not, I think we would benefit from either adding a concept, or extending its documentation.

// deviceSelector identifies which devices are members of this fabric.
// All devices whose labels match this selector will be enrolled.
// +required
DeviceSelector metav1.LabelSelector `json:"deviceSelector"`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We currently wouldn't prevent a user defining two fabrics, with label selectors that intersect on some devices. This would result in a competition for the sub-resources and would potentially lead to an outage. At the same time, I understand that if we support two fabrics, some devices might actually need to be in both. I think the question in that case is, how do we ensure that a single brick is indirectly managed by just one fabric? should we also label the sub resources?

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown

This PR is stale because it has been open for 45 days with no activity.

@github-actions github-actions Bot added the stale label Jul 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/switch-automation Automation processes for network switch management and operations. size/XXL

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

3 participants