Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# IDEs
.vscode

# Binaries for programs and plugins
*.exe
*.exe~
Expand Down
62 changes: 62 additions & 0 deletions api/v1alpha1/networktopologyprovider_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright (c) 2026 Broadcom. All Rights Reserved.
// Broadcom Confidential. The term "Broadcom" refers to Broadcom Inc.
// and/or its subsidiaries.

package v1alpha1

import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

type NetworkTopologyProviderReference struct {
// APIGroup is the group for the resource being referenced.
APIGroup string `json:"apiGroup"`
// Kind is the type of resource being referenced.
Kind string `json:"kind"`
// Name is the name of resource being referenced.
Name string `json:"name"`
// API version of the referent.
APIVersion string `json:"apiVersion,omitempty"`
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.

Does this not already include the APIGroup ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I have dropped this in favor of upstream and generic TypedObjectReference, which does not include apiVersion. I do not think the concrete version specification is necessary. I am open to feedback here.

}

type NetworkTopologyProviderType string

const (
// NetworkTopologyProviderTypeNSXT is the provider type for NSX Container Plugin Tier1-per-namespace network
// topology.
NetworkTopologyProviderTypeNSXT NetworkTopologyProviderType = "nsx-t"
// NetworkTopologyProviderTypeVDS is the provider type for vSphere Networking topology.
NetworkTopologyProviderTypeVDS NetworkTopologyProviderType = "vsphere-distributed"
// NetworkTopologyProviderTypeNSXTVPC is the provider type for NSX-T VPC network topology.
NetworkTopologyProviderTypeNSXTVPC NetworkTopologyProviderType = "nsx-t_vpc"
)

type NetworkTopologyProviderSpec struct {
// Type describes type of network topology provider.
// +kubebuilder:validation:Enum=nsx_container_plugin;vsphere_network;nsx_vpc
Type NetworkTopologyProviderType `json:"type"`
Comment thread
yahhhya marked this conversation as resolved.
Outdated
// ProviderRef is reference to a network topology provider object that provides the details for this type of network topology provider
ProviderRef NetworkTopologyProviderReference `json:"providerRef"`
}

// +genclient
// +kubebuilder:object:root=true

// NetworkTopologyProvider is the Schema for the networktopologyproviders API.
// A NetworkTopologyProvider represents a network topology provider configuration.
type NetworkTopologyProvider struct {
Comment thread
yahhhya marked this conversation as resolved.
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec NetworkTopologyProviderSpec `json:"spec,omitempty"`
}

// +kubebuilder:object:root=true

type NetworkTopologyProviderList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []NetworkTopologyProvider `json:"items"`
}

func init() {
RegisterTypeWithScheme(&NetworkTopologyProvider{}, &NetworkTopologyProviderList{})
}
54 changes: 54 additions & 0 deletions api/v1alpha1/nsxtnetworktopologyprovider_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// Copyright (c) 2026 Broadcom. All Rights Reserved.
// Broadcom Confidential. The term "Broadcom" refers to Broadcom Inc.
// and/or its subsidiaries.

package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// +kubebuilder:resource:path=nsxtnetworktopologyproviders,singular=nsxtnetworktopologyprovider,shortName=nsxtntp
type NSXTNetworkTopologyProviderSpec struct {
// PodCidrs specifies the CIDR blocks for Pod networking.
PodCidrs []string `json:"podCidrs,omitempty"`
// IngressCidrs specifies the CIDR blocks for ingress traffic.
IngressCidrs []string `json:"ingressCidrs,omitempty"`
// EgressCidrs specifies the CIDR blocks for egress traffic.
EgressCidrs []string `json:"egressCidrs,omitempty"`
// ClusterDistributedSwitch is the vSphere Distributed Switch used for the cluster.
ClusterDistributedSwitch *string `json:"clusterDistributedSwitch,omitempty"`
// NsxEdgeCluster is the NSX-T Edge Cluster ID.
NsxEdgeCluster *string `json:"nsxEdgeCluster,omitempty"`
// NsxTier0Gateway is the NSX-T Tier-0 gateway path used for the Supervisor's Tier-1 gateway uplink.
NsxTier0Gateway *string `json:"nsxTier0Gateway,omitempty"`
// NamespaceSubnetPrefix is the subnet prefix size for namespaces.
NamespaceSubnetPrefix *int32 `json:"namespaceSubnetPrefix,omitempty"`
// RoutedMode indicates whether routed mode is enabled.
RoutedMode *bool `json:"routedMode,omitempty"`
}

// +genclient
// +kubebuilder:object:root=true

// NSXTNetworkTopologyProvider is the Schema for the nsxtnetworktopologyproviders API.
// A NSXTNetworkTopologyProvider represents a topology provider for NSX-T networks for a Supervisor.
type NSXTNetworkTopologyProvider struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec NSXTNetworkTopologyProviderSpec `json:"spec,omitempty"`
}

// +kubebuilder:object:root=true

// NSXTNetworkTopologyProviderList contains a list of NSXTNetworkTopologyProvider.
type NSXTNetworkTopologyProviderList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []NSXTNetworkTopologyProvider `json:"items"`
}

func init() {
RegisterTypeWithScheme(&NSXTNetworkTopologyProvider{}, &NSXTNetworkTopologyProviderList{})
}
49 changes: 49 additions & 0 deletions api/v1alpha1/nsxtvpcnetworktopologyprovider_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright (c) 2026 Broadcom. All Rights Reserved.
// Broadcom Confidential. The term "Broadcom" refers to Broadcom Inc.
// and/or its subsidiaries.

package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// +kubebuilder:resource:path=nsxtvpcnetworktopologyproviders,singular=nsxtvpcnetworktopologyprovider,shortName=nstp
Comment thread
yahhhya marked this conversation as resolved.
Outdated
type NSXTVPCNetworkTopologyProviderSpec struct {
// NsxProject is the default Project for VPCs in the Supervisor, including the System VPC, and Supervisor Services
// VPC. It needs to be NSX path of Project.
NsxProject *string `json:"nsxProject,omitempty"`
// VpcConnectivityProfile is the configuration for how a VPC is constructed, including it's Transit Gateway
// Attachments, IP blocks, and other settings on NSX. It needs to be NSX path of VPC Connectivity Profile.
VpcConnectivityProfile *string `json:"vpcConnectivityProfile,omitempty"`
// DefaultPrivateCidrs specifies CIDR blocks from which private subnets are allocated. This range must not overlap
// with those in VpcConnectivityProfile, the Supervisor's Service CIDR, or other services running in the datacenter.
// You must have at least one CIDR of size 16 or larger to enable Supervisor with VPC networking.
// If Avi is used, another CIDR of size 64 is needed.
DefaultPrivateCidrs []string `json:"defaultPrivateCidrs,omitempty"`
}

// +genclient
// +kubebuilder:object:root=true

// NSXTVPCNetworkTopologyProvider is the Schema for the nsxtvpcnetworktopologyproviders API.
// A NSXTVPCNetworkTopologyProvider represents a topology provider for NSX VPC networks for a Supervisor.
type NSXTVPCNetworkTopologyProvider struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec NSXTVPCNetworkTopologyProviderSpec `json:"spec,omitempty"`
}

// +kubebuilder:object:root=true

// NSXTVPCNetworkTopologyProviderList contains a list of NSXTVPCNetworkTopologyProvider.
type NSXTVPCNetworkTopologyProviderList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []NSXTVPCNetworkTopologyProvider `json:"items"`
}

func init() {
RegisterTypeWithScheme(&NSXTVPCNetworkTopologyProvider{}, &NSXTVPCNetworkTopologyProviderList{})
}
39 changes: 39 additions & 0 deletions api/v1alpha1/vspheredistributednetworktopologyprovider_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Copyright (c) 2026 Broadcom. All Rights Reserved.
// Broadcom Confidential. The term "Broadcom" refers to Broadcom Inc.
// and/or its subsidiaries.

package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// +kubebuilder:resource:path=vspheredistributednetworktopologyproviders,singular=vspheredistributednetworktopologyprovider,shortName=vsdntp
type VSphereDistributedNetworkTopologyProviderSpec struct {
// TODO: placeholder. Unclear if anything is needed here.
}

// +genclient
// +kubebuilder:object:root=true

// VSphereDistributedNetworkTopologyProvider is the Schema for the vspheredistributednetworktopologyproviders API.
// A VSphereDistributedNetworkTopologyProvider represents a topology provider for vSphere distributed networks for a Supervisor.
type VSphereDistributedNetworkTopologyProvider struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec VSphereDistributedNetworkTopologyProviderSpec `json:"spec,omitempty"`
}

// +kubebuilder:object:root=true

// VSphereDistributedNetworkTopologyProviderList contains a list of VSphereDistributedNetworkTopologyProvider.
type VSphereDistributedNetworkTopologyProviderList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []VSphereDistributedNetworkTopologyProvider `json:"items"`
}

func init() {
RegisterTypeWithScheme(&VSphereDistributedNetworkTopologyProvider{}, &VSphereDistributedNetworkTopologyProviderList{})
}
Loading