From 7fcbb72e1dfbed7b6d947666981d8e770d606f79 Mon Sep 17 00:00:00 2001 From: Yahya Cahyadi Date: Tue, 17 Mar 2026 15:02:11 -0700 Subject: [PATCH 1/4] [VKAL-36509] NetworkTopologyProvider CRDs This PR introduces the NetworkTopologyProvider CRD framework for vSphere Supervisor networking configuration. A NetworkTopologyProvider Custom Resource represents the type of Network Topology supported by this Supervisor. The term 'topology' is used to avoid terminology conflict with notion of 'network provider' inside a Network CR, which represents (loosely) the vim network backing the Supervisor Network object. 3 different providers exist, but not all 3 providers may be supported by every Supervisor at a given time. These providers include: - nsx_container_plugin: Tier-1 gateways per namespace - nsx_vpc: VPC topology for Supervisor. - vsphere_networking vSphere: VDS-backed networking Changes Add base NetworkTopologyProvider CRD with type enum and provider reference Add NCPNetworkTopologyProvider for NSX Container Plugin (Tier-1 per namespace) topology Add NSXTVPCNetworkTopologyProvider for NSX VPC topology Add VSphereNetworkTopologyProvider for vSphere Distributed Switch topology Fix hack/client-gen.sh to work with Go 1.18+ module mode by adding --output-base flag --- .gitignore | 3 + .../ncpnetworktopologyprovider_types.go | 54 +++ api/v1alpha1/networktopologyprovider_types.go | 62 +++ .../nsxtvpcnetworktopologyprovider_types.go | 49 +++ .../vspherenetworktopologyprovider_types.go | 39 ++ api/v1alpha1/zz_generated.deepcopy.go | 363 ++++++++++++++++++ hack/client-gen.sh | 6 +- 7 files changed, 573 insertions(+), 3 deletions(-) create mode 100644 api/v1alpha1/ncpnetworktopologyprovider_types.go create mode 100644 api/v1alpha1/networktopologyprovider_types.go create mode 100644 api/v1alpha1/nsxtvpcnetworktopologyprovider_types.go create mode 100644 api/v1alpha1/vspherenetworktopologyprovider_types.go diff --git a/.gitignore b/.gitignore index 1556469..1692fa8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# IDEs +.vscode + # Binaries for programs and plugins *.exe *.exe~ diff --git a/api/v1alpha1/ncpnetworktopologyprovider_types.go b/api/v1alpha1/ncpnetworktopologyprovider_types.go new file mode 100644 index 0000000..267662a --- /dev/null +++ b/api/v1alpha1/ncpnetworktopologyprovider_types.go @@ -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=ncpnetworktopologyproviders,singular=ncpnetworktopologyprovider,shortName=ncpntp +type NCPNetworkTopologyProviderSpec 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 + +// NCPNetworkTopologyProvider is the Schema for the ncpnetworktopologyproviders API. +// A NCPNetworkTopologyProvider represents a topology provider for NSX Container Plugin networks for a Supervisor. +type NCPNetworkTopologyProvider struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec NCPNetworkTopologyProviderSpec `json:"spec,omitempty"` +} + +// +kubebuilder:object:root=true + +// NCPNetworkTopologyProviderList contains a list of NCPNetworkTopologyProvider. +type NCPNetworkTopologyProviderList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []NCPNetworkTopologyProvider `json:"items"` +} + +func init() { + RegisterTypeWithScheme(&NCPNetworkTopologyProvider{}, &NCPNetworkTopologyProviderList{}) +} diff --git a/api/v1alpha1/networktopologyprovider_types.go b/api/v1alpha1/networktopologyprovider_types.go new file mode 100644 index 0000000..9cc567e --- /dev/null +++ b/api/v1alpha1/networktopologyprovider_types.go @@ -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"` +} + +type NetworkTopologyProviderType string + +const ( + // NetworkTopologyProviderTypeNSXT is the provider type for NSX Container Plugin Tier1-per-namespace network + // topology. + NetworkTopologyProviderTypeNSXT NetworkTopologyProviderType = "nsx_container_plugin" + // NetworkTopologyProviderTypeVDS is the provider type for vSphere Networking topology. + NetworkTopologyProviderTypeVDS NetworkTopologyProviderType = "vsphere_network" + // NetworkTopologyProviderTypeNSXTVPC is the provider type for NSX-T VPC network topology. + NetworkTopologyProviderTypeNSXTVPC NetworkTopologyProviderType = "nsx_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"` + // 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 { + 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{}) +} diff --git a/api/v1alpha1/nsxtvpcnetworktopologyprovider_types.go b/api/v1alpha1/nsxtvpcnetworktopologyprovider_types.go new file mode 100644 index 0000000..6df0779 --- /dev/null +++ b/api/v1alpha1/nsxtvpcnetworktopologyprovider_types.go @@ -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 +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{}) +} diff --git a/api/v1alpha1/vspherenetworktopologyprovider_types.go b/api/v1alpha1/vspherenetworktopologyprovider_types.go new file mode 100644 index 0000000..12e5b0e --- /dev/null +++ b/api/v1alpha1/vspherenetworktopologyprovider_types.go @@ -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=vspherenetworktopologyproviders,singular=vspherenetworktopologyprovider,shortName=vsntp +type VSphereNetworkTopologyProviderSpec struct { + // TODO: placeholder. Unclear if anything is needed here. +} + +// +genclient +// +kubebuilder:object:root=true + +// VSphereNetworkTopologyProvider is the Schema for the vspherenetworktopologyproviders API. +// A VSphereNetworkTopologyProvider represents a topology provider for vSphere distributed networks for a Supervisor. +type VSphereNetworkTopologyProvider struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec VSphereNetworkTopologyProviderSpec `json:"spec,omitempty"` +} + +// +kubebuilder:object:root=true + +// VSphereNetworkTopologyProviderList contains a list of VSphereNetworkTopologyProvider. +type VSphereNetworkTopologyProviderList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []VSphereNetworkTopologyProvider `json:"items"` +} + +func init() { + RegisterTypeWithScheme(&VSphereNetworkTopologyProvider{}, &VSphereNetworkTopologyProviderList{}) +} diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 880c573..13a31b0 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -893,6 +893,207 @@ func (in *MacManagementPolicy) DeepCopy() *MacManagementPolicy { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NCPNetworkTopologyProvider) DeepCopyInto(out *NCPNetworkTopologyProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NCPNetworkTopologyProvider. +func (in *NCPNetworkTopologyProvider) DeepCopy() *NCPNetworkTopologyProvider { + if in == nil { + return nil + } + out := new(NCPNetworkTopologyProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NCPNetworkTopologyProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NCPNetworkTopologyProviderList) DeepCopyInto(out *NCPNetworkTopologyProviderList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NCPNetworkTopologyProvider, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NCPNetworkTopologyProviderList. +func (in *NCPNetworkTopologyProviderList) DeepCopy() *NCPNetworkTopologyProviderList { + if in == nil { + return nil + } + out := new(NCPNetworkTopologyProviderList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NCPNetworkTopologyProviderList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NCPNetworkTopologyProviderSpec) DeepCopyInto(out *NCPNetworkTopologyProviderSpec) { + *out = *in + if in.PodCidrs != nil { + in, out := &in.PodCidrs, &out.PodCidrs + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.IngressCidrs != nil { + in, out := &in.IngressCidrs, &out.IngressCidrs + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.EgressCidrs != nil { + in, out := &in.EgressCidrs, &out.EgressCidrs + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.ClusterDistributedSwitch != nil { + in, out := &in.ClusterDistributedSwitch, &out.ClusterDistributedSwitch + *out = new(string) + **out = **in + } + if in.NsxEdgeCluster != nil { + in, out := &in.NsxEdgeCluster, &out.NsxEdgeCluster + *out = new(string) + **out = **in + } + if in.NsxTier0Gateway != nil { + in, out := &in.NsxTier0Gateway, &out.NsxTier0Gateway + *out = new(string) + **out = **in + } + if in.NamespaceSubnetPrefix != nil { + in, out := &in.NamespaceSubnetPrefix, &out.NamespaceSubnetPrefix + *out = new(int32) + **out = **in + } + if in.RoutedMode != nil { + in, out := &in.RoutedMode, &out.RoutedMode + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NCPNetworkTopologyProviderSpec. +func (in *NCPNetworkTopologyProviderSpec) DeepCopy() *NCPNetworkTopologyProviderSpec { + if in == nil { + return nil + } + out := new(NCPNetworkTopologyProviderSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NSXTVPCNetworkTopologyProvider) DeepCopyInto(out *NSXTVPCNetworkTopologyProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NSXTVPCNetworkTopologyProvider. +func (in *NSXTVPCNetworkTopologyProvider) DeepCopy() *NSXTVPCNetworkTopologyProvider { + if in == nil { + return nil + } + out := new(NSXTVPCNetworkTopologyProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NSXTVPCNetworkTopologyProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NSXTVPCNetworkTopologyProviderList) DeepCopyInto(out *NSXTVPCNetworkTopologyProviderList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NSXTVPCNetworkTopologyProvider, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NSXTVPCNetworkTopologyProviderList. +func (in *NSXTVPCNetworkTopologyProviderList) DeepCopy() *NSXTVPCNetworkTopologyProviderList { + if in == nil { + return nil + } + out := new(NSXTVPCNetworkTopologyProviderList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NSXTVPCNetworkTopologyProviderList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NSXTVPCNetworkTopologyProviderSpec) DeepCopyInto(out *NSXTVPCNetworkTopologyProviderSpec) { + *out = *in + if in.NsxProject != nil { + in, out := &in.NsxProject, &out.NsxProject + *out = new(string) + **out = **in + } + if in.VpcConnectivityProfile != nil { + in, out := &in.VpcConnectivityProfile, &out.VpcConnectivityProfile + *out = new(string) + **out = **in + } + if in.DefaultPrivateCidrs != nil { + in, out := &in.DefaultPrivateCidrs, &out.DefaultPrivateCidrs + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NSXTVPCNetworkTopologyProviderSpec. +func (in *NSXTVPCNetworkTopologyProviderSpec) DeepCopy() *NSXTVPCNetworkTopologyProviderSpec { + if in == nil { + return nil + } + out := new(NSXTVPCNetworkTopologyProviderSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Network) DeepCopyInto(out *Network) { *out = *in @@ -1230,6 +1431,95 @@ func (in *NetworkStatus) DeepCopy() *NetworkStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkTopologyProvider) DeepCopyInto(out *NetworkTopologyProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkTopologyProvider. +func (in *NetworkTopologyProvider) DeepCopy() *NetworkTopologyProvider { + if in == nil { + return nil + } + out := new(NetworkTopologyProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NetworkTopologyProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkTopologyProviderList) DeepCopyInto(out *NetworkTopologyProviderList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NetworkTopologyProvider, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkTopologyProviderList. +func (in *NetworkTopologyProviderList) DeepCopy() *NetworkTopologyProviderList { + if in == nil { + return nil + } + out := new(NetworkTopologyProviderList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NetworkTopologyProviderList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkTopologyProviderReference) DeepCopyInto(out *NetworkTopologyProviderReference) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkTopologyProviderReference. +func (in *NetworkTopologyProviderReference) DeepCopy() *NetworkTopologyProviderReference { + if in == nil { + return nil + } + out := new(NetworkTopologyProviderReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkTopologyProviderSpec) DeepCopyInto(out *NetworkTopologyProviderSpec) { + *out = *in + out.ProviderRef = in.ProviderRef +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkTopologyProviderSpec. +func (in *NetworkTopologyProviderSpec) DeepCopy() *NetworkTopologyProviderSpec { + if in == nil { + return nil + } + out := new(NetworkTopologyProviderSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SingleNodeAvailabilityMode) DeepCopyInto(out *SingleNodeAvailabilityMode) { *out = *in @@ -1501,6 +1791,79 @@ func (in *VSphereDistributedPortConfig) DeepCopy() *VSphereDistributedPortConfig return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VSphereNetworkTopologyProvider) DeepCopyInto(out *VSphereNetworkTopologyProvider) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSphereNetworkTopologyProvider. +func (in *VSphereNetworkTopologyProvider) DeepCopy() *VSphereNetworkTopologyProvider { + if in == nil { + return nil + } + out := new(VSphereNetworkTopologyProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *VSphereNetworkTopologyProvider) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VSphereNetworkTopologyProviderList) DeepCopyInto(out *VSphereNetworkTopologyProviderList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]VSphereNetworkTopologyProvider, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSphereNetworkTopologyProviderList. +func (in *VSphereNetworkTopologyProviderList) DeepCopy() *VSphereNetworkTopologyProviderList { + if in == nil { + return nil + } + out := new(VSphereNetworkTopologyProviderList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *VSphereNetworkTopologyProviderList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VSphereNetworkTopologyProviderSpec) DeepCopyInto(out *VSphereNetworkTopologyProviderSpec) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSphereNetworkTopologyProviderSpec. +func (in *VSphereNetworkTopologyProviderSpec) DeepCopy() *VSphereNetworkTopologyProviderSpec { + if in == nil { + return nil + } + out := new(VSphereNetworkTopologyProviderSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VirtualIPPoolsUtilization) DeepCopyInto(out *VirtualIPPoolsUtilization) { *out = *in diff --git a/hack/client-gen.sh b/hack/client-gen.sh index aea066b..9260486 100755 --- a/hack/client-gen.sh +++ b/hack/client-gen.sh @@ -17,14 +17,14 @@ CLIENTSET_NAME=clientset HEADER_FILE=hack/boilerplate/boilerplate.go.txt $TOOLS_PATH/client-gen --go-header-file $HEADER_FILE --input-base $PKG/api --input /$VERSION \ - --clientset-path $CLIENTGEN_PATH --clientset-name $CLIENTSET_NAME + --clientset-path $CLIENTGEN_PATH --clientset-name $CLIENTSET_NAME --output-base $TOPLEVEL mv $TOPLEVEL/$PKG/pkg/client/clientset_generated/clientset/typed/v1alpha1/_client.go $TOPLEVEL/$PKG/pkg/client/clientset_generated/clientset/typed/v1alpha1/client.go -$TOOLS_PATH/lister-gen --input-dirs $PKG/api/$VERSION --go-header-file $HEADER_FILE --output-package $LISTERGEN_PATH +$TOOLS_PATH/lister-gen --input-dirs $PKG/api/$VERSION --go-header-file $HEADER_FILE --output-package $LISTERGEN_PATH --output-base $TOPLEVEL $TOOLS_PATH/informer-gen --single-directory --input-dirs $PKG/api/$VERSION --go-header-file $HEADER_FILE \ - --output-package $INFORMERGEN_PATH --listers-package $LISTERGEN_PATH --versioned-clientset-package $CLIENTGEN_PATH/$CLIENTSET_NAME + --output-package $INFORMERGEN_PATH --listers-package $LISTERGEN_PATH --versioned-clientset-package $CLIENTGEN_PATH/$CLIENTSET_NAME --output-base $TOPLEVEL # Move to top level so that samples can consume the via the top-level import. # while taking care to avoid other artifacts potentially in pkg. From 1c9caaf53b61ae3bd2208e103e8b67c6554524a3 Mon Sep 17 00:00:00 2001 From: Yahya Cahyadi Date: Thu, 19 Mar 2026 13:11:37 -0700 Subject: [PATCH 2/4] fixed the provider type values to match network_types.go --- api/v1alpha1/networktopologyprovider_types.go | 6 +++--- ...ovider_types.go => nsxtnetworktopologyprovider_types.go} | 0 ...o => vspheredistributednetworktopologyprovider_types.go} | 0 3 files changed, 3 insertions(+), 3 deletions(-) rename api/v1alpha1/{ncpnetworktopologyprovider_types.go => nsxtnetworktopologyprovider_types.go} (100%) rename api/v1alpha1/{vspherenetworktopologyprovider_types.go => vspheredistributednetworktopologyprovider_types.go} (100%) diff --git a/api/v1alpha1/networktopologyprovider_types.go b/api/v1alpha1/networktopologyprovider_types.go index 9cc567e..35da1af 100644 --- a/api/v1alpha1/networktopologyprovider_types.go +++ b/api/v1alpha1/networktopologyprovider_types.go @@ -22,11 +22,11 @@ type NetworkTopologyProviderType string const ( // NetworkTopologyProviderTypeNSXT is the provider type for NSX Container Plugin Tier1-per-namespace network // topology. - NetworkTopologyProviderTypeNSXT NetworkTopologyProviderType = "nsx_container_plugin" + NetworkTopologyProviderTypeNSXT NetworkTopologyProviderType = "nsx-t" // NetworkTopologyProviderTypeVDS is the provider type for vSphere Networking topology. - NetworkTopologyProviderTypeVDS NetworkTopologyProviderType = "vsphere_network" + NetworkTopologyProviderTypeVDS NetworkTopologyProviderType = "vsphere-distributed" // NetworkTopologyProviderTypeNSXTVPC is the provider type for NSX-T VPC network topology. - NetworkTopologyProviderTypeNSXTVPC NetworkTopologyProviderType = "nsx_vpc" + NetworkTopologyProviderTypeNSXTVPC NetworkTopologyProviderType = "nsx-t_vpc" ) type NetworkTopologyProviderSpec struct { diff --git a/api/v1alpha1/ncpnetworktopologyprovider_types.go b/api/v1alpha1/nsxtnetworktopologyprovider_types.go similarity index 100% rename from api/v1alpha1/ncpnetworktopologyprovider_types.go rename to api/v1alpha1/nsxtnetworktopologyprovider_types.go diff --git a/api/v1alpha1/vspherenetworktopologyprovider_types.go b/api/v1alpha1/vspheredistributednetworktopologyprovider_types.go similarity index 100% rename from api/v1alpha1/vspherenetworktopologyprovider_types.go rename to api/v1alpha1/vspheredistributednetworktopologyprovider_types.go From bebd71e83ac8c7780c521f7f8521e570062f29a7 Mon Sep 17 00:00:00 2001 From: Yahya Cahyadi Date: Fri, 20 Mar 2026 11:48:54 -0700 Subject: [PATCH 3/4] renamed CRDs and structs to match types --- .../nsxtnetworktopologyprovider_types.go | 20 ++-- ...istributednetworktopologyprovider_types.go | 20 ++-- api/v1alpha1/zz_generated.deepcopy.go | 110 +++++++++--------- 3 files changed, 75 insertions(+), 75 deletions(-) diff --git a/api/v1alpha1/nsxtnetworktopologyprovider_types.go b/api/v1alpha1/nsxtnetworktopologyprovider_types.go index 267662a..eec8cd8 100644 --- a/api/v1alpha1/nsxtnetworktopologyprovider_types.go +++ b/api/v1alpha1/nsxtnetworktopologyprovider_types.go @@ -8,8 +8,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -// +kubebuilder:resource:path=ncpnetworktopologyproviders,singular=ncpnetworktopologyprovider,shortName=ncpntp -type NCPNetworkTopologyProviderSpec struct { +// +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. @@ -31,24 +31,24 @@ type NCPNetworkTopologyProviderSpec struct { // +genclient // +kubebuilder:object:root=true -// NCPNetworkTopologyProvider is the Schema for the ncpnetworktopologyproviders API. -// A NCPNetworkTopologyProvider represents a topology provider for NSX Container Plugin networks for a Supervisor. -type NCPNetworkTopologyProvider struct { +// 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 NCPNetworkTopologyProviderSpec `json:"spec,omitempty"` + Spec NSXTNetworkTopologyProviderSpec `json:"spec,omitempty"` } // +kubebuilder:object:root=true -// NCPNetworkTopologyProviderList contains a list of NCPNetworkTopologyProvider. -type NCPNetworkTopologyProviderList struct { +// NSXTNetworkTopologyProviderList contains a list of NSXTNetworkTopologyProvider. +type NSXTNetworkTopologyProviderList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` - Items []NCPNetworkTopologyProvider `json:"items"` + Items []NSXTNetworkTopologyProvider `json:"items"` } func init() { - RegisterTypeWithScheme(&NCPNetworkTopologyProvider{}, &NCPNetworkTopologyProviderList{}) + RegisterTypeWithScheme(&NSXTNetworkTopologyProvider{}, &NSXTNetworkTopologyProviderList{}) } diff --git a/api/v1alpha1/vspheredistributednetworktopologyprovider_types.go b/api/v1alpha1/vspheredistributednetworktopologyprovider_types.go index 12e5b0e..8eed26e 100644 --- a/api/v1alpha1/vspheredistributednetworktopologyprovider_types.go +++ b/api/v1alpha1/vspheredistributednetworktopologyprovider_types.go @@ -8,32 +8,32 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -// +kubebuilder:resource:path=vspherenetworktopologyproviders,singular=vspherenetworktopologyprovider,shortName=vsntp -type VSphereNetworkTopologyProviderSpec struct { +// +kubebuilder:resource:path=vspheredistributednetworktopologyproviders,singular=vspheredistributednetworktopologyprovider,shortName=vsdntp +type VSphereDistributedNetworkTopologyProviderSpec struct { // TODO: placeholder. Unclear if anything is needed here. } // +genclient // +kubebuilder:object:root=true -// VSphereNetworkTopologyProvider is the Schema for the vspherenetworktopologyproviders API. -// A VSphereNetworkTopologyProvider represents a topology provider for vSphere distributed networks for a Supervisor. -type VSphereNetworkTopologyProvider struct { +// 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 VSphereNetworkTopologyProviderSpec `json:"spec,omitempty"` + Spec VSphereDistributedNetworkTopologyProviderSpec `json:"spec,omitempty"` } // +kubebuilder:object:root=true -// VSphereNetworkTopologyProviderList contains a list of VSphereNetworkTopologyProvider. -type VSphereNetworkTopologyProviderList struct { +// VSphereDistributedNetworkTopologyProviderList contains a list of VSphereDistributedNetworkTopologyProvider. +type VSphereDistributedNetworkTopologyProviderList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` - Items []VSphereNetworkTopologyProvider `json:"items"` + Items []VSphereDistributedNetworkTopologyProvider `json:"items"` } func init() { - RegisterTypeWithScheme(&VSphereNetworkTopologyProvider{}, &VSphereNetworkTopologyProviderList{}) + RegisterTypeWithScheme(&VSphereDistributedNetworkTopologyProvider{}, &VSphereDistributedNetworkTopologyProviderList{}) } diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 13a31b0..fcb549c 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -894,25 +894,25 @@ func (in *MacManagementPolicy) DeepCopy() *MacManagementPolicy { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NCPNetworkTopologyProvider) DeepCopyInto(out *NCPNetworkTopologyProvider) { +func (in *NSXTNetworkTopologyProvider) DeepCopyInto(out *NSXTNetworkTopologyProvider) { *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NCPNetworkTopologyProvider. -func (in *NCPNetworkTopologyProvider) DeepCopy() *NCPNetworkTopologyProvider { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NSXTNetworkTopologyProvider. +func (in *NSXTNetworkTopologyProvider) DeepCopy() *NSXTNetworkTopologyProvider { if in == nil { return nil } - out := new(NCPNetworkTopologyProvider) + out := new(NSXTNetworkTopologyProvider) in.DeepCopyInto(out) return out } // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NCPNetworkTopologyProvider) DeepCopyObject() runtime.Object { +func (in *NSXTNetworkTopologyProvider) DeepCopyObject() runtime.Object { if c := in.DeepCopy(); c != nil { return c } @@ -920,31 +920,31 @@ func (in *NCPNetworkTopologyProvider) DeepCopyObject() runtime.Object { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NCPNetworkTopologyProviderList) DeepCopyInto(out *NCPNetworkTopologyProviderList) { +func (in *NSXTNetworkTopologyProviderList) DeepCopyInto(out *NSXTNetworkTopologyProviderList) { *out = *in out.TypeMeta = in.TypeMeta in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items - *out = make([]NCPNetworkTopologyProvider, len(*in)) + *out = make([]NSXTNetworkTopologyProvider, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NCPNetworkTopologyProviderList. -func (in *NCPNetworkTopologyProviderList) DeepCopy() *NCPNetworkTopologyProviderList { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NSXTNetworkTopologyProviderList. +func (in *NSXTNetworkTopologyProviderList) DeepCopy() *NSXTNetworkTopologyProviderList { if in == nil { return nil } - out := new(NCPNetworkTopologyProviderList) + out := new(NSXTNetworkTopologyProviderList) in.DeepCopyInto(out) return out } // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NCPNetworkTopologyProviderList) DeepCopyObject() runtime.Object { +func (in *NSXTNetworkTopologyProviderList) DeepCopyObject() runtime.Object { if c := in.DeepCopy(); c != nil { return c } @@ -952,7 +952,7 @@ func (in *NCPNetworkTopologyProviderList) DeepCopyObject() runtime.Object { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NCPNetworkTopologyProviderSpec) DeepCopyInto(out *NCPNetworkTopologyProviderSpec) { +func (in *NSXTNetworkTopologyProviderSpec) DeepCopyInto(out *NSXTNetworkTopologyProviderSpec) { *out = *in if in.PodCidrs != nil { in, out := &in.PodCidrs, &out.PodCidrs @@ -996,12 +996,12 @@ func (in *NCPNetworkTopologyProviderSpec) DeepCopyInto(out *NCPNetworkTopologyPr } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NCPNetworkTopologyProviderSpec. -func (in *NCPNetworkTopologyProviderSpec) DeepCopy() *NCPNetworkTopologyProviderSpec { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NSXTNetworkTopologyProviderSpec. +func (in *NSXTNetworkTopologyProviderSpec) DeepCopy() *NSXTNetworkTopologyProviderSpec { if in == nil { return nil } - out := new(NCPNetworkTopologyProviderSpec) + out := new(NSXTNetworkTopologyProviderSpec) in.DeepCopyInto(out) return out } @@ -1767,50 +1767,25 @@ func (in *VSphereDistributedNetworkStatus) DeepCopy() *VSphereDistributedNetwork } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VSphereDistributedPortConfig) DeepCopyInto(out *VSphereDistributedPortConfig) { - *out = *in - if in.Vlan != nil { - in, out := &in.Vlan, &out.Vlan - *out = new(VlanSpec) - (*in).DeepCopyInto(*out) - } - if in.MacManagementPolicy != nil { - in, out := &in.MacManagementPolicy, &out.MacManagementPolicy - *out = new(MacManagementPolicy) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSphereDistributedPortConfig. -func (in *VSphereDistributedPortConfig) DeepCopy() *VSphereDistributedPortConfig { - if in == nil { - return nil - } - out := new(VSphereDistributedPortConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VSphereNetworkTopologyProvider) DeepCopyInto(out *VSphereNetworkTopologyProvider) { +func (in *VSphereDistributedNetworkTopologyProvider) DeepCopyInto(out *VSphereDistributedNetworkTopologyProvider) { *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) out.Spec = in.Spec } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSphereNetworkTopologyProvider. -func (in *VSphereNetworkTopologyProvider) DeepCopy() *VSphereNetworkTopologyProvider { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSphereDistributedNetworkTopologyProvider. +func (in *VSphereDistributedNetworkTopologyProvider) DeepCopy() *VSphereDistributedNetworkTopologyProvider { if in == nil { return nil } - out := new(VSphereNetworkTopologyProvider) + out := new(VSphereDistributedNetworkTopologyProvider) in.DeepCopyInto(out) return out } // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *VSphereNetworkTopologyProvider) DeepCopyObject() runtime.Object { +func (in *VSphereDistributedNetworkTopologyProvider) DeepCopyObject() runtime.Object { if c := in.DeepCopy(); c != nil { return c } @@ -1818,31 +1793,31 @@ func (in *VSphereNetworkTopologyProvider) DeepCopyObject() runtime.Object { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VSphereNetworkTopologyProviderList) DeepCopyInto(out *VSphereNetworkTopologyProviderList) { +func (in *VSphereDistributedNetworkTopologyProviderList) DeepCopyInto(out *VSphereDistributedNetworkTopologyProviderList) { *out = *in out.TypeMeta = in.TypeMeta in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items - *out = make([]VSphereNetworkTopologyProvider, len(*in)) + *out = make([]VSphereDistributedNetworkTopologyProvider, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } } } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSphereNetworkTopologyProviderList. -func (in *VSphereNetworkTopologyProviderList) DeepCopy() *VSphereNetworkTopologyProviderList { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSphereDistributedNetworkTopologyProviderList. +func (in *VSphereDistributedNetworkTopologyProviderList) DeepCopy() *VSphereDistributedNetworkTopologyProviderList { if in == nil { return nil } - out := new(VSphereNetworkTopologyProviderList) + out := new(VSphereDistributedNetworkTopologyProviderList) in.DeepCopyInto(out) return out } // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *VSphereNetworkTopologyProviderList) DeepCopyObject() runtime.Object { +func (in *VSphereDistributedNetworkTopologyProviderList) DeepCopyObject() runtime.Object { if c := in.DeepCopy(); c != nil { return c } @@ -1850,16 +1825,41 @@ func (in *VSphereNetworkTopologyProviderList) DeepCopyObject() runtime.Object { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VSphereNetworkTopologyProviderSpec) DeepCopyInto(out *VSphereNetworkTopologyProviderSpec) { +func (in *VSphereDistributedNetworkTopologyProviderSpec) DeepCopyInto(out *VSphereDistributedNetworkTopologyProviderSpec) { *out = *in } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSphereNetworkTopologyProviderSpec. -func (in *VSphereNetworkTopologyProviderSpec) DeepCopy() *VSphereNetworkTopologyProviderSpec { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSphereDistributedNetworkTopologyProviderSpec. +func (in *VSphereDistributedNetworkTopologyProviderSpec) DeepCopy() *VSphereDistributedNetworkTopologyProviderSpec { if in == nil { return nil } - out := new(VSphereNetworkTopologyProviderSpec) + out := new(VSphereDistributedNetworkTopologyProviderSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VSphereDistributedPortConfig) DeepCopyInto(out *VSphereDistributedPortConfig) { + *out = *in + if in.Vlan != nil { + in, out := &in.Vlan, &out.Vlan + *out = new(VlanSpec) + (*in).DeepCopyInto(*out) + } + if in.MacManagementPolicy != nil { + in, out := &in.MacManagementPolicy, &out.MacManagementPolicy + *out = new(MacManagementPolicy) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VSphereDistributedPortConfig. +func (in *VSphereDistributedPortConfig) DeepCopy() *VSphereDistributedPortConfig { + if in == nil { + return nil + } + out := new(VSphereDistributedPortConfig) in.DeepCopyInto(out) return out } From 8acb27775378c7ed433c4fa6156c2e43cfdecb0c Mon Sep 17 00:00:00 2001 From: Yahya Cahyadi Date: Fri, 27 Mar 2026 15:33:29 -0700 Subject: [PATCH 4/4] Make NetworkTopologyProvider CRDs cluster-scoped and address PR feedback - Make all NetworkTopologyProvider types cluster-scoped (NetworkTopologyProvider, NSXTNetworkTopologyProvider, NSXTVPCNetworkTopologyProvider, VSphereDistributedNetworkTopologyProvider) - Remove +genclient markers to stop generating clientset/listers/informers - Rename NetworkTopologyProviderReference to TypedObjectReference and remove redundant APIVersion field (keep only APIGroup/Kind/Name per k8s conventions) - Rename NetworkTopologyProviderType to NetworkTopologyType for future reuse in NetworkTopology CRD - Standardize shortNames: ntp, nsxtntp, nsxtvpcntp, vdsntp - Fix kubebuilder validation enum to match actual type values --- api/v1alpha1/networktopologyprovider_types.go | 31 +++++++++---------- .../nsxtnetworktopologyprovider_types.go | 3 +- .../nsxtvpcnetworktopologyprovider_types.go | 3 +- ...istributednetworktopologyprovider_types.go | 3 +- api/v1alpha1/zz_generated.deepcopy.go | 26 ++++++++-------- 5 files changed, 30 insertions(+), 36 deletions(-) diff --git a/api/v1alpha1/networktopologyprovider_types.go b/api/v1alpha1/networktopologyprovider_types.go index 35da1af..43fd646 100644 --- a/api/v1alpha1/networktopologyprovider_types.go +++ b/api/v1alpha1/networktopologyprovider_types.go @@ -6,39 +6,36 @@ package v1alpha1 import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -type NetworkTopologyProviderReference struct { +type TypedObjectReference 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"` } -type NetworkTopologyProviderType string +type NetworkTopologyType 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" + // NetworkTopologyTypeNSXT is the type for NSX Container Plugin Tier1-per-namespace network topology. + NetworkTopologyTypeNSXT NetworkTopologyType = "nsx-t" + // NetworkTopologyTypeVDS is the type for vSphere Networking topology. + NetworkTopologyTypeVDS NetworkTopologyType = "vsphere-distributed" + // NetworkTopologyTypeNSXTVPC is the type for NSX-T VPC network topology. + NetworkTopologyTypeNSXTVPC NetworkTopologyType = "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"` - // ProviderRef is reference to a network topology provider object that provides the details for this type of network topology provider - ProviderRef NetworkTopologyProviderReference `json:"providerRef"` + // Type describes type of network topology. + // +kubebuilder:validation:Enum=nsx-t;vsphere-distributed;nsx-t_vpc + Type NetworkTopologyType `json:"type"` + // ProviderRef is reference to a network topology provider object that provides the details for this type of network topology provider. + ProviderRef TypedObjectReference `json:"providerRef"` } -// +genclient // +kubebuilder:object:root=true +// +kubebuilder:resource:shortName=ntp,scope=Cluster // NetworkTopologyProvider is the Schema for the networktopologyproviders API. // A NetworkTopologyProvider represents a network topology provider configuration. diff --git a/api/v1alpha1/nsxtnetworktopologyprovider_types.go b/api/v1alpha1/nsxtnetworktopologyprovider_types.go index eec8cd8..75a2a5a 100644 --- a/api/v1alpha1/nsxtnetworktopologyprovider_types.go +++ b/api/v1alpha1/nsxtnetworktopologyprovider_types.go @@ -8,7 +8,6 @@ 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"` @@ -28,8 +27,8 @@ type NSXTNetworkTopologyProviderSpec struct { RoutedMode *bool `json:"routedMode,omitempty"` } -// +genclient // +kubebuilder:object:root=true +// +kubebuilder:resource:shortName=nsxtntp,scope=Cluster // NSXTNetworkTopologyProvider is the Schema for the nsxtnetworktopologyproviders API. // A NSXTNetworkTopologyProvider represents a topology provider for NSX-T networks for a Supervisor. diff --git a/api/v1alpha1/nsxtvpcnetworktopologyprovider_types.go b/api/v1alpha1/nsxtvpcnetworktopologyprovider_types.go index 6df0779..9621ee9 100644 --- a/api/v1alpha1/nsxtvpcnetworktopologyprovider_types.go +++ b/api/v1alpha1/nsxtvpcnetworktopologyprovider_types.go @@ -8,7 +8,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -// +kubebuilder:resource:path=nsxtvpcnetworktopologyproviders,singular=nsxtvpcnetworktopologyprovider,shortName=nstp 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. @@ -23,8 +22,8 @@ type NSXTVPCNetworkTopologyProviderSpec struct { DefaultPrivateCidrs []string `json:"defaultPrivateCidrs,omitempty"` } -// +genclient // +kubebuilder:object:root=true +// +kubebuilder:resource:shortName=nsxtvpcntp,scope=Cluster // NSXTVPCNetworkTopologyProvider is the Schema for the nsxtvpcnetworktopologyproviders API. // A NSXTVPCNetworkTopologyProvider represents a topology provider for NSX VPC networks for a Supervisor. diff --git a/api/v1alpha1/vspheredistributednetworktopologyprovider_types.go b/api/v1alpha1/vspheredistributednetworktopologyprovider_types.go index 8eed26e..5e9540a 100644 --- a/api/v1alpha1/vspheredistributednetworktopologyprovider_types.go +++ b/api/v1alpha1/vspheredistributednetworktopologyprovider_types.go @@ -8,13 +8,12 @@ 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 +// +kubebuilder:resource:shortName=vdsntp,scope=Cluster // VSphereDistributedNetworkTopologyProvider is the Schema for the vspheredistributednetworktopologyproviders API. // A VSphereDistributedNetworkTopologyProvider represents a topology provider for vSphere distributed networks for a Supervisor. diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index fcb549c..acc9694 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -1490,47 +1490,47 @@ func (in *NetworkTopologyProviderList) DeepCopyObject() runtime.Object { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NetworkTopologyProviderReference) DeepCopyInto(out *NetworkTopologyProviderReference) { +func (in *NetworkTopologyProviderSpec) DeepCopyInto(out *NetworkTopologyProviderSpec) { *out = *in + out.ProviderRef = in.ProviderRef } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkTopologyProviderReference. -func (in *NetworkTopologyProviderReference) DeepCopy() *NetworkTopologyProviderReference { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkTopologyProviderSpec. +func (in *NetworkTopologyProviderSpec) DeepCopy() *NetworkTopologyProviderSpec { if in == nil { return nil } - out := new(NetworkTopologyProviderReference) + out := new(NetworkTopologyProviderSpec) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NetworkTopologyProviderSpec) DeepCopyInto(out *NetworkTopologyProviderSpec) { +func (in *SingleNodeAvailabilityMode) DeepCopyInto(out *SingleNodeAvailabilityMode) { *out = *in - out.ProviderRef = in.ProviderRef } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkTopologyProviderSpec. -func (in *NetworkTopologyProviderSpec) DeepCopy() *NetworkTopologyProviderSpec { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SingleNodeAvailabilityMode. +func (in *SingleNodeAvailabilityMode) DeepCopy() *SingleNodeAvailabilityMode { if in == nil { return nil } - out := new(NetworkTopologyProviderSpec) + out := new(SingleNodeAvailabilityMode) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SingleNodeAvailabilityMode) DeepCopyInto(out *SingleNodeAvailabilityMode) { +func (in *TypedObjectReference) DeepCopyInto(out *TypedObjectReference) { *out = *in } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SingleNodeAvailabilityMode. -func (in *SingleNodeAvailabilityMode) DeepCopy() *SingleNodeAvailabilityMode { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TypedObjectReference. +func (in *TypedObjectReference) DeepCopy() *TypedObjectReference { if in == nil { return nil } - out := new(SingleNodeAvailabilityMode) + out := new(TypedObjectReference) in.DeepCopyInto(out) return out }