istio.io/istio@v0.0.0-20240520182934-d79c90f27776/pilot/pkg/config/kube/crdclient/types.gen.go (about)

     1  // Code generated by pkg/config/schema/codegen/tools/collections.main.go. DO NOT EDIT.
     2  
     3  package crdclient
     4  
     5  import (
     6  	"context"
     7  	"fmt"
     8  
     9  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    10  	"k8s.io/apimachinery/pkg/runtime"
    11  	"k8s.io/apimachinery/pkg/types"
    12  
    13  	"istio.io/istio/pkg/config"
    14  	"istio.io/istio/pkg/config/schema/gvk"
    15  	"istio.io/istio/pkg/kube"
    16  
    17  	k8sioapiadmissionregistrationv1 "k8s.io/api/admissionregistration/v1"
    18  	k8sioapiappsv1 "k8s.io/api/apps/v1"
    19  	k8sioapicertificatesv1 "k8s.io/api/certificates/v1"
    20  	k8sioapicoordinationv1 "k8s.io/api/coordination/v1"
    21  	k8sioapicorev1 "k8s.io/api/core/v1"
    22  	k8sioapidiscoveryv1 "k8s.io/api/discovery/v1"
    23  	k8sioapinetworkingv1 "k8s.io/api/networking/v1"
    24  	k8sioapiextensionsapiserverpkgapisapiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
    25  	sigsk8siogatewayapiapisv1 "sigs.k8s.io/gateway-api/apis/v1"
    26  	sigsk8siogatewayapiapisv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
    27  	sigsk8siogatewayapiapisv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
    28  
    29  	istioioapiextensionsv1alpha1 "istio.io/api/extensions/v1alpha1"
    30  	istioioapimetav1alpha1 "istio.io/api/meta/v1alpha1"
    31  	istioioapinetworkingv1alpha3 "istio.io/api/networking/v1alpha3"
    32  	istioioapinetworkingv1beta1 "istio.io/api/networking/v1beta1"
    33  	istioioapisecurityv1beta1 "istio.io/api/security/v1beta1"
    34  	istioioapitelemetryv1alpha1 "istio.io/api/telemetry/v1alpha1"
    35  	apiistioioapiextensionsv1alpha1 "istio.io/client-go/pkg/apis/extensions/v1alpha1"
    36  	apiistioioapinetworkingv1alpha3 "istio.io/client-go/pkg/apis/networking/v1alpha3"
    37  	apiistioioapinetworkingv1beta1 "istio.io/client-go/pkg/apis/networking/v1beta1"
    38  	apiistioioapisecurityv1beta1 "istio.io/client-go/pkg/apis/security/v1beta1"
    39  	apiistioioapitelemetryv1alpha1 "istio.io/client-go/pkg/apis/telemetry/v1alpha1"
    40  )
    41  
    42  func create(c kube.Client, cfg config.Config, objMeta metav1.ObjectMeta) (metav1.Object, error) {
    43  	switch cfg.GroupVersionKind {
    44  	case gvk.AuthorizationPolicy:
    45  		return c.Istio().SecurityV1beta1().AuthorizationPolicies(cfg.Namespace).Create(context.TODO(), &apiistioioapisecurityv1beta1.AuthorizationPolicy{
    46  			ObjectMeta: objMeta,
    47  			Spec:       *(cfg.Spec.(*istioioapisecurityv1beta1.AuthorizationPolicy)),
    48  		}, metav1.CreateOptions{})
    49  	case gvk.DestinationRule:
    50  		return c.Istio().NetworkingV1alpha3().DestinationRules(cfg.Namespace).Create(context.TODO(), &apiistioioapinetworkingv1alpha3.DestinationRule{
    51  			ObjectMeta: objMeta,
    52  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.DestinationRule)),
    53  		}, metav1.CreateOptions{})
    54  	case gvk.EnvoyFilter:
    55  		return c.Istio().NetworkingV1alpha3().EnvoyFilters(cfg.Namespace).Create(context.TODO(), &apiistioioapinetworkingv1alpha3.EnvoyFilter{
    56  			ObjectMeta: objMeta,
    57  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.EnvoyFilter)),
    58  		}, metav1.CreateOptions{})
    59  	case gvk.GRPCRoute:
    60  		return c.GatewayAPI().GatewayV1().GRPCRoutes(cfg.Namespace).Create(context.TODO(), &sigsk8siogatewayapiapisv1.GRPCRoute{
    61  			ObjectMeta: objMeta,
    62  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1.GRPCRouteSpec)),
    63  		}, metav1.CreateOptions{})
    64  	case gvk.Gateway:
    65  		return c.Istio().NetworkingV1alpha3().Gateways(cfg.Namespace).Create(context.TODO(), &apiistioioapinetworkingv1alpha3.Gateway{
    66  			ObjectMeta: objMeta,
    67  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.Gateway)),
    68  		}, metav1.CreateOptions{})
    69  	case gvk.GatewayClass:
    70  		return c.GatewayAPI().GatewayV1beta1().GatewayClasses().Create(context.TODO(), &sigsk8siogatewayapiapisv1beta1.GatewayClass{
    71  			ObjectMeta: objMeta,
    72  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1beta1.GatewayClassSpec)),
    73  		}, metav1.CreateOptions{})
    74  	case gvk.HTTPRoute:
    75  		return c.GatewayAPI().GatewayV1beta1().HTTPRoutes(cfg.Namespace).Create(context.TODO(), &sigsk8siogatewayapiapisv1beta1.HTTPRoute{
    76  			ObjectMeta: objMeta,
    77  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1beta1.HTTPRouteSpec)),
    78  		}, metav1.CreateOptions{})
    79  	case gvk.KubernetesGateway:
    80  		return c.GatewayAPI().GatewayV1beta1().Gateways(cfg.Namespace).Create(context.TODO(), &sigsk8siogatewayapiapisv1beta1.Gateway{
    81  			ObjectMeta: objMeta,
    82  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1beta1.GatewaySpec)),
    83  		}, metav1.CreateOptions{})
    84  	case gvk.PeerAuthentication:
    85  		return c.Istio().SecurityV1beta1().PeerAuthentications(cfg.Namespace).Create(context.TODO(), &apiistioioapisecurityv1beta1.PeerAuthentication{
    86  			ObjectMeta: objMeta,
    87  			Spec:       *(cfg.Spec.(*istioioapisecurityv1beta1.PeerAuthentication)),
    88  		}, metav1.CreateOptions{})
    89  	case gvk.ProxyConfig:
    90  		return c.Istio().NetworkingV1beta1().ProxyConfigs(cfg.Namespace).Create(context.TODO(), &apiistioioapinetworkingv1beta1.ProxyConfig{
    91  			ObjectMeta: objMeta,
    92  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1beta1.ProxyConfig)),
    93  		}, metav1.CreateOptions{})
    94  	case gvk.ReferenceGrant:
    95  		return c.GatewayAPI().GatewayV1beta1().ReferenceGrants(cfg.Namespace).Create(context.TODO(), &sigsk8siogatewayapiapisv1beta1.ReferenceGrant{
    96  			ObjectMeta: objMeta,
    97  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1beta1.ReferenceGrantSpec)),
    98  		}, metav1.CreateOptions{})
    99  	case gvk.RequestAuthentication:
   100  		return c.Istio().SecurityV1beta1().RequestAuthentications(cfg.Namespace).Create(context.TODO(), &apiistioioapisecurityv1beta1.RequestAuthentication{
   101  			ObjectMeta: objMeta,
   102  			Spec:       *(cfg.Spec.(*istioioapisecurityv1beta1.RequestAuthentication)),
   103  		}, metav1.CreateOptions{})
   104  	case gvk.ServiceEntry:
   105  		return c.Istio().NetworkingV1alpha3().ServiceEntries(cfg.Namespace).Create(context.TODO(), &apiistioioapinetworkingv1alpha3.ServiceEntry{
   106  			ObjectMeta: objMeta,
   107  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.ServiceEntry)),
   108  		}, metav1.CreateOptions{})
   109  	case gvk.Sidecar:
   110  		return c.Istio().NetworkingV1alpha3().Sidecars(cfg.Namespace).Create(context.TODO(), &apiistioioapinetworkingv1alpha3.Sidecar{
   111  			ObjectMeta: objMeta,
   112  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.Sidecar)),
   113  		}, metav1.CreateOptions{})
   114  	case gvk.TCPRoute:
   115  		return c.GatewayAPI().GatewayV1alpha2().TCPRoutes(cfg.Namespace).Create(context.TODO(), &sigsk8siogatewayapiapisv1alpha2.TCPRoute{
   116  			ObjectMeta: objMeta,
   117  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1alpha2.TCPRouteSpec)),
   118  		}, metav1.CreateOptions{})
   119  	case gvk.TLSRoute:
   120  		return c.GatewayAPI().GatewayV1alpha2().TLSRoutes(cfg.Namespace).Create(context.TODO(), &sigsk8siogatewayapiapisv1alpha2.TLSRoute{
   121  			ObjectMeta: objMeta,
   122  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1alpha2.TLSRouteSpec)),
   123  		}, metav1.CreateOptions{})
   124  	case gvk.Telemetry:
   125  		return c.Istio().TelemetryV1alpha1().Telemetries(cfg.Namespace).Create(context.TODO(), &apiistioioapitelemetryv1alpha1.Telemetry{
   126  			ObjectMeta: objMeta,
   127  			Spec:       *(cfg.Spec.(*istioioapitelemetryv1alpha1.Telemetry)),
   128  		}, metav1.CreateOptions{})
   129  	case gvk.UDPRoute:
   130  		return c.GatewayAPI().GatewayV1alpha2().UDPRoutes(cfg.Namespace).Create(context.TODO(), &sigsk8siogatewayapiapisv1alpha2.UDPRoute{
   131  			ObjectMeta: objMeta,
   132  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1alpha2.UDPRouteSpec)),
   133  		}, metav1.CreateOptions{})
   134  	case gvk.VirtualService:
   135  		return c.Istio().NetworkingV1alpha3().VirtualServices(cfg.Namespace).Create(context.TODO(), &apiistioioapinetworkingv1alpha3.VirtualService{
   136  			ObjectMeta: objMeta,
   137  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.VirtualService)),
   138  		}, metav1.CreateOptions{})
   139  	case gvk.WasmPlugin:
   140  		return c.Istio().ExtensionsV1alpha1().WasmPlugins(cfg.Namespace).Create(context.TODO(), &apiistioioapiextensionsv1alpha1.WasmPlugin{
   141  			ObjectMeta: objMeta,
   142  			Spec:       *(cfg.Spec.(*istioioapiextensionsv1alpha1.WasmPlugin)),
   143  		}, metav1.CreateOptions{})
   144  	case gvk.WorkloadEntry:
   145  		return c.Istio().NetworkingV1alpha3().WorkloadEntries(cfg.Namespace).Create(context.TODO(), &apiistioioapinetworkingv1alpha3.WorkloadEntry{
   146  			ObjectMeta: objMeta,
   147  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.WorkloadEntry)),
   148  		}, metav1.CreateOptions{})
   149  	case gvk.WorkloadGroup:
   150  		return c.Istio().NetworkingV1alpha3().WorkloadGroups(cfg.Namespace).Create(context.TODO(), &apiistioioapinetworkingv1alpha3.WorkloadGroup{
   151  			ObjectMeta: objMeta,
   152  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.WorkloadGroup)),
   153  		}, metav1.CreateOptions{})
   154  	default:
   155  		return nil, fmt.Errorf("unsupported type: %v", cfg.GroupVersionKind)
   156  	}
   157  }
   158  
   159  func update(c kube.Client, cfg config.Config, objMeta metav1.ObjectMeta) (metav1.Object, error) {
   160  	switch cfg.GroupVersionKind {
   161  	case gvk.AuthorizationPolicy:
   162  		return c.Istio().SecurityV1beta1().AuthorizationPolicies(cfg.Namespace).Update(context.TODO(), &apiistioioapisecurityv1beta1.AuthorizationPolicy{
   163  			ObjectMeta: objMeta,
   164  			Spec:       *(cfg.Spec.(*istioioapisecurityv1beta1.AuthorizationPolicy)),
   165  		}, metav1.UpdateOptions{})
   166  	case gvk.DestinationRule:
   167  		return c.Istio().NetworkingV1alpha3().DestinationRules(cfg.Namespace).Update(context.TODO(), &apiistioioapinetworkingv1alpha3.DestinationRule{
   168  			ObjectMeta: objMeta,
   169  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.DestinationRule)),
   170  		}, metav1.UpdateOptions{})
   171  	case gvk.EnvoyFilter:
   172  		return c.Istio().NetworkingV1alpha3().EnvoyFilters(cfg.Namespace).Update(context.TODO(), &apiistioioapinetworkingv1alpha3.EnvoyFilter{
   173  			ObjectMeta: objMeta,
   174  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.EnvoyFilter)),
   175  		}, metav1.UpdateOptions{})
   176  	case gvk.GRPCRoute:
   177  		return c.GatewayAPI().GatewayV1().GRPCRoutes(cfg.Namespace).Update(context.TODO(), &sigsk8siogatewayapiapisv1.GRPCRoute{
   178  			ObjectMeta: objMeta,
   179  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1.GRPCRouteSpec)),
   180  		}, metav1.UpdateOptions{})
   181  	case gvk.Gateway:
   182  		return c.Istio().NetworkingV1alpha3().Gateways(cfg.Namespace).Update(context.TODO(), &apiistioioapinetworkingv1alpha3.Gateway{
   183  			ObjectMeta: objMeta,
   184  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.Gateway)),
   185  		}, metav1.UpdateOptions{})
   186  	case gvk.GatewayClass:
   187  		return c.GatewayAPI().GatewayV1beta1().GatewayClasses().Update(context.TODO(), &sigsk8siogatewayapiapisv1beta1.GatewayClass{
   188  			ObjectMeta: objMeta,
   189  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1beta1.GatewayClassSpec)),
   190  		}, metav1.UpdateOptions{})
   191  	case gvk.HTTPRoute:
   192  		return c.GatewayAPI().GatewayV1beta1().HTTPRoutes(cfg.Namespace).Update(context.TODO(), &sigsk8siogatewayapiapisv1beta1.HTTPRoute{
   193  			ObjectMeta: objMeta,
   194  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1beta1.HTTPRouteSpec)),
   195  		}, metav1.UpdateOptions{})
   196  	case gvk.KubernetesGateway:
   197  		return c.GatewayAPI().GatewayV1beta1().Gateways(cfg.Namespace).Update(context.TODO(), &sigsk8siogatewayapiapisv1beta1.Gateway{
   198  			ObjectMeta: objMeta,
   199  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1beta1.GatewaySpec)),
   200  		}, metav1.UpdateOptions{})
   201  	case gvk.PeerAuthentication:
   202  		return c.Istio().SecurityV1beta1().PeerAuthentications(cfg.Namespace).Update(context.TODO(), &apiistioioapisecurityv1beta1.PeerAuthentication{
   203  			ObjectMeta: objMeta,
   204  			Spec:       *(cfg.Spec.(*istioioapisecurityv1beta1.PeerAuthentication)),
   205  		}, metav1.UpdateOptions{})
   206  	case gvk.ProxyConfig:
   207  		return c.Istio().NetworkingV1beta1().ProxyConfigs(cfg.Namespace).Update(context.TODO(), &apiistioioapinetworkingv1beta1.ProxyConfig{
   208  			ObjectMeta: objMeta,
   209  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1beta1.ProxyConfig)),
   210  		}, metav1.UpdateOptions{})
   211  	case gvk.ReferenceGrant:
   212  		return c.GatewayAPI().GatewayV1beta1().ReferenceGrants(cfg.Namespace).Update(context.TODO(), &sigsk8siogatewayapiapisv1beta1.ReferenceGrant{
   213  			ObjectMeta: objMeta,
   214  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1beta1.ReferenceGrantSpec)),
   215  		}, metav1.UpdateOptions{})
   216  	case gvk.RequestAuthentication:
   217  		return c.Istio().SecurityV1beta1().RequestAuthentications(cfg.Namespace).Update(context.TODO(), &apiistioioapisecurityv1beta1.RequestAuthentication{
   218  			ObjectMeta: objMeta,
   219  			Spec:       *(cfg.Spec.(*istioioapisecurityv1beta1.RequestAuthentication)),
   220  		}, metav1.UpdateOptions{})
   221  	case gvk.ServiceEntry:
   222  		return c.Istio().NetworkingV1alpha3().ServiceEntries(cfg.Namespace).Update(context.TODO(), &apiistioioapinetworkingv1alpha3.ServiceEntry{
   223  			ObjectMeta: objMeta,
   224  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.ServiceEntry)),
   225  		}, metav1.UpdateOptions{})
   226  	case gvk.Sidecar:
   227  		return c.Istio().NetworkingV1alpha3().Sidecars(cfg.Namespace).Update(context.TODO(), &apiistioioapinetworkingv1alpha3.Sidecar{
   228  			ObjectMeta: objMeta,
   229  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.Sidecar)),
   230  		}, metav1.UpdateOptions{})
   231  	case gvk.TCPRoute:
   232  		return c.GatewayAPI().GatewayV1alpha2().TCPRoutes(cfg.Namespace).Update(context.TODO(), &sigsk8siogatewayapiapisv1alpha2.TCPRoute{
   233  			ObjectMeta: objMeta,
   234  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1alpha2.TCPRouteSpec)),
   235  		}, metav1.UpdateOptions{})
   236  	case gvk.TLSRoute:
   237  		return c.GatewayAPI().GatewayV1alpha2().TLSRoutes(cfg.Namespace).Update(context.TODO(), &sigsk8siogatewayapiapisv1alpha2.TLSRoute{
   238  			ObjectMeta: objMeta,
   239  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1alpha2.TLSRouteSpec)),
   240  		}, metav1.UpdateOptions{})
   241  	case gvk.Telemetry:
   242  		return c.Istio().TelemetryV1alpha1().Telemetries(cfg.Namespace).Update(context.TODO(), &apiistioioapitelemetryv1alpha1.Telemetry{
   243  			ObjectMeta: objMeta,
   244  			Spec:       *(cfg.Spec.(*istioioapitelemetryv1alpha1.Telemetry)),
   245  		}, metav1.UpdateOptions{})
   246  	case gvk.UDPRoute:
   247  		return c.GatewayAPI().GatewayV1alpha2().UDPRoutes(cfg.Namespace).Update(context.TODO(), &sigsk8siogatewayapiapisv1alpha2.UDPRoute{
   248  			ObjectMeta: objMeta,
   249  			Spec:       *(cfg.Spec.(*sigsk8siogatewayapiapisv1alpha2.UDPRouteSpec)),
   250  		}, metav1.UpdateOptions{})
   251  	case gvk.VirtualService:
   252  		return c.Istio().NetworkingV1alpha3().VirtualServices(cfg.Namespace).Update(context.TODO(), &apiistioioapinetworkingv1alpha3.VirtualService{
   253  			ObjectMeta: objMeta,
   254  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.VirtualService)),
   255  		}, metav1.UpdateOptions{})
   256  	case gvk.WasmPlugin:
   257  		return c.Istio().ExtensionsV1alpha1().WasmPlugins(cfg.Namespace).Update(context.TODO(), &apiistioioapiextensionsv1alpha1.WasmPlugin{
   258  			ObjectMeta: objMeta,
   259  			Spec:       *(cfg.Spec.(*istioioapiextensionsv1alpha1.WasmPlugin)),
   260  		}, metav1.UpdateOptions{})
   261  	case gvk.WorkloadEntry:
   262  		return c.Istio().NetworkingV1alpha3().WorkloadEntries(cfg.Namespace).Update(context.TODO(), &apiistioioapinetworkingv1alpha3.WorkloadEntry{
   263  			ObjectMeta: objMeta,
   264  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.WorkloadEntry)),
   265  		}, metav1.UpdateOptions{})
   266  	case gvk.WorkloadGroup:
   267  		return c.Istio().NetworkingV1alpha3().WorkloadGroups(cfg.Namespace).Update(context.TODO(), &apiistioioapinetworkingv1alpha3.WorkloadGroup{
   268  			ObjectMeta: objMeta,
   269  			Spec:       *(cfg.Spec.(*istioioapinetworkingv1alpha3.WorkloadGroup)),
   270  		}, metav1.UpdateOptions{})
   271  	default:
   272  		return nil, fmt.Errorf("unsupported type: %v", cfg.GroupVersionKind)
   273  	}
   274  }
   275  
   276  func updateStatus(c kube.Client, cfg config.Config, objMeta metav1.ObjectMeta) (metav1.Object, error) {
   277  	switch cfg.GroupVersionKind {
   278  	case gvk.AuthorizationPolicy:
   279  		return c.Istio().SecurityV1beta1().AuthorizationPolicies(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapisecurityv1beta1.AuthorizationPolicy{
   280  			ObjectMeta: objMeta,
   281  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   282  		}, metav1.UpdateOptions{})
   283  	case gvk.DestinationRule:
   284  		return c.Istio().NetworkingV1alpha3().DestinationRules(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapinetworkingv1alpha3.DestinationRule{
   285  			ObjectMeta: objMeta,
   286  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   287  		}, metav1.UpdateOptions{})
   288  	case gvk.EnvoyFilter:
   289  		return c.Istio().NetworkingV1alpha3().EnvoyFilters(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapinetworkingv1alpha3.EnvoyFilter{
   290  			ObjectMeta: objMeta,
   291  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   292  		}, metav1.UpdateOptions{})
   293  	case gvk.GRPCRoute:
   294  		return c.GatewayAPI().GatewayV1().GRPCRoutes(cfg.Namespace).UpdateStatus(context.TODO(), &sigsk8siogatewayapiapisv1.GRPCRoute{
   295  			ObjectMeta: objMeta,
   296  			Status:     *(cfg.Status.(*sigsk8siogatewayapiapisv1.GRPCRouteStatus)),
   297  		}, metav1.UpdateOptions{})
   298  	case gvk.Gateway:
   299  		return c.Istio().NetworkingV1alpha3().Gateways(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapinetworkingv1alpha3.Gateway{
   300  			ObjectMeta: objMeta,
   301  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   302  		}, metav1.UpdateOptions{})
   303  	case gvk.GatewayClass:
   304  		return c.GatewayAPI().GatewayV1beta1().GatewayClasses().UpdateStatus(context.TODO(), &sigsk8siogatewayapiapisv1beta1.GatewayClass{
   305  			ObjectMeta: objMeta,
   306  			Status:     *(cfg.Status.(*sigsk8siogatewayapiapisv1beta1.GatewayClassStatus)),
   307  		}, metav1.UpdateOptions{})
   308  	case gvk.HTTPRoute:
   309  		return c.GatewayAPI().GatewayV1beta1().HTTPRoutes(cfg.Namespace).UpdateStatus(context.TODO(), &sigsk8siogatewayapiapisv1beta1.HTTPRoute{
   310  			ObjectMeta: objMeta,
   311  			Status:     *(cfg.Status.(*sigsk8siogatewayapiapisv1beta1.HTTPRouteStatus)),
   312  		}, metav1.UpdateOptions{})
   313  	case gvk.KubernetesGateway:
   314  		return c.GatewayAPI().GatewayV1beta1().Gateways(cfg.Namespace).UpdateStatus(context.TODO(), &sigsk8siogatewayapiapisv1beta1.Gateway{
   315  			ObjectMeta: objMeta,
   316  			Status:     *(cfg.Status.(*sigsk8siogatewayapiapisv1beta1.GatewayStatus)),
   317  		}, metav1.UpdateOptions{})
   318  	case gvk.PeerAuthentication:
   319  		return c.Istio().SecurityV1beta1().PeerAuthentications(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapisecurityv1beta1.PeerAuthentication{
   320  			ObjectMeta: objMeta,
   321  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   322  		}, metav1.UpdateOptions{})
   323  	case gvk.ProxyConfig:
   324  		return c.Istio().NetworkingV1beta1().ProxyConfigs(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapinetworkingv1beta1.ProxyConfig{
   325  			ObjectMeta: objMeta,
   326  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   327  		}, metav1.UpdateOptions{})
   328  	case gvk.RequestAuthentication:
   329  		return c.Istio().SecurityV1beta1().RequestAuthentications(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapisecurityv1beta1.RequestAuthentication{
   330  			ObjectMeta: objMeta,
   331  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   332  		}, metav1.UpdateOptions{})
   333  	case gvk.ServiceEntry:
   334  		return c.Istio().NetworkingV1alpha3().ServiceEntries(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapinetworkingv1alpha3.ServiceEntry{
   335  			ObjectMeta: objMeta,
   336  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   337  		}, metav1.UpdateOptions{})
   338  	case gvk.Sidecar:
   339  		return c.Istio().NetworkingV1alpha3().Sidecars(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapinetworkingv1alpha3.Sidecar{
   340  			ObjectMeta: objMeta,
   341  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   342  		}, metav1.UpdateOptions{})
   343  	case gvk.TCPRoute:
   344  		return c.GatewayAPI().GatewayV1alpha2().TCPRoutes(cfg.Namespace).UpdateStatus(context.TODO(), &sigsk8siogatewayapiapisv1alpha2.TCPRoute{
   345  			ObjectMeta: objMeta,
   346  			Status:     *(cfg.Status.(*sigsk8siogatewayapiapisv1alpha2.TCPRouteStatus)),
   347  		}, metav1.UpdateOptions{})
   348  	case gvk.TLSRoute:
   349  		return c.GatewayAPI().GatewayV1alpha2().TLSRoutes(cfg.Namespace).UpdateStatus(context.TODO(), &sigsk8siogatewayapiapisv1alpha2.TLSRoute{
   350  			ObjectMeta: objMeta,
   351  			Status:     *(cfg.Status.(*sigsk8siogatewayapiapisv1alpha2.TLSRouteStatus)),
   352  		}, metav1.UpdateOptions{})
   353  	case gvk.Telemetry:
   354  		return c.Istio().TelemetryV1alpha1().Telemetries(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapitelemetryv1alpha1.Telemetry{
   355  			ObjectMeta: objMeta,
   356  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   357  		}, metav1.UpdateOptions{})
   358  	case gvk.UDPRoute:
   359  		return c.GatewayAPI().GatewayV1alpha2().UDPRoutes(cfg.Namespace).UpdateStatus(context.TODO(), &sigsk8siogatewayapiapisv1alpha2.UDPRoute{
   360  			ObjectMeta: objMeta,
   361  			Status:     *(cfg.Status.(*sigsk8siogatewayapiapisv1alpha2.UDPRouteStatus)),
   362  		}, metav1.UpdateOptions{})
   363  	case gvk.VirtualService:
   364  		return c.Istio().NetworkingV1alpha3().VirtualServices(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapinetworkingv1alpha3.VirtualService{
   365  			ObjectMeta: objMeta,
   366  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   367  		}, metav1.UpdateOptions{})
   368  	case gvk.WasmPlugin:
   369  		return c.Istio().ExtensionsV1alpha1().WasmPlugins(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapiextensionsv1alpha1.WasmPlugin{
   370  			ObjectMeta: objMeta,
   371  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   372  		}, metav1.UpdateOptions{})
   373  	case gvk.WorkloadEntry:
   374  		return c.Istio().NetworkingV1alpha3().WorkloadEntries(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapinetworkingv1alpha3.WorkloadEntry{
   375  			ObjectMeta: objMeta,
   376  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   377  		}, metav1.UpdateOptions{})
   378  	case gvk.WorkloadGroup:
   379  		return c.Istio().NetworkingV1alpha3().WorkloadGroups(cfg.Namespace).UpdateStatus(context.TODO(), &apiistioioapinetworkingv1alpha3.WorkloadGroup{
   380  			ObjectMeta: objMeta,
   381  			Status:     *(cfg.Status.(*istioioapimetav1alpha1.IstioStatus)),
   382  		}, metav1.UpdateOptions{})
   383  	default:
   384  		return nil, fmt.Errorf("unsupported type: %v", cfg.GroupVersionKind)
   385  	}
   386  }
   387  
   388  func patch(c kube.Client, orig config.Config, origMeta metav1.ObjectMeta, mod config.Config, modMeta metav1.ObjectMeta, typ types.PatchType) (metav1.Object, error) {
   389  	if orig.GroupVersionKind != mod.GroupVersionKind {
   390  		return nil, fmt.Errorf("gvk mismatch: %v, modified: %v", orig.GroupVersionKind, mod.GroupVersionKind)
   391  	}
   392  	switch orig.GroupVersionKind {
   393  	case gvk.AuthorizationPolicy:
   394  		oldRes := &apiistioioapisecurityv1beta1.AuthorizationPolicy{
   395  			ObjectMeta: origMeta,
   396  			Spec:       *(orig.Spec.(*istioioapisecurityv1beta1.AuthorizationPolicy)),
   397  		}
   398  		modRes := &apiistioioapisecurityv1beta1.AuthorizationPolicy{
   399  			ObjectMeta: modMeta,
   400  			Spec:       *(mod.Spec.(*istioioapisecurityv1beta1.AuthorizationPolicy)),
   401  		}
   402  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   403  		if err != nil {
   404  			return nil, err
   405  		}
   406  		return c.Istio().SecurityV1beta1().AuthorizationPolicies(orig.Namespace).
   407  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   408  	case gvk.DestinationRule:
   409  		oldRes := &apiistioioapinetworkingv1alpha3.DestinationRule{
   410  			ObjectMeta: origMeta,
   411  			Spec:       *(orig.Spec.(*istioioapinetworkingv1alpha3.DestinationRule)),
   412  		}
   413  		modRes := &apiistioioapinetworkingv1alpha3.DestinationRule{
   414  			ObjectMeta: modMeta,
   415  			Spec:       *(mod.Spec.(*istioioapinetworkingv1alpha3.DestinationRule)),
   416  		}
   417  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   418  		if err != nil {
   419  			return nil, err
   420  		}
   421  		return c.Istio().NetworkingV1alpha3().DestinationRules(orig.Namespace).
   422  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   423  	case gvk.EnvoyFilter:
   424  		oldRes := &apiistioioapinetworkingv1alpha3.EnvoyFilter{
   425  			ObjectMeta: origMeta,
   426  			Spec:       *(orig.Spec.(*istioioapinetworkingv1alpha3.EnvoyFilter)),
   427  		}
   428  		modRes := &apiistioioapinetworkingv1alpha3.EnvoyFilter{
   429  			ObjectMeta: modMeta,
   430  			Spec:       *(mod.Spec.(*istioioapinetworkingv1alpha3.EnvoyFilter)),
   431  		}
   432  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   433  		if err != nil {
   434  			return nil, err
   435  		}
   436  		return c.Istio().NetworkingV1alpha3().EnvoyFilters(orig.Namespace).
   437  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   438  	case gvk.GRPCRoute:
   439  		oldRes := &sigsk8siogatewayapiapisv1.GRPCRoute{
   440  			ObjectMeta: origMeta,
   441  			Spec:       *(orig.Spec.(*sigsk8siogatewayapiapisv1.GRPCRouteSpec)),
   442  		}
   443  		modRes := &sigsk8siogatewayapiapisv1.GRPCRoute{
   444  			ObjectMeta: modMeta,
   445  			Spec:       *(mod.Spec.(*sigsk8siogatewayapiapisv1.GRPCRouteSpec)),
   446  		}
   447  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   448  		if err != nil {
   449  			return nil, err
   450  		}
   451  		return c.GatewayAPI().GatewayV1().GRPCRoutes(orig.Namespace).
   452  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   453  	case gvk.Gateway:
   454  		oldRes := &apiistioioapinetworkingv1alpha3.Gateway{
   455  			ObjectMeta: origMeta,
   456  			Spec:       *(orig.Spec.(*istioioapinetworkingv1alpha3.Gateway)),
   457  		}
   458  		modRes := &apiistioioapinetworkingv1alpha3.Gateway{
   459  			ObjectMeta: modMeta,
   460  			Spec:       *(mod.Spec.(*istioioapinetworkingv1alpha3.Gateway)),
   461  		}
   462  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   463  		if err != nil {
   464  			return nil, err
   465  		}
   466  		return c.Istio().NetworkingV1alpha3().Gateways(orig.Namespace).
   467  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   468  	case gvk.GatewayClass:
   469  		oldRes := &sigsk8siogatewayapiapisv1beta1.GatewayClass{
   470  			ObjectMeta: origMeta,
   471  			Spec:       *(orig.Spec.(*sigsk8siogatewayapiapisv1beta1.GatewayClassSpec)),
   472  		}
   473  		modRes := &sigsk8siogatewayapiapisv1beta1.GatewayClass{
   474  			ObjectMeta: modMeta,
   475  			Spec:       *(mod.Spec.(*sigsk8siogatewayapiapisv1beta1.GatewayClassSpec)),
   476  		}
   477  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   478  		if err != nil {
   479  			return nil, err
   480  		}
   481  		return c.GatewayAPI().GatewayV1beta1().GatewayClasses().
   482  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   483  	case gvk.HTTPRoute:
   484  		oldRes := &sigsk8siogatewayapiapisv1beta1.HTTPRoute{
   485  			ObjectMeta: origMeta,
   486  			Spec:       *(orig.Spec.(*sigsk8siogatewayapiapisv1beta1.HTTPRouteSpec)),
   487  		}
   488  		modRes := &sigsk8siogatewayapiapisv1beta1.HTTPRoute{
   489  			ObjectMeta: modMeta,
   490  			Spec:       *(mod.Spec.(*sigsk8siogatewayapiapisv1beta1.HTTPRouteSpec)),
   491  		}
   492  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   493  		if err != nil {
   494  			return nil, err
   495  		}
   496  		return c.GatewayAPI().GatewayV1beta1().HTTPRoutes(orig.Namespace).
   497  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   498  	case gvk.KubernetesGateway:
   499  		oldRes := &sigsk8siogatewayapiapisv1beta1.Gateway{
   500  			ObjectMeta: origMeta,
   501  			Spec:       *(orig.Spec.(*sigsk8siogatewayapiapisv1beta1.GatewaySpec)),
   502  		}
   503  		modRes := &sigsk8siogatewayapiapisv1beta1.Gateway{
   504  			ObjectMeta: modMeta,
   505  			Spec:       *(mod.Spec.(*sigsk8siogatewayapiapisv1beta1.GatewaySpec)),
   506  		}
   507  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   508  		if err != nil {
   509  			return nil, err
   510  		}
   511  		return c.GatewayAPI().GatewayV1beta1().Gateways(orig.Namespace).
   512  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   513  	case gvk.PeerAuthentication:
   514  		oldRes := &apiistioioapisecurityv1beta1.PeerAuthentication{
   515  			ObjectMeta: origMeta,
   516  			Spec:       *(orig.Spec.(*istioioapisecurityv1beta1.PeerAuthentication)),
   517  		}
   518  		modRes := &apiistioioapisecurityv1beta1.PeerAuthentication{
   519  			ObjectMeta: modMeta,
   520  			Spec:       *(mod.Spec.(*istioioapisecurityv1beta1.PeerAuthentication)),
   521  		}
   522  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   523  		if err != nil {
   524  			return nil, err
   525  		}
   526  		return c.Istio().SecurityV1beta1().PeerAuthentications(orig.Namespace).
   527  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   528  	case gvk.ProxyConfig:
   529  		oldRes := &apiistioioapinetworkingv1beta1.ProxyConfig{
   530  			ObjectMeta: origMeta,
   531  			Spec:       *(orig.Spec.(*istioioapinetworkingv1beta1.ProxyConfig)),
   532  		}
   533  		modRes := &apiistioioapinetworkingv1beta1.ProxyConfig{
   534  			ObjectMeta: modMeta,
   535  			Spec:       *(mod.Spec.(*istioioapinetworkingv1beta1.ProxyConfig)),
   536  		}
   537  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   538  		if err != nil {
   539  			return nil, err
   540  		}
   541  		return c.Istio().NetworkingV1beta1().ProxyConfigs(orig.Namespace).
   542  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   543  	case gvk.ReferenceGrant:
   544  		oldRes := &sigsk8siogatewayapiapisv1beta1.ReferenceGrant{
   545  			ObjectMeta: origMeta,
   546  			Spec:       *(orig.Spec.(*sigsk8siogatewayapiapisv1beta1.ReferenceGrantSpec)),
   547  		}
   548  		modRes := &sigsk8siogatewayapiapisv1beta1.ReferenceGrant{
   549  			ObjectMeta: modMeta,
   550  			Spec:       *(mod.Spec.(*sigsk8siogatewayapiapisv1beta1.ReferenceGrantSpec)),
   551  		}
   552  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   553  		if err != nil {
   554  			return nil, err
   555  		}
   556  		return c.GatewayAPI().GatewayV1beta1().ReferenceGrants(orig.Namespace).
   557  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   558  	case gvk.RequestAuthentication:
   559  		oldRes := &apiistioioapisecurityv1beta1.RequestAuthentication{
   560  			ObjectMeta: origMeta,
   561  			Spec:       *(orig.Spec.(*istioioapisecurityv1beta1.RequestAuthentication)),
   562  		}
   563  		modRes := &apiistioioapisecurityv1beta1.RequestAuthentication{
   564  			ObjectMeta: modMeta,
   565  			Spec:       *(mod.Spec.(*istioioapisecurityv1beta1.RequestAuthentication)),
   566  		}
   567  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   568  		if err != nil {
   569  			return nil, err
   570  		}
   571  		return c.Istio().SecurityV1beta1().RequestAuthentications(orig.Namespace).
   572  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   573  	case gvk.ServiceEntry:
   574  		oldRes := &apiistioioapinetworkingv1alpha3.ServiceEntry{
   575  			ObjectMeta: origMeta,
   576  			Spec:       *(orig.Spec.(*istioioapinetworkingv1alpha3.ServiceEntry)),
   577  		}
   578  		modRes := &apiistioioapinetworkingv1alpha3.ServiceEntry{
   579  			ObjectMeta: modMeta,
   580  			Spec:       *(mod.Spec.(*istioioapinetworkingv1alpha3.ServiceEntry)),
   581  		}
   582  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   583  		if err != nil {
   584  			return nil, err
   585  		}
   586  		return c.Istio().NetworkingV1alpha3().ServiceEntries(orig.Namespace).
   587  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   588  	case gvk.Sidecar:
   589  		oldRes := &apiistioioapinetworkingv1alpha3.Sidecar{
   590  			ObjectMeta: origMeta,
   591  			Spec:       *(orig.Spec.(*istioioapinetworkingv1alpha3.Sidecar)),
   592  		}
   593  		modRes := &apiistioioapinetworkingv1alpha3.Sidecar{
   594  			ObjectMeta: modMeta,
   595  			Spec:       *(mod.Spec.(*istioioapinetworkingv1alpha3.Sidecar)),
   596  		}
   597  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   598  		if err != nil {
   599  			return nil, err
   600  		}
   601  		return c.Istio().NetworkingV1alpha3().Sidecars(orig.Namespace).
   602  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   603  	case gvk.TCPRoute:
   604  		oldRes := &sigsk8siogatewayapiapisv1alpha2.TCPRoute{
   605  			ObjectMeta: origMeta,
   606  			Spec:       *(orig.Spec.(*sigsk8siogatewayapiapisv1alpha2.TCPRouteSpec)),
   607  		}
   608  		modRes := &sigsk8siogatewayapiapisv1alpha2.TCPRoute{
   609  			ObjectMeta: modMeta,
   610  			Spec:       *(mod.Spec.(*sigsk8siogatewayapiapisv1alpha2.TCPRouteSpec)),
   611  		}
   612  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   613  		if err != nil {
   614  			return nil, err
   615  		}
   616  		return c.GatewayAPI().GatewayV1alpha2().TCPRoutes(orig.Namespace).
   617  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   618  	case gvk.TLSRoute:
   619  		oldRes := &sigsk8siogatewayapiapisv1alpha2.TLSRoute{
   620  			ObjectMeta: origMeta,
   621  			Spec:       *(orig.Spec.(*sigsk8siogatewayapiapisv1alpha2.TLSRouteSpec)),
   622  		}
   623  		modRes := &sigsk8siogatewayapiapisv1alpha2.TLSRoute{
   624  			ObjectMeta: modMeta,
   625  			Spec:       *(mod.Spec.(*sigsk8siogatewayapiapisv1alpha2.TLSRouteSpec)),
   626  		}
   627  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   628  		if err != nil {
   629  			return nil, err
   630  		}
   631  		return c.GatewayAPI().GatewayV1alpha2().TLSRoutes(orig.Namespace).
   632  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   633  	case gvk.Telemetry:
   634  		oldRes := &apiistioioapitelemetryv1alpha1.Telemetry{
   635  			ObjectMeta: origMeta,
   636  			Spec:       *(orig.Spec.(*istioioapitelemetryv1alpha1.Telemetry)),
   637  		}
   638  		modRes := &apiistioioapitelemetryv1alpha1.Telemetry{
   639  			ObjectMeta: modMeta,
   640  			Spec:       *(mod.Spec.(*istioioapitelemetryv1alpha1.Telemetry)),
   641  		}
   642  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   643  		if err != nil {
   644  			return nil, err
   645  		}
   646  		return c.Istio().TelemetryV1alpha1().Telemetries(orig.Namespace).
   647  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   648  	case gvk.UDPRoute:
   649  		oldRes := &sigsk8siogatewayapiapisv1alpha2.UDPRoute{
   650  			ObjectMeta: origMeta,
   651  			Spec:       *(orig.Spec.(*sigsk8siogatewayapiapisv1alpha2.UDPRouteSpec)),
   652  		}
   653  		modRes := &sigsk8siogatewayapiapisv1alpha2.UDPRoute{
   654  			ObjectMeta: modMeta,
   655  			Spec:       *(mod.Spec.(*sigsk8siogatewayapiapisv1alpha2.UDPRouteSpec)),
   656  		}
   657  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   658  		if err != nil {
   659  			return nil, err
   660  		}
   661  		return c.GatewayAPI().GatewayV1alpha2().UDPRoutes(orig.Namespace).
   662  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   663  	case gvk.VirtualService:
   664  		oldRes := &apiistioioapinetworkingv1alpha3.VirtualService{
   665  			ObjectMeta: origMeta,
   666  			Spec:       *(orig.Spec.(*istioioapinetworkingv1alpha3.VirtualService)),
   667  		}
   668  		modRes := &apiistioioapinetworkingv1alpha3.VirtualService{
   669  			ObjectMeta: modMeta,
   670  			Spec:       *(mod.Spec.(*istioioapinetworkingv1alpha3.VirtualService)),
   671  		}
   672  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   673  		if err != nil {
   674  			return nil, err
   675  		}
   676  		return c.Istio().NetworkingV1alpha3().VirtualServices(orig.Namespace).
   677  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   678  	case gvk.WasmPlugin:
   679  		oldRes := &apiistioioapiextensionsv1alpha1.WasmPlugin{
   680  			ObjectMeta: origMeta,
   681  			Spec:       *(orig.Spec.(*istioioapiextensionsv1alpha1.WasmPlugin)),
   682  		}
   683  		modRes := &apiistioioapiextensionsv1alpha1.WasmPlugin{
   684  			ObjectMeta: modMeta,
   685  			Spec:       *(mod.Spec.(*istioioapiextensionsv1alpha1.WasmPlugin)),
   686  		}
   687  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   688  		if err != nil {
   689  			return nil, err
   690  		}
   691  		return c.Istio().ExtensionsV1alpha1().WasmPlugins(orig.Namespace).
   692  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   693  	case gvk.WorkloadEntry:
   694  		oldRes := &apiistioioapinetworkingv1alpha3.WorkloadEntry{
   695  			ObjectMeta: origMeta,
   696  			Spec:       *(orig.Spec.(*istioioapinetworkingv1alpha3.WorkloadEntry)),
   697  		}
   698  		modRes := &apiistioioapinetworkingv1alpha3.WorkloadEntry{
   699  			ObjectMeta: modMeta,
   700  			Spec:       *(mod.Spec.(*istioioapinetworkingv1alpha3.WorkloadEntry)),
   701  		}
   702  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   703  		if err != nil {
   704  			return nil, err
   705  		}
   706  		return c.Istio().NetworkingV1alpha3().WorkloadEntries(orig.Namespace).
   707  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   708  	case gvk.WorkloadGroup:
   709  		oldRes := &apiistioioapinetworkingv1alpha3.WorkloadGroup{
   710  			ObjectMeta: origMeta,
   711  			Spec:       *(orig.Spec.(*istioioapinetworkingv1alpha3.WorkloadGroup)),
   712  		}
   713  		modRes := &apiistioioapinetworkingv1alpha3.WorkloadGroup{
   714  			ObjectMeta: modMeta,
   715  			Spec:       *(mod.Spec.(*istioioapinetworkingv1alpha3.WorkloadGroup)),
   716  		}
   717  		patchBytes, err := genPatchBytes(oldRes, modRes, typ)
   718  		if err != nil {
   719  			return nil, err
   720  		}
   721  		return c.Istio().NetworkingV1alpha3().WorkloadGroups(orig.Namespace).
   722  			Patch(context.TODO(), orig.Name, typ, patchBytes, metav1.PatchOptions{FieldManager: "pilot-discovery"})
   723  	default:
   724  		return nil, fmt.Errorf("unsupported type: %v", orig.GroupVersionKind)
   725  	}
   726  }
   727  
   728  func delete(c kube.Client, typ config.GroupVersionKind, name, namespace string, resourceVersion *string) error {
   729  	var deleteOptions metav1.DeleteOptions
   730  	if resourceVersion != nil {
   731  		deleteOptions.Preconditions = &metav1.Preconditions{ResourceVersion: resourceVersion}
   732  	}
   733  	switch typ {
   734  	case gvk.AuthorizationPolicy:
   735  		return c.Istio().SecurityV1beta1().AuthorizationPolicies(namespace).Delete(context.TODO(), name, deleteOptions)
   736  	case gvk.DestinationRule:
   737  		return c.Istio().NetworkingV1alpha3().DestinationRules(namespace).Delete(context.TODO(), name, deleteOptions)
   738  	case gvk.EnvoyFilter:
   739  		return c.Istio().NetworkingV1alpha3().EnvoyFilters(namespace).Delete(context.TODO(), name, deleteOptions)
   740  	case gvk.GRPCRoute:
   741  		return c.GatewayAPI().GatewayV1().GRPCRoutes(namespace).Delete(context.TODO(), name, deleteOptions)
   742  	case gvk.Gateway:
   743  		return c.Istio().NetworkingV1alpha3().Gateways(namespace).Delete(context.TODO(), name, deleteOptions)
   744  	case gvk.GatewayClass:
   745  		return c.GatewayAPI().GatewayV1beta1().GatewayClasses().Delete(context.TODO(), name, deleteOptions)
   746  	case gvk.HTTPRoute:
   747  		return c.GatewayAPI().GatewayV1beta1().HTTPRoutes(namespace).Delete(context.TODO(), name, deleteOptions)
   748  	case gvk.KubernetesGateway:
   749  		return c.GatewayAPI().GatewayV1beta1().Gateways(namespace).Delete(context.TODO(), name, deleteOptions)
   750  	case gvk.PeerAuthentication:
   751  		return c.Istio().SecurityV1beta1().PeerAuthentications(namespace).Delete(context.TODO(), name, deleteOptions)
   752  	case gvk.ProxyConfig:
   753  		return c.Istio().NetworkingV1beta1().ProxyConfigs(namespace).Delete(context.TODO(), name, deleteOptions)
   754  	case gvk.ReferenceGrant:
   755  		return c.GatewayAPI().GatewayV1beta1().ReferenceGrants(namespace).Delete(context.TODO(), name, deleteOptions)
   756  	case gvk.RequestAuthentication:
   757  		return c.Istio().SecurityV1beta1().RequestAuthentications(namespace).Delete(context.TODO(), name, deleteOptions)
   758  	case gvk.ServiceEntry:
   759  		return c.Istio().NetworkingV1alpha3().ServiceEntries(namespace).Delete(context.TODO(), name, deleteOptions)
   760  	case gvk.Sidecar:
   761  		return c.Istio().NetworkingV1alpha3().Sidecars(namespace).Delete(context.TODO(), name, deleteOptions)
   762  	case gvk.TCPRoute:
   763  		return c.GatewayAPI().GatewayV1alpha2().TCPRoutes(namespace).Delete(context.TODO(), name, deleteOptions)
   764  	case gvk.TLSRoute:
   765  		return c.GatewayAPI().GatewayV1alpha2().TLSRoutes(namespace).Delete(context.TODO(), name, deleteOptions)
   766  	case gvk.Telemetry:
   767  		return c.Istio().TelemetryV1alpha1().Telemetries(namespace).Delete(context.TODO(), name, deleteOptions)
   768  	case gvk.UDPRoute:
   769  		return c.GatewayAPI().GatewayV1alpha2().UDPRoutes(namespace).Delete(context.TODO(), name, deleteOptions)
   770  	case gvk.VirtualService:
   771  		return c.Istio().NetworkingV1alpha3().VirtualServices(namespace).Delete(context.TODO(), name, deleteOptions)
   772  	case gvk.WasmPlugin:
   773  		return c.Istio().ExtensionsV1alpha1().WasmPlugins(namespace).Delete(context.TODO(), name, deleteOptions)
   774  	case gvk.WorkloadEntry:
   775  		return c.Istio().NetworkingV1alpha3().WorkloadEntries(namespace).Delete(context.TODO(), name, deleteOptions)
   776  	case gvk.WorkloadGroup:
   777  		return c.Istio().NetworkingV1alpha3().WorkloadGroups(namespace).Delete(context.TODO(), name, deleteOptions)
   778  	default:
   779  		return fmt.Errorf("unsupported type: %v", typ)
   780  	}
   781  }
   782  
   783  var translationMap = map[config.GroupVersionKind]func(r runtime.Object) config.Config{
   784  	gvk.AuthorizationPolicy: func(r runtime.Object) config.Config {
   785  		obj := r.(*apiistioioapisecurityv1beta1.AuthorizationPolicy)
   786  		return config.Config{
   787  			Meta: config.Meta{
   788  				GroupVersionKind:  gvk.AuthorizationPolicy,
   789  				Name:              obj.Name,
   790  				Namespace:         obj.Namespace,
   791  				Labels:            obj.Labels,
   792  				Annotations:       obj.Annotations,
   793  				ResourceVersion:   obj.ResourceVersion,
   794  				CreationTimestamp: obj.CreationTimestamp.Time,
   795  				OwnerReferences:   obj.OwnerReferences,
   796  				UID:               string(obj.UID),
   797  				Generation:        obj.Generation,
   798  			},
   799  			Spec:   &obj.Spec,
   800  			Status: &obj.Status,
   801  		}
   802  	},
   803  	gvk.CertificateSigningRequest: func(r runtime.Object) config.Config {
   804  		obj := r.(*k8sioapicertificatesv1.CertificateSigningRequest)
   805  		return config.Config{
   806  			Meta: config.Meta{
   807  				GroupVersionKind:  gvk.CertificateSigningRequest,
   808  				Name:              obj.Name,
   809  				Namespace:         obj.Namespace,
   810  				Labels:            obj.Labels,
   811  				Annotations:       obj.Annotations,
   812  				ResourceVersion:   obj.ResourceVersion,
   813  				CreationTimestamp: obj.CreationTimestamp.Time,
   814  				OwnerReferences:   obj.OwnerReferences,
   815  				UID:               string(obj.UID),
   816  				Generation:        obj.Generation,
   817  			},
   818  			Spec:   &obj.Spec,
   819  			Status: &obj.Status,
   820  		}
   821  	},
   822  	gvk.ConfigMap: func(r runtime.Object) config.Config {
   823  		obj := r.(*k8sioapicorev1.ConfigMap)
   824  		return config.Config{
   825  			Meta: config.Meta{
   826  				GroupVersionKind:  gvk.ConfigMap,
   827  				Name:              obj.Name,
   828  				Namespace:         obj.Namespace,
   829  				Labels:            obj.Labels,
   830  				Annotations:       obj.Annotations,
   831  				ResourceVersion:   obj.ResourceVersion,
   832  				CreationTimestamp: obj.CreationTimestamp.Time,
   833  				OwnerReferences:   obj.OwnerReferences,
   834  				UID:               string(obj.UID),
   835  				Generation:        obj.Generation,
   836  			},
   837  			Spec: obj,
   838  		}
   839  	},
   840  	gvk.CustomResourceDefinition: func(r runtime.Object) config.Config {
   841  		obj := r.(*k8sioapiextensionsapiserverpkgapisapiextensionsv1.CustomResourceDefinition)
   842  		return config.Config{
   843  			Meta: config.Meta{
   844  				GroupVersionKind:  gvk.CustomResourceDefinition,
   845  				Name:              obj.Name,
   846  				Namespace:         obj.Namespace,
   847  				Labels:            obj.Labels,
   848  				Annotations:       obj.Annotations,
   849  				ResourceVersion:   obj.ResourceVersion,
   850  				CreationTimestamp: obj.CreationTimestamp.Time,
   851  				OwnerReferences:   obj.OwnerReferences,
   852  				UID:               string(obj.UID),
   853  				Generation:        obj.Generation,
   854  			},
   855  			Spec: &obj.Spec,
   856  		}
   857  	},
   858  	gvk.DaemonSet: func(r runtime.Object) config.Config {
   859  		obj := r.(*k8sioapiappsv1.DaemonSet)
   860  		return config.Config{
   861  			Meta: config.Meta{
   862  				GroupVersionKind:  gvk.DaemonSet,
   863  				Name:              obj.Name,
   864  				Namespace:         obj.Namespace,
   865  				Labels:            obj.Labels,
   866  				Annotations:       obj.Annotations,
   867  				ResourceVersion:   obj.ResourceVersion,
   868  				CreationTimestamp: obj.CreationTimestamp.Time,
   869  				OwnerReferences:   obj.OwnerReferences,
   870  				UID:               string(obj.UID),
   871  				Generation:        obj.Generation,
   872  			},
   873  			Spec: &obj.Spec,
   874  		}
   875  	},
   876  	gvk.Deployment: func(r runtime.Object) config.Config {
   877  		obj := r.(*k8sioapiappsv1.Deployment)
   878  		return config.Config{
   879  			Meta: config.Meta{
   880  				GroupVersionKind:  gvk.Deployment,
   881  				Name:              obj.Name,
   882  				Namespace:         obj.Namespace,
   883  				Labels:            obj.Labels,
   884  				Annotations:       obj.Annotations,
   885  				ResourceVersion:   obj.ResourceVersion,
   886  				CreationTimestamp: obj.CreationTimestamp.Time,
   887  				OwnerReferences:   obj.OwnerReferences,
   888  				UID:               string(obj.UID),
   889  				Generation:        obj.Generation,
   890  			},
   891  			Spec: &obj.Spec,
   892  		}
   893  	},
   894  	gvk.DestinationRule: func(r runtime.Object) config.Config {
   895  		obj := r.(*apiistioioapinetworkingv1alpha3.DestinationRule)
   896  		return config.Config{
   897  			Meta: config.Meta{
   898  				GroupVersionKind:  gvk.DestinationRule,
   899  				Name:              obj.Name,
   900  				Namespace:         obj.Namespace,
   901  				Labels:            obj.Labels,
   902  				Annotations:       obj.Annotations,
   903  				ResourceVersion:   obj.ResourceVersion,
   904  				CreationTimestamp: obj.CreationTimestamp.Time,
   905  				OwnerReferences:   obj.OwnerReferences,
   906  				UID:               string(obj.UID),
   907  				Generation:        obj.Generation,
   908  			},
   909  			Spec:   &obj.Spec,
   910  			Status: &obj.Status,
   911  		}
   912  	},
   913  	gvk.EndpointSlice: func(r runtime.Object) config.Config {
   914  		obj := r.(*k8sioapidiscoveryv1.EndpointSlice)
   915  		return config.Config{
   916  			Meta: config.Meta{
   917  				GroupVersionKind:  gvk.EndpointSlice,
   918  				Name:              obj.Name,
   919  				Namespace:         obj.Namespace,
   920  				Labels:            obj.Labels,
   921  				Annotations:       obj.Annotations,
   922  				ResourceVersion:   obj.ResourceVersion,
   923  				CreationTimestamp: obj.CreationTimestamp.Time,
   924  				OwnerReferences:   obj.OwnerReferences,
   925  				UID:               string(obj.UID),
   926  				Generation:        obj.Generation,
   927  			},
   928  			Spec: obj,
   929  		}
   930  	},
   931  	gvk.Endpoints: func(r runtime.Object) config.Config {
   932  		obj := r.(*k8sioapicorev1.Endpoints)
   933  		return config.Config{
   934  			Meta: config.Meta{
   935  				GroupVersionKind:  gvk.Endpoints,
   936  				Name:              obj.Name,
   937  				Namespace:         obj.Namespace,
   938  				Labels:            obj.Labels,
   939  				Annotations:       obj.Annotations,
   940  				ResourceVersion:   obj.ResourceVersion,
   941  				CreationTimestamp: obj.CreationTimestamp.Time,
   942  				OwnerReferences:   obj.OwnerReferences,
   943  				UID:               string(obj.UID),
   944  				Generation:        obj.Generation,
   945  			},
   946  			Spec: obj,
   947  		}
   948  	},
   949  	gvk.EnvoyFilter: func(r runtime.Object) config.Config {
   950  		obj := r.(*apiistioioapinetworkingv1alpha3.EnvoyFilter)
   951  		return config.Config{
   952  			Meta: config.Meta{
   953  				GroupVersionKind:  gvk.EnvoyFilter,
   954  				Name:              obj.Name,
   955  				Namespace:         obj.Namespace,
   956  				Labels:            obj.Labels,
   957  				Annotations:       obj.Annotations,
   958  				ResourceVersion:   obj.ResourceVersion,
   959  				CreationTimestamp: obj.CreationTimestamp.Time,
   960  				OwnerReferences:   obj.OwnerReferences,
   961  				UID:               string(obj.UID),
   962  				Generation:        obj.Generation,
   963  			},
   964  			Spec:   &obj.Spec,
   965  			Status: &obj.Status,
   966  		}
   967  	},
   968  	gvk.GRPCRoute: func(r runtime.Object) config.Config {
   969  		obj := r.(*sigsk8siogatewayapiapisv1.GRPCRoute)
   970  		return config.Config{
   971  			Meta: config.Meta{
   972  				GroupVersionKind:  gvk.GRPCRoute,
   973  				Name:              obj.Name,
   974  				Namespace:         obj.Namespace,
   975  				Labels:            obj.Labels,
   976  				Annotations:       obj.Annotations,
   977  				ResourceVersion:   obj.ResourceVersion,
   978  				CreationTimestamp: obj.CreationTimestamp.Time,
   979  				OwnerReferences:   obj.OwnerReferences,
   980  				UID:               string(obj.UID),
   981  				Generation:        obj.Generation,
   982  			},
   983  			Spec:   &obj.Spec,
   984  			Status: &obj.Status,
   985  		}
   986  	},
   987  	gvk.Gateway: func(r runtime.Object) config.Config {
   988  		obj := r.(*apiistioioapinetworkingv1alpha3.Gateway)
   989  		return config.Config{
   990  			Meta: config.Meta{
   991  				GroupVersionKind:  gvk.Gateway,
   992  				Name:              obj.Name,
   993  				Namespace:         obj.Namespace,
   994  				Labels:            obj.Labels,
   995  				Annotations:       obj.Annotations,
   996  				ResourceVersion:   obj.ResourceVersion,
   997  				CreationTimestamp: obj.CreationTimestamp.Time,
   998  				OwnerReferences:   obj.OwnerReferences,
   999  				UID:               string(obj.UID),
  1000  				Generation:        obj.Generation,
  1001  			},
  1002  			Spec:   &obj.Spec,
  1003  			Status: &obj.Status,
  1004  		}
  1005  	},
  1006  	gvk.GatewayClass: func(r runtime.Object) config.Config {
  1007  		obj := r.(*sigsk8siogatewayapiapisv1beta1.GatewayClass)
  1008  		return config.Config{
  1009  			Meta: config.Meta{
  1010  				GroupVersionKind:  gvk.GatewayClass,
  1011  				Name:              obj.Name,
  1012  				Namespace:         obj.Namespace,
  1013  				Labels:            obj.Labels,
  1014  				Annotations:       obj.Annotations,
  1015  				ResourceVersion:   obj.ResourceVersion,
  1016  				CreationTimestamp: obj.CreationTimestamp.Time,
  1017  				OwnerReferences:   obj.OwnerReferences,
  1018  				UID:               string(obj.UID),
  1019  				Generation:        obj.Generation,
  1020  			},
  1021  			Spec:   &obj.Spec,
  1022  			Status: &obj.Status,
  1023  		}
  1024  	},
  1025  	gvk.HTTPRoute: func(r runtime.Object) config.Config {
  1026  		obj := r.(*sigsk8siogatewayapiapisv1beta1.HTTPRoute)
  1027  		return config.Config{
  1028  			Meta: config.Meta{
  1029  				GroupVersionKind:  gvk.HTTPRoute,
  1030  				Name:              obj.Name,
  1031  				Namespace:         obj.Namespace,
  1032  				Labels:            obj.Labels,
  1033  				Annotations:       obj.Annotations,
  1034  				ResourceVersion:   obj.ResourceVersion,
  1035  				CreationTimestamp: obj.CreationTimestamp.Time,
  1036  				OwnerReferences:   obj.OwnerReferences,
  1037  				UID:               string(obj.UID),
  1038  				Generation:        obj.Generation,
  1039  			},
  1040  			Spec:   &obj.Spec,
  1041  			Status: &obj.Status,
  1042  		}
  1043  	},
  1044  	gvk.Ingress: func(r runtime.Object) config.Config {
  1045  		obj := r.(*k8sioapinetworkingv1.Ingress)
  1046  		return config.Config{
  1047  			Meta: config.Meta{
  1048  				GroupVersionKind:  gvk.Ingress,
  1049  				Name:              obj.Name,
  1050  				Namespace:         obj.Namespace,
  1051  				Labels:            obj.Labels,
  1052  				Annotations:       obj.Annotations,
  1053  				ResourceVersion:   obj.ResourceVersion,
  1054  				CreationTimestamp: obj.CreationTimestamp.Time,
  1055  				OwnerReferences:   obj.OwnerReferences,
  1056  				UID:               string(obj.UID),
  1057  				Generation:        obj.Generation,
  1058  			},
  1059  			Spec:   &obj.Spec,
  1060  			Status: &obj.Status,
  1061  		}
  1062  	},
  1063  	gvk.IngressClass: func(r runtime.Object) config.Config {
  1064  		obj := r.(*k8sioapinetworkingv1.IngressClass)
  1065  		return config.Config{
  1066  			Meta: config.Meta{
  1067  				GroupVersionKind:  gvk.IngressClass,
  1068  				Name:              obj.Name,
  1069  				Namespace:         obj.Namespace,
  1070  				Labels:            obj.Labels,
  1071  				Annotations:       obj.Annotations,
  1072  				ResourceVersion:   obj.ResourceVersion,
  1073  				CreationTimestamp: obj.CreationTimestamp.Time,
  1074  				OwnerReferences:   obj.OwnerReferences,
  1075  				UID:               string(obj.UID),
  1076  				Generation:        obj.Generation,
  1077  			},
  1078  			Spec: &obj.Spec,
  1079  		}
  1080  	},
  1081  	gvk.KubernetesGateway: func(r runtime.Object) config.Config {
  1082  		obj := r.(*sigsk8siogatewayapiapisv1beta1.Gateway)
  1083  		return config.Config{
  1084  			Meta: config.Meta{
  1085  				GroupVersionKind:  gvk.KubernetesGateway,
  1086  				Name:              obj.Name,
  1087  				Namespace:         obj.Namespace,
  1088  				Labels:            obj.Labels,
  1089  				Annotations:       obj.Annotations,
  1090  				ResourceVersion:   obj.ResourceVersion,
  1091  				CreationTimestamp: obj.CreationTimestamp.Time,
  1092  				OwnerReferences:   obj.OwnerReferences,
  1093  				UID:               string(obj.UID),
  1094  				Generation:        obj.Generation,
  1095  			},
  1096  			Spec:   &obj.Spec,
  1097  			Status: &obj.Status,
  1098  		}
  1099  	},
  1100  	gvk.Lease: func(r runtime.Object) config.Config {
  1101  		obj := r.(*k8sioapicoordinationv1.Lease)
  1102  		return config.Config{
  1103  			Meta: config.Meta{
  1104  				GroupVersionKind:  gvk.Lease,
  1105  				Name:              obj.Name,
  1106  				Namespace:         obj.Namespace,
  1107  				Labels:            obj.Labels,
  1108  				Annotations:       obj.Annotations,
  1109  				ResourceVersion:   obj.ResourceVersion,
  1110  				CreationTimestamp: obj.CreationTimestamp.Time,
  1111  				OwnerReferences:   obj.OwnerReferences,
  1112  				UID:               string(obj.UID),
  1113  				Generation:        obj.Generation,
  1114  			},
  1115  			Spec: &obj.Spec,
  1116  		}
  1117  	},
  1118  	gvk.MutatingWebhookConfiguration: func(r runtime.Object) config.Config {
  1119  		obj := r.(*k8sioapiadmissionregistrationv1.MutatingWebhookConfiguration)
  1120  		return config.Config{
  1121  			Meta: config.Meta{
  1122  				GroupVersionKind:  gvk.MutatingWebhookConfiguration,
  1123  				Name:              obj.Name,
  1124  				Namespace:         obj.Namespace,
  1125  				Labels:            obj.Labels,
  1126  				Annotations:       obj.Annotations,
  1127  				ResourceVersion:   obj.ResourceVersion,
  1128  				CreationTimestamp: obj.CreationTimestamp.Time,
  1129  				OwnerReferences:   obj.OwnerReferences,
  1130  				UID:               string(obj.UID),
  1131  				Generation:        obj.Generation,
  1132  			},
  1133  			Spec: obj,
  1134  		}
  1135  	},
  1136  	gvk.Namespace: func(r runtime.Object) config.Config {
  1137  		obj := r.(*k8sioapicorev1.Namespace)
  1138  		return config.Config{
  1139  			Meta: config.Meta{
  1140  				GroupVersionKind:  gvk.Namespace,
  1141  				Name:              obj.Name,
  1142  				Namespace:         obj.Namespace,
  1143  				Labels:            obj.Labels,
  1144  				Annotations:       obj.Annotations,
  1145  				ResourceVersion:   obj.ResourceVersion,
  1146  				CreationTimestamp: obj.CreationTimestamp.Time,
  1147  				OwnerReferences:   obj.OwnerReferences,
  1148  				UID:               string(obj.UID),
  1149  				Generation:        obj.Generation,
  1150  			},
  1151  			Spec: &obj.Spec,
  1152  		}
  1153  	},
  1154  	gvk.Node: func(r runtime.Object) config.Config {
  1155  		obj := r.(*k8sioapicorev1.Node)
  1156  		return config.Config{
  1157  			Meta: config.Meta{
  1158  				GroupVersionKind:  gvk.Node,
  1159  				Name:              obj.Name,
  1160  				Namespace:         obj.Namespace,
  1161  				Labels:            obj.Labels,
  1162  				Annotations:       obj.Annotations,
  1163  				ResourceVersion:   obj.ResourceVersion,
  1164  				CreationTimestamp: obj.CreationTimestamp.Time,
  1165  				OwnerReferences:   obj.OwnerReferences,
  1166  				UID:               string(obj.UID),
  1167  				Generation:        obj.Generation,
  1168  			},
  1169  			Spec: &obj.Spec,
  1170  		}
  1171  	},
  1172  	gvk.PeerAuthentication: func(r runtime.Object) config.Config {
  1173  		obj := r.(*apiistioioapisecurityv1beta1.PeerAuthentication)
  1174  		return config.Config{
  1175  			Meta: config.Meta{
  1176  				GroupVersionKind:  gvk.PeerAuthentication,
  1177  				Name:              obj.Name,
  1178  				Namespace:         obj.Namespace,
  1179  				Labels:            obj.Labels,
  1180  				Annotations:       obj.Annotations,
  1181  				ResourceVersion:   obj.ResourceVersion,
  1182  				CreationTimestamp: obj.CreationTimestamp.Time,
  1183  				OwnerReferences:   obj.OwnerReferences,
  1184  				UID:               string(obj.UID),
  1185  				Generation:        obj.Generation,
  1186  			},
  1187  			Spec:   &obj.Spec,
  1188  			Status: &obj.Status,
  1189  		}
  1190  	},
  1191  	gvk.Pod: func(r runtime.Object) config.Config {
  1192  		obj := r.(*k8sioapicorev1.Pod)
  1193  		return config.Config{
  1194  			Meta: config.Meta{
  1195  				GroupVersionKind:  gvk.Pod,
  1196  				Name:              obj.Name,
  1197  				Namespace:         obj.Namespace,
  1198  				Labels:            obj.Labels,
  1199  				Annotations:       obj.Annotations,
  1200  				ResourceVersion:   obj.ResourceVersion,
  1201  				CreationTimestamp: obj.CreationTimestamp.Time,
  1202  				OwnerReferences:   obj.OwnerReferences,
  1203  				UID:               string(obj.UID),
  1204  				Generation:        obj.Generation,
  1205  			},
  1206  			Spec: &obj.Spec,
  1207  		}
  1208  	},
  1209  	gvk.ProxyConfig: func(r runtime.Object) config.Config {
  1210  		obj := r.(*apiistioioapinetworkingv1beta1.ProxyConfig)
  1211  		return config.Config{
  1212  			Meta: config.Meta{
  1213  				GroupVersionKind:  gvk.ProxyConfig,
  1214  				Name:              obj.Name,
  1215  				Namespace:         obj.Namespace,
  1216  				Labels:            obj.Labels,
  1217  				Annotations:       obj.Annotations,
  1218  				ResourceVersion:   obj.ResourceVersion,
  1219  				CreationTimestamp: obj.CreationTimestamp.Time,
  1220  				OwnerReferences:   obj.OwnerReferences,
  1221  				UID:               string(obj.UID),
  1222  				Generation:        obj.Generation,
  1223  			},
  1224  			Spec:   &obj.Spec,
  1225  			Status: &obj.Status,
  1226  		}
  1227  	},
  1228  	gvk.ReferenceGrant: func(r runtime.Object) config.Config {
  1229  		obj := r.(*sigsk8siogatewayapiapisv1beta1.ReferenceGrant)
  1230  		return config.Config{
  1231  			Meta: config.Meta{
  1232  				GroupVersionKind:  gvk.ReferenceGrant,
  1233  				Name:              obj.Name,
  1234  				Namespace:         obj.Namespace,
  1235  				Labels:            obj.Labels,
  1236  				Annotations:       obj.Annotations,
  1237  				ResourceVersion:   obj.ResourceVersion,
  1238  				CreationTimestamp: obj.CreationTimestamp.Time,
  1239  				OwnerReferences:   obj.OwnerReferences,
  1240  				UID:               string(obj.UID),
  1241  				Generation:        obj.Generation,
  1242  			},
  1243  			Spec: &obj.Spec,
  1244  		}
  1245  	},
  1246  	gvk.RequestAuthentication: func(r runtime.Object) config.Config {
  1247  		obj := r.(*apiistioioapisecurityv1beta1.RequestAuthentication)
  1248  		return config.Config{
  1249  			Meta: config.Meta{
  1250  				GroupVersionKind:  gvk.RequestAuthentication,
  1251  				Name:              obj.Name,
  1252  				Namespace:         obj.Namespace,
  1253  				Labels:            obj.Labels,
  1254  				Annotations:       obj.Annotations,
  1255  				ResourceVersion:   obj.ResourceVersion,
  1256  				CreationTimestamp: obj.CreationTimestamp.Time,
  1257  				OwnerReferences:   obj.OwnerReferences,
  1258  				UID:               string(obj.UID),
  1259  				Generation:        obj.Generation,
  1260  			},
  1261  			Spec:   &obj.Spec,
  1262  			Status: &obj.Status,
  1263  		}
  1264  	},
  1265  	gvk.Secret: func(r runtime.Object) config.Config {
  1266  		obj := r.(*k8sioapicorev1.Secret)
  1267  		return config.Config{
  1268  			Meta: config.Meta{
  1269  				GroupVersionKind:  gvk.Secret,
  1270  				Name:              obj.Name,
  1271  				Namespace:         obj.Namespace,
  1272  				Labels:            obj.Labels,
  1273  				Annotations:       obj.Annotations,
  1274  				ResourceVersion:   obj.ResourceVersion,
  1275  				CreationTimestamp: obj.CreationTimestamp.Time,
  1276  				OwnerReferences:   obj.OwnerReferences,
  1277  				UID:               string(obj.UID),
  1278  				Generation:        obj.Generation,
  1279  			},
  1280  			Spec: obj,
  1281  		}
  1282  	},
  1283  	gvk.Service: func(r runtime.Object) config.Config {
  1284  		obj := r.(*k8sioapicorev1.Service)
  1285  		return config.Config{
  1286  			Meta: config.Meta{
  1287  				GroupVersionKind:  gvk.Service,
  1288  				Name:              obj.Name,
  1289  				Namespace:         obj.Namespace,
  1290  				Labels:            obj.Labels,
  1291  				Annotations:       obj.Annotations,
  1292  				ResourceVersion:   obj.ResourceVersion,
  1293  				CreationTimestamp: obj.CreationTimestamp.Time,
  1294  				OwnerReferences:   obj.OwnerReferences,
  1295  				UID:               string(obj.UID),
  1296  				Generation:        obj.Generation,
  1297  			},
  1298  			Spec: &obj.Spec,
  1299  		}
  1300  	},
  1301  	gvk.ServiceAccount: func(r runtime.Object) config.Config {
  1302  		obj := r.(*k8sioapicorev1.ServiceAccount)
  1303  		return config.Config{
  1304  			Meta: config.Meta{
  1305  				GroupVersionKind:  gvk.ServiceAccount,
  1306  				Name:              obj.Name,
  1307  				Namespace:         obj.Namespace,
  1308  				Labels:            obj.Labels,
  1309  				Annotations:       obj.Annotations,
  1310  				ResourceVersion:   obj.ResourceVersion,
  1311  				CreationTimestamp: obj.CreationTimestamp.Time,
  1312  				OwnerReferences:   obj.OwnerReferences,
  1313  				UID:               string(obj.UID),
  1314  				Generation:        obj.Generation,
  1315  			},
  1316  			Spec: obj,
  1317  		}
  1318  	},
  1319  	gvk.ServiceEntry: func(r runtime.Object) config.Config {
  1320  		obj := r.(*apiistioioapinetworkingv1alpha3.ServiceEntry)
  1321  		return config.Config{
  1322  			Meta: config.Meta{
  1323  				GroupVersionKind:  gvk.ServiceEntry,
  1324  				Name:              obj.Name,
  1325  				Namespace:         obj.Namespace,
  1326  				Labels:            obj.Labels,
  1327  				Annotations:       obj.Annotations,
  1328  				ResourceVersion:   obj.ResourceVersion,
  1329  				CreationTimestamp: obj.CreationTimestamp.Time,
  1330  				OwnerReferences:   obj.OwnerReferences,
  1331  				UID:               string(obj.UID),
  1332  				Generation:        obj.Generation,
  1333  			},
  1334  			Spec:   &obj.Spec,
  1335  			Status: &obj.Status,
  1336  		}
  1337  	},
  1338  	gvk.Sidecar: func(r runtime.Object) config.Config {
  1339  		obj := r.(*apiistioioapinetworkingv1alpha3.Sidecar)
  1340  		return config.Config{
  1341  			Meta: config.Meta{
  1342  				GroupVersionKind:  gvk.Sidecar,
  1343  				Name:              obj.Name,
  1344  				Namespace:         obj.Namespace,
  1345  				Labels:            obj.Labels,
  1346  				Annotations:       obj.Annotations,
  1347  				ResourceVersion:   obj.ResourceVersion,
  1348  				CreationTimestamp: obj.CreationTimestamp.Time,
  1349  				OwnerReferences:   obj.OwnerReferences,
  1350  				UID:               string(obj.UID),
  1351  				Generation:        obj.Generation,
  1352  			},
  1353  			Spec:   &obj.Spec,
  1354  			Status: &obj.Status,
  1355  		}
  1356  	},
  1357  	gvk.StatefulSet: func(r runtime.Object) config.Config {
  1358  		obj := r.(*k8sioapiappsv1.StatefulSet)
  1359  		return config.Config{
  1360  			Meta: config.Meta{
  1361  				GroupVersionKind:  gvk.StatefulSet,
  1362  				Name:              obj.Name,
  1363  				Namespace:         obj.Namespace,
  1364  				Labels:            obj.Labels,
  1365  				Annotations:       obj.Annotations,
  1366  				ResourceVersion:   obj.ResourceVersion,
  1367  				CreationTimestamp: obj.CreationTimestamp.Time,
  1368  				OwnerReferences:   obj.OwnerReferences,
  1369  				UID:               string(obj.UID),
  1370  				Generation:        obj.Generation,
  1371  			},
  1372  			Spec: &obj.Spec,
  1373  		}
  1374  	},
  1375  	gvk.TCPRoute: func(r runtime.Object) config.Config {
  1376  		obj := r.(*sigsk8siogatewayapiapisv1alpha2.TCPRoute)
  1377  		return config.Config{
  1378  			Meta: config.Meta{
  1379  				GroupVersionKind:  gvk.TCPRoute,
  1380  				Name:              obj.Name,
  1381  				Namespace:         obj.Namespace,
  1382  				Labels:            obj.Labels,
  1383  				Annotations:       obj.Annotations,
  1384  				ResourceVersion:   obj.ResourceVersion,
  1385  				CreationTimestamp: obj.CreationTimestamp.Time,
  1386  				OwnerReferences:   obj.OwnerReferences,
  1387  				UID:               string(obj.UID),
  1388  				Generation:        obj.Generation,
  1389  			},
  1390  			Spec:   &obj.Spec,
  1391  			Status: &obj.Status,
  1392  		}
  1393  	},
  1394  	gvk.TLSRoute: func(r runtime.Object) config.Config {
  1395  		obj := r.(*sigsk8siogatewayapiapisv1alpha2.TLSRoute)
  1396  		return config.Config{
  1397  			Meta: config.Meta{
  1398  				GroupVersionKind:  gvk.TLSRoute,
  1399  				Name:              obj.Name,
  1400  				Namespace:         obj.Namespace,
  1401  				Labels:            obj.Labels,
  1402  				Annotations:       obj.Annotations,
  1403  				ResourceVersion:   obj.ResourceVersion,
  1404  				CreationTimestamp: obj.CreationTimestamp.Time,
  1405  				OwnerReferences:   obj.OwnerReferences,
  1406  				UID:               string(obj.UID),
  1407  				Generation:        obj.Generation,
  1408  			},
  1409  			Spec:   &obj.Spec,
  1410  			Status: &obj.Status,
  1411  		}
  1412  	},
  1413  	gvk.Telemetry: func(r runtime.Object) config.Config {
  1414  		obj := r.(*apiistioioapitelemetryv1alpha1.Telemetry)
  1415  		return config.Config{
  1416  			Meta: config.Meta{
  1417  				GroupVersionKind:  gvk.Telemetry,
  1418  				Name:              obj.Name,
  1419  				Namespace:         obj.Namespace,
  1420  				Labels:            obj.Labels,
  1421  				Annotations:       obj.Annotations,
  1422  				ResourceVersion:   obj.ResourceVersion,
  1423  				CreationTimestamp: obj.CreationTimestamp.Time,
  1424  				OwnerReferences:   obj.OwnerReferences,
  1425  				UID:               string(obj.UID),
  1426  				Generation:        obj.Generation,
  1427  			},
  1428  			Spec:   &obj.Spec,
  1429  			Status: &obj.Status,
  1430  		}
  1431  	},
  1432  	gvk.UDPRoute: func(r runtime.Object) config.Config {
  1433  		obj := r.(*sigsk8siogatewayapiapisv1alpha2.UDPRoute)
  1434  		return config.Config{
  1435  			Meta: config.Meta{
  1436  				GroupVersionKind:  gvk.UDPRoute,
  1437  				Name:              obj.Name,
  1438  				Namespace:         obj.Namespace,
  1439  				Labels:            obj.Labels,
  1440  				Annotations:       obj.Annotations,
  1441  				ResourceVersion:   obj.ResourceVersion,
  1442  				CreationTimestamp: obj.CreationTimestamp.Time,
  1443  				OwnerReferences:   obj.OwnerReferences,
  1444  				UID:               string(obj.UID),
  1445  				Generation:        obj.Generation,
  1446  			},
  1447  			Spec:   &obj.Spec,
  1448  			Status: &obj.Status,
  1449  		}
  1450  	},
  1451  	gvk.ValidatingWebhookConfiguration: func(r runtime.Object) config.Config {
  1452  		obj := r.(*k8sioapiadmissionregistrationv1.ValidatingWebhookConfiguration)
  1453  		return config.Config{
  1454  			Meta: config.Meta{
  1455  				GroupVersionKind:  gvk.ValidatingWebhookConfiguration,
  1456  				Name:              obj.Name,
  1457  				Namespace:         obj.Namespace,
  1458  				Labels:            obj.Labels,
  1459  				Annotations:       obj.Annotations,
  1460  				ResourceVersion:   obj.ResourceVersion,
  1461  				CreationTimestamp: obj.CreationTimestamp.Time,
  1462  				OwnerReferences:   obj.OwnerReferences,
  1463  				UID:               string(obj.UID),
  1464  				Generation:        obj.Generation,
  1465  			},
  1466  			Spec: obj,
  1467  		}
  1468  	},
  1469  	gvk.VirtualService: func(r runtime.Object) config.Config {
  1470  		obj := r.(*apiistioioapinetworkingv1alpha3.VirtualService)
  1471  		return config.Config{
  1472  			Meta: config.Meta{
  1473  				GroupVersionKind:  gvk.VirtualService,
  1474  				Name:              obj.Name,
  1475  				Namespace:         obj.Namespace,
  1476  				Labels:            obj.Labels,
  1477  				Annotations:       obj.Annotations,
  1478  				ResourceVersion:   obj.ResourceVersion,
  1479  				CreationTimestamp: obj.CreationTimestamp.Time,
  1480  				OwnerReferences:   obj.OwnerReferences,
  1481  				UID:               string(obj.UID),
  1482  				Generation:        obj.Generation,
  1483  			},
  1484  			Spec:   &obj.Spec,
  1485  			Status: &obj.Status,
  1486  		}
  1487  	},
  1488  	gvk.WasmPlugin: func(r runtime.Object) config.Config {
  1489  		obj := r.(*apiistioioapiextensionsv1alpha1.WasmPlugin)
  1490  		return config.Config{
  1491  			Meta: config.Meta{
  1492  				GroupVersionKind:  gvk.WasmPlugin,
  1493  				Name:              obj.Name,
  1494  				Namespace:         obj.Namespace,
  1495  				Labels:            obj.Labels,
  1496  				Annotations:       obj.Annotations,
  1497  				ResourceVersion:   obj.ResourceVersion,
  1498  				CreationTimestamp: obj.CreationTimestamp.Time,
  1499  				OwnerReferences:   obj.OwnerReferences,
  1500  				UID:               string(obj.UID),
  1501  				Generation:        obj.Generation,
  1502  			},
  1503  			Spec:   &obj.Spec,
  1504  			Status: &obj.Status,
  1505  		}
  1506  	},
  1507  	gvk.WorkloadEntry: func(r runtime.Object) config.Config {
  1508  		obj := r.(*apiistioioapinetworkingv1alpha3.WorkloadEntry)
  1509  		return config.Config{
  1510  			Meta: config.Meta{
  1511  				GroupVersionKind:  gvk.WorkloadEntry,
  1512  				Name:              obj.Name,
  1513  				Namespace:         obj.Namespace,
  1514  				Labels:            obj.Labels,
  1515  				Annotations:       obj.Annotations,
  1516  				ResourceVersion:   obj.ResourceVersion,
  1517  				CreationTimestamp: obj.CreationTimestamp.Time,
  1518  				OwnerReferences:   obj.OwnerReferences,
  1519  				UID:               string(obj.UID),
  1520  				Generation:        obj.Generation,
  1521  			},
  1522  			Spec:   &obj.Spec,
  1523  			Status: &obj.Status,
  1524  		}
  1525  	},
  1526  	gvk.WorkloadGroup: func(r runtime.Object) config.Config {
  1527  		obj := r.(*apiistioioapinetworkingv1alpha3.WorkloadGroup)
  1528  		return config.Config{
  1529  			Meta: config.Meta{
  1530  				GroupVersionKind:  gvk.WorkloadGroup,
  1531  				Name:              obj.Name,
  1532  				Namespace:         obj.Namespace,
  1533  				Labels:            obj.Labels,
  1534  				Annotations:       obj.Annotations,
  1535  				ResourceVersion:   obj.ResourceVersion,
  1536  				CreationTimestamp: obj.CreationTimestamp.Time,
  1537  				OwnerReferences:   obj.OwnerReferences,
  1538  				UID:               string(obj.UID),
  1539  				Generation:        obj.Generation,
  1540  			},
  1541  			Spec:   &obj.Spec,
  1542  			Status: &obj.Status,
  1543  		}
  1544  	},
  1545  }