github.com/pulumi/pulumi-kubernetes/sdk/v3@v3.30.2/go/kubernetes/yaml/yaml.go (about)

     1  // Copyright 2016-2021, Pulumi Corporation.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // *** WARNING: this file was generated by pulumigen. ***
    16  // *** Do not edit by hand unless you're certain you know what you are doing! ***
    17  
    18  package yaml
    19  
    20  import (
    21  	"fmt"
    22  	"io"
    23  	"net/http"
    24  	"net/url"
    25  	"os"
    26  	"path/filepath"
    27  
    28  	"github.com/pkg/errors"
    29  	"github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes"
    30  	admissionregistrationv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/admissionregistration/v1"
    31  	admissionregistrationv1alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/admissionregistration/v1alpha1"
    32  	admissionregistrationv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/admissionregistration/v1beta1"
    33  	"github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/apiextensions"
    34  	apiextensionsv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/apiextensions/v1"
    35  	apiextensionsv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/apiextensions/v1beta1"
    36  	apiregistrationv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/apiregistration/v1"
    37  	apiregistrationv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/apiregistration/v1beta1"
    38  	appsv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/apps/v1"
    39  	appsv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/apps/v1beta1"
    40  	appsv1beta2 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/apps/v1beta2"
    41  	auditregistrationv1alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/auditregistration/v1alpha1"
    42  	autoscalingv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/autoscaling/v1"
    43  	autoscalingv2 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/autoscaling/v2"
    44  	autoscalingv2beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/autoscaling/v2beta1"
    45  	autoscalingv2beta2 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/autoscaling/v2beta2"
    46  	batchv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/batch/v1"
    47  	batchv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/batch/v1beta1"
    48  	batchv2alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/batch/v2alpha1"
    49  	certificatesv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/certificates/v1"
    50  	certificatesv1alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/certificates/v1alpha1"
    51  	certificatesv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/certificates/v1beta1"
    52  	coordinationv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/coordination/v1"
    53  	coordinationv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/coordination/v1beta1"
    54  	corev1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/core/v1"
    55  	discoveryv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/discovery/v1"
    56  	discoveryv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/discovery/v1beta1"
    57  	eventsv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/events/v1"
    58  	eventsv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/events/v1beta1"
    59  	extensionsv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/extensions/v1beta1"
    60  	flowcontrolv1alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/flowcontrol/v1alpha1"
    61  	flowcontrolv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/flowcontrol/v1beta1"
    62  	flowcontrolv1beta2 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/flowcontrol/v1beta2"
    63  	flowcontrolv1beta3 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/flowcontrol/v1beta3"
    64  	metav1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/meta/v1"
    65  	networkingv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/networking/v1"
    66  	networkingv1alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/networking/v1alpha1"
    67  	networkingv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/networking/v1beta1"
    68  	nodev1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/node/v1"
    69  	nodev1alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/node/v1alpha1"
    70  	nodev1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/node/v1beta1"
    71  	policyv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/policy/v1"
    72  	policyv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/policy/v1beta1"
    73  	rbacv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/rbac/v1"
    74  	rbacv1alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/rbac/v1alpha1"
    75  	rbacv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/rbac/v1beta1"
    76  	resourcev1alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/resource/v1alpha1"
    77  	resourcev1alpha2 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/resource/v1alpha2"
    78  	schedulingv1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/scheduling/v1"
    79  	schedulingv1alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/scheduling/v1alpha1"
    80  	schedulingv1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/scheduling/v1beta1"
    81  	settingsv1alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/settings/v1alpha1"
    82  	storagev1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/storage/v1"
    83  	storagev1alpha1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/storage/v1alpha1"
    84  	storagev1beta1 "github.com/pulumi/pulumi-kubernetes/sdk/v3/go/kubernetes/storage/v1beta1"
    85  	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    86  )
    87  
    88  func parseDecodeYamlFiles(ctx *pulumi.Context, args *ConfigGroupArgs, glob bool, opts ...pulumi.ResourceOption,
    89  ) (map[string]pulumi.Resource, error) {
    90  
    91  	// Start with the provided objects and YAML arrays, if any, and we'll append to them.
    92  	objs := args.Objs
    93  	yamls := args.YAML
    94  
    95  	// Start by gathering up any other YAML from files provided.
    96  	for _, file := range args.Files {
    97  		// Read the raw YAML file(s) specified in the input file parameter. It might be a URL or a file path.
    98  		var yaml []byte
    99  		u, err := url.Parse(file)
   100  		if err == nil && u.IsAbs() {
   101  			// If the string looks like a URL, in that it begins with a scheme, fetch it over the network.
   102  			resp, err := http.Get(file)
   103  			if err != nil {
   104  				return nil, errors.Wrapf(err, "fetching YAML over network")
   105  			}
   106  			defer resp.Body.Close()
   107  			yaml, err = io.ReadAll(resp.Body)
   108  			if err != nil {
   109  				return nil, errors.Wrapf(err, "reading YAML over network")
   110  			}
   111  			yamls = append(yamls, string(yaml))
   112  		} else {
   113  			// Otherwise, assume this is a path to a file on disk. If globbing is enabled, we might have
   114  			// multiple files -- otherwise just read a singular file.
   115  			var files []string
   116  			if glob {
   117  				files, err = filepath.Glob(file)
   118  				if err != nil {
   119  					return nil, errors.Wrapf(err, "expanding glob")
   120  				}
   121  			} else {
   122  				files = []string{file}
   123  			}
   124  			for _, f := range files {
   125  				yaml, err = os.ReadFile(f)
   126  				if err != nil {
   127  					return nil, errors.Wrapf(err, "reading YAML file from disk")
   128  				}
   129  				yamls = append(yamls, string(yaml))
   130  			}
   131  		}
   132  	}
   133  
   134  	// Find options which are also Invoke options, and prepare them to pass to Invoke functions
   135  	var invokeOpts []pulumi.InvokeOption
   136  	for _, opt := range opts {
   137  		if invokeOpt, ok := opt.(pulumi.InvokeOption); ok {
   138  			invokeOpts = append(invokeOpts, invokeOpt)
   139  		}
   140  	}
   141  
   142  	// Next parse all YAML documents into objects.
   143  	for _, yaml := range yamls {
   144  		// Parse the resulting YAML bytes and turn them into raw Kubernetes objects.
   145  		dec, err := yamlDecode(ctx, yaml, invokeOpts...)
   146  		if err != nil {
   147  			return nil, errors.Wrapf(err, "decoding YAML")
   148  		}
   149  		objs = append(objs, dec...)
   150  	}
   151  
   152  	transformations := args.Transformations
   153  	if args.SkipAwait {
   154  		transformations = AddSkipAwaitTransformation(transformations)
   155  	}
   156  
   157  	// Now process the resulting list of Kubernetes objects.
   158  	return ParseYamlObjects(ctx, objs, transformations, args.ResourcePrefix, opts...)
   159  }
   160  
   161  // AddSkipAwaitTransformation adds a transformation to set the "pulumi.com/skipAwait" annotation
   162  func AddSkipAwaitTransformation(transformations []Transformation) []Transformation {
   163  	transformations = append(transformations, func(obj map[string]interface{}, opts ...pulumi.ResourceOption) {
   164  		metadata := obj["metadata"].(map[string]interface{})
   165  		if annotations, ok := metadata["annotations"].(map[string]interface{}); ok {
   166  			annotations["pulumi.com/skipAwait"] = "true"
   167  		} else {
   168  			metadata["annotations"] = map[string]string{"pulumi.com/skipAwait": "true"}
   169  		}
   170  	})
   171  
   172  	return transformations
   173  }
   174  
   175  // yamlDecode invokes the function to decode a single YAML file and decompose it into object structures.
   176  func yamlDecode(ctx *pulumi.Context, text string, opts ...pulumi.InvokeOption) ([]map[string]interface{}, error) {
   177  	args := struct {
   178  		Text string `pulumi:"text"`
   179  	}{Text: text}
   180  	var ret struct {
   181  		Result []map[string]interface{} `pulumi:"result"`
   182  	}
   183  
   184  	if err := ctx.Invoke("kubernetes:yaml:decode", &args, &ret, opts...); err != nil {
   185  		return nil, err
   186  	}
   187  	return ret.Result, nil
   188  }
   189  
   190  func ParseYamlObjects(ctx *pulumi.Context, objs []map[string]interface{}, transformations []Transformation,
   191  	resourcePrefix string, opts ...pulumi.ResourceOption,
   192  ) (map[string]pulumi.Resource, error) {
   193  	var intermediates []resourceTuple
   194  	for _, obj := range objs {
   195  		res, err := parseYamlObject(ctx, obj, transformations, resourcePrefix, opts...)
   196  		if err != nil {
   197  			return nil, err
   198  		}
   199  		for _, r := range res {
   200  			intermediates = append(intermediates, r)
   201  		}
   202  	}
   203  
   204  	resources := map[string]pulumi.Resource{}
   205  	for _, r := range intermediates {
   206  		resources[r.Name] = r.Resource
   207  	}
   208  	return resources, nil
   209  }
   210  
   211  type resourceTuple struct {
   212  	Name     string
   213  	Resource pulumi.Resource
   214  }
   215  
   216  func parseYamlObject(ctx *pulumi.Context, obj map[string]interface{}, transformations []Transformation,
   217  	resourcePrefix string, opts ...pulumi.ResourceOption,
   218  ) ([]resourceTuple, error) {
   219  
   220  	// Allow users to change API objects before any validation.
   221  	for _, t := range transformations {
   222  		t(obj, opts...)
   223  	}
   224  
   225  	// Ensure there is a kind and API version.
   226  	kind, hasKind := obj["kind"]
   227  	apiVersion, hasAPIVersion := obj["apiVersion"]
   228  	if !hasKind || !hasAPIVersion {
   229  		return nil, errors.Errorf("Kubernetes resources require a kind and apiVersion: %+v", obj)
   230  	}
   231  	fullKind := fmt.Sprintf("%s/%s", apiVersion, kind)
   232  
   233  	// Recursively traverse built-in Kubernetes list types into a single set of "naked" resource
   234  	// definitions that we can register with the Pulumi engine.
   235  	//
   236  	// Kubernetes does not instantiate list types like `v1.List`. When the API server receives
   237  	// a list, it will recursively traverse it and perform the necessary operations on the
   238  	// each "instantiable" resource it finds. For example, `kubectl apply` on a
   239  	// `v1.ConfigMapList` will cause the API server to traverse the list, and `apply` each
   240  	// `v1.ConfigMap` it finds.
   241  	//
   242  	// Since Kubernetes does not instantiate list types directly, Pulumi also traverses lists
   243  	// for resource definitions that can be managed by Kubernetes, and registers those with the
   244  	// engine instead.
   245  	switch fullKind {
   246  	case "v1/List",
   247  		"admissionregistration.k8s.io/v1/MutatingWebhookConfigurationList",
   248  		"admissionregistration.k8s.io/v1/ValidatingWebhookConfigurationList",
   249  		"admissionregistration.k8s.io/v1alpha1/ValidatingAdmissionPolicyBindingList",
   250  		"admissionregistration.k8s.io/v1alpha1/ValidatingAdmissionPolicyList",
   251  		"admissionregistration.k8s.io/v1beta1/MutatingWebhookConfigurationList",
   252  		"admissionregistration.k8s.io/v1beta1/ValidatingWebhookConfigurationList",
   253  		"apiextensions.k8s.io/v1/CustomResourceDefinitionList",
   254  		"apiextensions.k8s.io/v1beta1/CustomResourceDefinitionList",
   255  		"apiregistration.k8s.io/v1/APIServiceList",
   256  		"apiregistration.k8s.io/v1beta1/APIServiceList",
   257  		"apps/v1/ControllerRevisionList",
   258  		"apps/v1/DaemonSetList",
   259  		"apps/v1/DeploymentList",
   260  		"apps/v1/ReplicaSetList",
   261  		"apps/v1/StatefulSetList",
   262  		"apps/v1beta1/ControllerRevisionList",
   263  		"apps/v1beta1/DeploymentList",
   264  		"apps/v1beta1/StatefulSetList",
   265  		"apps/v1beta2/ControllerRevisionList",
   266  		"apps/v1beta2/DaemonSetList",
   267  		"apps/v1beta2/DeploymentList",
   268  		"apps/v1beta2/ReplicaSetList",
   269  		"apps/v1beta2/StatefulSetList",
   270  		"auditregistration.k8s.io/v1alpha1/AuditSinkList",
   271  		"autoscaling/v1/HorizontalPodAutoscalerList",
   272  		"autoscaling/v2/HorizontalPodAutoscalerList",
   273  		"autoscaling/v2beta1/HorizontalPodAutoscalerList",
   274  		"autoscaling/v2beta2/HorizontalPodAutoscalerList",
   275  		"batch/v1/CronJobList",
   276  		"batch/v1/JobList",
   277  		"batch/v1beta1/CronJobList",
   278  		"batch/v2alpha1/CronJobList",
   279  		"certificates.k8s.io/v1/CertificateSigningRequestList",
   280  		"certificates.k8s.io/v1alpha1/ClusterTrustBundleList",
   281  		"certificates.k8s.io/v1beta1/CertificateSigningRequestList",
   282  		"coordination.k8s.io/v1/LeaseList",
   283  		"coordination.k8s.io/v1beta1/LeaseList",
   284  		"v1/ConfigMapList",
   285  		"v1/EndpointsList",
   286  		"v1/EventList",
   287  		"v1/LimitRangeList",
   288  		"v1/NamespaceList",
   289  		"v1/NodeList",
   290  		"v1/PersistentVolumeClaimList",
   291  		"v1/PersistentVolumeList",
   292  		"v1/PodList",
   293  		"v1/PodTemplateList",
   294  		"v1/ReplicationControllerList",
   295  		"v1/ResourceQuotaList",
   296  		"v1/SecretList",
   297  		"v1/ServiceAccountList",
   298  		"v1/ServiceList",
   299  		"discovery.k8s.io/v1/EndpointSliceList",
   300  		"discovery.k8s.io/v1beta1/EndpointSliceList",
   301  		"events.k8s.io/v1/EventList",
   302  		"events.k8s.io/v1beta1/EventList",
   303  		"extensions/v1beta1/DaemonSetList",
   304  		"extensions/v1beta1/DeploymentList",
   305  		"extensions/v1beta1/IngressList",
   306  		"extensions/v1beta1/NetworkPolicyList",
   307  		"extensions/v1beta1/PodSecurityPolicyList",
   308  		"extensions/v1beta1/ReplicaSetList",
   309  		"flowcontrol.apiserver.k8s.io/v1alpha1/FlowSchemaList",
   310  		"flowcontrol.apiserver.k8s.io/v1alpha1/PriorityLevelConfigurationList",
   311  		"flowcontrol.apiserver.k8s.io/v1beta1/FlowSchemaList",
   312  		"flowcontrol.apiserver.k8s.io/v1beta1/PriorityLevelConfigurationList",
   313  		"flowcontrol.apiserver.k8s.io/v1beta2/FlowSchemaList",
   314  		"flowcontrol.apiserver.k8s.io/v1beta2/PriorityLevelConfigurationList",
   315  		"flowcontrol.apiserver.k8s.io/v1beta3/FlowSchemaList",
   316  		"flowcontrol.apiserver.k8s.io/v1beta3/PriorityLevelConfigurationList",
   317  		"networking.k8s.io/v1/IngressClassList",
   318  		"networking.k8s.io/v1/IngressList",
   319  		"networking.k8s.io/v1/NetworkPolicyList",
   320  		"networking.k8s.io/v1alpha1/ClusterCIDRList",
   321  		"networking.k8s.io/v1alpha1/IPAddressList",
   322  		"networking.k8s.io/v1beta1/IngressClassList",
   323  		"networking.k8s.io/v1beta1/IngressList",
   324  		"node.k8s.io/v1/RuntimeClassList",
   325  		"node.k8s.io/v1alpha1/RuntimeClassList",
   326  		"node.k8s.io/v1beta1/RuntimeClassList",
   327  		"policy/v1/PodDisruptionBudgetList",
   328  		"policy/v1beta1/PodDisruptionBudgetList",
   329  		"policy/v1beta1/PodSecurityPolicyList",
   330  		"rbac.authorization.k8s.io/v1/ClusterRoleBindingList",
   331  		"rbac.authorization.k8s.io/v1/ClusterRoleList",
   332  		"rbac.authorization.k8s.io/v1/RoleBindingList",
   333  		"rbac.authorization.k8s.io/v1/RoleList",
   334  		"rbac.authorization.k8s.io/v1alpha1/ClusterRoleBindingList",
   335  		"rbac.authorization.k8s.io/v1alpha1/ClusterRoleList",
   336  		"rbac.authorization.k8s.io/v1alpha1/RoleBindingList",
   337  		"rbac.authorization.k8s.io/v1alpha1/RoleList",
   338  		"rbac.authorization.k8s.io/v1beta1/ClusterRoleBindingList",
   339  		"rbac.authorization.k8s.io/v1beta1/ClusterRoleList",
   340  		"rbac.authorization.k8s.io/v1beta1/RoleBindingList",
   341  		"rbac.authorization.k8s.io/v1beta1/RoleList",
   342  		"resource.k8s.io/v1alpha1/PodSchedulingList",
   343  		"resource.k8s.io/v1alpha1/ResourceClaimList",
   344  		"resource.k8s.io/v1alpha1/ResourceClaimTemplateList",
   345  		"resource.k8s.io/v1alpha1/ResourceClassList",
   346  		"resource.k8s.io/v1alpha2/PodSchedulingContextList",
   347  		"resource.k8s.io/v1alpha2/ResourceClaimList",
   348  		"resource.k8s.io/v1alpha2/ResourceClaimTemplateList",
   349  		"resource.k8s.io/v1alpha2/ResourceClassList",
   350  		"scheduling.k8s.io/v1/PriorityClassList",
   351  		"scheduling.k8s.io/v1alpha1/PriorityClassList",
   352  		"scheduling.k8s.io/v1beta1/PriorityClassList",
   353  		"settings.k8s.io/v1alpha1/PodPresetList",
   354  		"storage.k8s.io/v1/CSIDriverList",
   355  		"storage.k8s.io/v1/CSINodeList",
   356  		"storage.k8s.io/v1/CSIStorageCapacityList",
   357  		"storage.k8s.io/v1/StorageClassList",
   358  		"storage.k8s.io/v1/VolumeAttachmentList",
   359  		"storage.k8s.io/v1alpha1/VolumeAttachmentList",
   360  		"storage.k8s.io/v1beta1/CSIDriverList",
   361  		"storage.k8s.io/v1beta1/CSINodeList",
   362  		"storage.k8s.io/v1beta1/CSIStorageCapacityList",
   363  		"storage.k8s.io/v1beta1/StorageClassList",
   364  		"storage.k8s.io/v1beta1/VolumeAttachmentList":
   365  		var resources []resourceTuple
   366  		if rawItems, hasItems := obj["items"]; hasItems {
   367  			if items, ok := rawItems.([]interface{}); ok {
   368  				for _, item := range items {
   369  					if obj, ok := item.(map[string]interface{}); ok {
   370  						rs, err := parseYamlObject(ctx, obj, transformations, resourcePrefix, opts...)
   371  						if err != nil {
   372  							return nil, err
   373  						}
   374  						for _, r := range rs {
   375  							resources = append(resources, r)
   376  						}
   377  					}
   378  				}
   379  			}
   380  		}
   381  		return resources, nil
   382  	}
   383  
   384  	// If we got here, it's not a recursively traversed type, so process it directly.
   385  	// First, validate that it has the requisite metadata and name properties.
   386  	meta, hasMeta := obj["metadata"]
   387  	if !hasMeta {
   388  		return nil, errors.Errorf("YAML object does not have a .metadata field: %s %+v", fullKind, obj)
   389  	}
   390  	metaDict, hasMetaDict := meta.(map[string]interface{})
   391  	if !hasMetaDict {
   392  		return nil, errors.Errorf("YAML object does not have a .metadata dictionary: %s %+v", fullKind, obj)
   393  	}
   394  	metaName, hasMetaName := metaDict["name"].(string)
   395  	if !hasMetaName || metaName == "" {
   396  		return nil, errors.Errorf("YAML object does not have a .metadata.name: %s %+v", fullKind, obj)
   397  	}
   398  
   399  	// Manufacture a name as appropriate, out of the meta name, namespace, and optional prefix.
   400  	if ns, hasNS := metaDict["namespace"]; hasNS {
   401  		metaName = fmt.Sprintf("%s/%s", ns, metaName)
   402  	}
   403  	if resourcePrefix != "" {
   404  		metaName = fmt.Sprintf("%s-%s", resourcePrefix, metaName)
   405  	}
   406  
   407  	key := fmt.Sprintf("%s::%s", fullKind, metaName)
   408  
   409  	if fullKind == "v1/Secret" {
   410  		// Always mark these fields as secret to avoid leaking sensitive values from raw YAML.
   411  		for _, key := range []string{"data", "stringData"} {
   412  			if _, ok := obj[key]; ok {
   413  				obj[key] = pulumi.ToSecret(obj[key])
   414  			}
   415  		}
   416  	}
   417  
   418  	// Finally allocate a resource of the correct type.
   419  	switch fullKind {
   420  	case "admissionregistration.k8s.io/v1/MutatingWebhookConfiguration":
   421  		var res admissionregistrationv1.MutatingWebhookConfiguration
   422  		err := ctx.RegisterResource("kubernetes:admissionregistration.k8s.io/v1:MutatingWebhookConfiguration", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   423  		if err != nil {
   424  			return nil, err
   425  		}
   426  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   427  	case "admissionregistration.k8s.io/v1/ValidatingWebhookConfiguration":
   428  		var res admissionregistrationv1.ValidatingWebhookConfiguration
   429  		err := ctx.RegisterResource("kubernetes:admissionregistration.k8s.io/v1:ValidatingWebhookConfiguration", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   430  		if err != nil {
   431  			return nil, err
   432  		}
   433  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   434  	case "admissionregistration.k8s.io/v1alpha1/ValidatingAdmissionPolicy":
   435  		var res admissionregistrationv1alpha1.ValidatingAdmissionPolicy
   436  		err := ctx.RegisterResource("kubernetes:admissionregistration.k8s.io/v1alpha1:ValidatingAdmissionPolicy", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   437  		if err != nil {
   438  			return nil, err
   439  		}
   440  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   441  	case "admissionregistration.k8s.io/v1alpha1/ValidatingAdmissionPolicyBinding":
   442  		var res admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding
   443  		err := ctx.RegisterResource("kubernetes:admissionregistration.k8s.io/v1alpha1:ValidatingAdmissionPolicyBinding", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   444  		if err != nil {
   445  			return nil, err
   446  		}
   447  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   448  	case "admissionregistration.k8s.io/v1beta1/MutatingWebhookConfiguration":
   449  		var res admissionregistrationv1beta1.MutatingWebhookConfiguration
   450  		err := ctx.RegisterResource("kubernetes:admissionregistration.k8s.io/v1beta1:MutatingWebhookConfiguration", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   451  		if err != nil {
   452  			return nil, err
   453  		}
   454  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   455  	case "admissionregistration.k8s.io/v1beta1/ValidatingWebhookConfiguration":
   456  		var res admissionregistrationv1beta1.ValidatingWebhookConfiguration
   457  		err := ctx.RegisterResource("kubernetes:admissionregistration.k8s.io/v1beta1:ValidatingWebhookConfiguration", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   458  		if err != nil {
   459  			return nil, err
   460  		}
   461  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   462  	case "apiextensions.k8s.io/v1/CustomResourceDefinition":
   463  		var res apiextensionsv1.CustomResourceDefinition
   464  		err := ctx.RegisterResource("kubernetes:apiextensions.k8s.io/v1:CustomResourceDefinition", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   465  		if err != nil {
   466  			return nil, err
   467  		}
   468  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   469  	case "apiextensions.k8s.io/v1beta1/CustomResourceDefinition":
   470  		var res apiextensionsv1beta1.CustomResourceDefinition
   471  		err := ctx.RegisterResource("kubernetes:apiextensions.k8s.io/v1beta1:CustomResourceDefinition", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   472  		if err != nil {
   473  			return nil, err
   474  		}
   475  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   476  	case "apiregistration.k8s.io/v1/APIService":
   477  		var res apiregistrationv1.APIService
   478  		err := ctx.RegisterResource("kubernetes:apiregistration.k8s.io/v1:APIService", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   479  		if err != nil {
   480  			return nil, err
   481  		}
   482  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   483  	case "apiregistration.k8s.io/v1beta1/APIService":
   484  		var res apiregistrationv1beta1.APIService
   485  		err := ctx.RegisterResource("kubernetes:apiregistration.k8s.io/v1beta1:APIService", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   486  		if err != nil {
   487  			return nil, err
   488  		}
   489  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   490  	case "apps/v1/ControllerRevision":
   491  		var res appsv1.ControllerRevision
   492  		err := ctx.RegisterResource("kubernetes:apps/v1:ControllerRevision", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   493  		if err != nil {
   494  			return nil, err
   495  		}
   496  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   497  	case "apps/v1/DaemonSet":
   498  		var res appsv1.DaemonSet
   499  		err := ctx.RegisterResource("kubernetes:apps/v1:DaemonSet", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   500  		if err != nil {
   501  			return nil, err
   502  		}
   503  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   504  	case "apps/v1/Deployment":
   505  		var res appsv1.Deployment
   506  		err := ctx.RegisterResource("kubernetes:apps/v1:Deployment", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   507  		if err != nil {
   508  			return nil, err
   509  		}
   510  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   511  	case "apps/v1/ReplicaSet":
   512  		var res appsv1.ReplicaSet
   513  		err := ctx.RegisterResource("kubernetes:apps/v1:ReplicaSet", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   514  		if err != nil {
   515  			return nil, err
   516  		}
   517  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   518  	case "apps/v1/StatefulSet":
   519  		var res appsv1.StatefulSet
   520  		err := ctx.RegisterResource("kubernetes:apps/v1:StatefulSet", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   521  		if err != nil {
   522  			return nil, err
   523  		}
   524  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   525  	case "apps/v1beta1/ControllerRevision":
   526  		var res appsv1beta1.ControllerRevision
   527  		err := ctx.RegisterResource("kubernetes:apps/v1beta1:ControllerRevision", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   528  		if err != nil {
   529  			return nil, err
   530  		}
   531  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   532  	case "apps/v1beta1/Deployment":
   533  		var res appsv1beta1.Deployment
   534  		err := ctx.RegisterResource("kubernetes:apps/v1beta1:Deployment", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   535  		if err != nil {
   536  			return nil, err
   537  		}
   538  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   539  	case "apps/v1beta1/StatefulSet":
   540  		var res appsv1beta1.StatefulSet
   541  		err := ctx.RegisterResource("kubernetes:apps/v1beta1:StatefulSet", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   542  		if err != nil {
   543  			return nil, err
   544  		}
   545  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   546  	case "apps/v1beta2/ControllerRevision":
   547  		var res appsv1beta2.ControllerRevision
   548  		err := ctx.RegisterResource("kubernetes:apps/v1beta2:ControllerRevision", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   549  		if err != nil {
   550  			return nil, err
   551  		}
   552  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   553  	case "apps/v1beta2/DaemonSet":
   554  		var res appsv1beta2.DaemonSet
   555  		err := ctx.RegisterResource("kubernetes:apps/v1beta2:DaemonSet", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   556  		if err != nil {
   557  			return nil, err
   558  		}
   559  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   560  	case "apps/v1beta2/Deployment":
   561  		var res appsv1beta2.Deployment
   562  		err := ctx.RegisterResource("kubernetes:apps/v1beta2:Deployment", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   563  		if err != nil {
   564  			return nil, err
   565  		}
   566  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   567  	case "apps/v1beta2/ReplicaSet":
   568  		var res appsv1beta2.ReplicaSet
   569  		err := ctx.RegisterResource("kubernetes:apps/v1beta2:ReplicaSet", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   570  		if err != nil {
   571  			return nil, err
   572  		}
   573  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   574  	case "apps/v1beta2/StatefulSet":
   575  		var res appsv1beta2.StatefulSet
   576  		err := ctx.RegisterResource("kubernetes:apps/v1beta2:StatefulSet", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   577  		if err != nil {
   578  			return nil, err
   579  		}
   580  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   581  	case "auditregistration.k8s.io/v1alpha1/AuditSink":
   582  		var res auditregistrationv1alpha1.AuditSink
   583  		err := ctx.RegisterResource("kubernetes:auditregistration.k8s.io/v1alpha1:AuditSink", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   584  		if err != nil {
   585  			return nil, err
   586  		}
   587  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   588  	case "autoscaling/v1/HorizontalPodAutoscaler":
   589  		var res autoscalingv1.HorizontalPodAutoscaler
   590  		err := ctx.RegisterResource("kubernetes:autoscaling/v1:HorizontalPodAutoscaler", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   591  		if err != nil {
   592  			return nil, err
   593  		}
   594  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   595  	case "autoscaling/v2/HorizontalPodAutoscaler":
   596  		var res autoscalingv2.HorizontalPodAutoscaler
   597  		err := ctx.RegisterResource("kubernetes:autoscaling/v2:HorizontalPodAutoscaler", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   598  		if err != nil {
   599  			return nil, err
   600  		}
   601  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   602  	case "autoscaling/v2beta1/HorizontalPodAutoscaler":
   603  		var res autoscalingv2beta1.HorizontalPodAutoscaler
   604  		err := ctx.RegisterResource("kubernetes:autoscaling/v2beta1:HorizontalPodAutoscaler", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   605  		if err != nil {
   606  			return nil, err
   607  		}
   608  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   609  	case "autoscaling/v2beta2/HorizontalPodAutoscaler":
   610  		var res autoscalingv2beta2.HorizontalPodAutoscaler
   611  		err := ctx.RegisterResource("kubernetes:autoscaling/v2beta2:HorizontalPodAutoscaler", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   612  		if err != nil {
   613  			return nil, err
   614  		}
   615  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   616  	case "batch/v1/CronJob":
   617  		var res batchv1.CronJob
   618  		err := ctx.RegisterResource("kubernetes:batch/v1:CronJob", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   619  		if err != nil {
   620  			return nil, err
   621  		}
   622  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   623  	case "batch/v1/Job":
   624  		var res batchv1.Job
   625  		err := ctx.RegisterResource("kubernetes:batch/v1:Job", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   626  		if err != nil {
   627  			return nil, err
   628  		}
   629  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   630  	case "batch/v1beta1/CronJob":
   631  		var res batchv1beta1.CronJob
   632  		err := ctx.RegisterResource("kubernetes:batch/v1beta1:CronJob", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   633  		if err != nil {
   634  			return nil, err
   635  		}
   636  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   637  	case "batch/v2alpha1/CronJob":
   638  		var res batchv2alpha1.CronJob
   639  		err := ctx.RegisterResource("kubernetes:batch/v2alpha1:CronJob", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   640  		if err != nil {
   641  			return nil, err
   642  		}
   643  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   644  	case "certificates.k8s.io/v1/CertificateSigningRequest":
   645  		var res certificatesv1.CertificateSigningRequest
   646  		err := ctx.RegisterResource("kubernetes:certificates.k8s.io/v1:CertificateSigningRequest", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   647  		if err != nil {
   648  			return nil, err
   649  		}
   650  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   651  	case "certificates.k8s.io/v1alpha1/ClusterTrustBundle":
   652  		var res certificatesv1alpha1.ClusterTrustBundle
   653  		err := ctx.RegisterResource("kubernetes:certificates.k8s.io/v1alpha1:ClusterTrustBundle", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   654  		if err != nil {
   655  			return nil, err
   656  		}
   657  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   658  	case "certificates.k8s.io/v1beta1/CertificateSigningRequest":
   659  		var res certificatesv1beta1.CertificateSigningRequest
   660  		err := ctx.RegisterResource("kubernetes:certificates.k8s.io/v1beta1:CertificateSigningRequest", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   661  		if err != nil {
   662  			return nil, err
   663  		}
   664  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   665  	case "coordination.k8s.io/v1/Lease":
   666  		var res coordinationv1.Lease
   667  		err := ctx.RegisterResource("kubernetes:coordination.k8s.io/v1:Lease", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   668  		if err != nil {
   669  			return nil, err
   670  		}
   671  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   672  	case "coordination.k8s.io/v1beta1/Lease":
   673  		var res coordinationv1beta1.Lease
   674  		err := ctx.RegisterResource("kubernetes:coordination.k8s.io/v1beta1:Lease", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   675  		if err != nil {
   676  			return nil, err
   677  		}
   678  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   679  	case "v1/Binding":
   680  		var res corev1.Binding
   681  		err := ctx.RegisterResource("kubernetes:core/v1:Binding", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   682  		if err != nil {
   683  			return nil, err
   684  		}
   685  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   686  	case "v1/ConfigMap":
   687  		var res corev1.ConfigMap
   688  		err := ctx.RegisterResource("kubernetes:core/v1:ConfigMap", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   689  		if err != nil {
   690  			return nil, err
   691  		}
   692  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   693  	case "v1/Endpoints":
   694  		var res corev1.Endpoints
   695  		err := ctx.RegisterResource("kubernetes:core/v1:Endpoints", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   696  		if err != nil {
   697  			return nil, err
   698  		}
   699  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   700  	case "v1/Event":
   701  		var res corev1.Event
   702  		err := ctx.RegisterResource("kubernetes:core/v1:Event", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   703  		if err != nil {
   704  			return nil, err
   705  		}
   706  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   707  	case "v1/LimitRange":
   708  		var res corev1.LimitRange
   709  		err := ctx.RegisterResource("kubernetes:core/v1:LimitRange", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   710  		if err != nil {
   711  			return nil, err
   712  		}
   713  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   714  	case "v1/Namespace":
   715  		var res corev1.Namespace
   716  		err := ctx.RegisterResource("kubernetes:core/v1:Namespace", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   717  		if err != nil {
   718  			return nil, err
   719  		}
   720  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   721  	case "v1/Node":
   722  		var res corev1.Node
   723  		err := ctx.RegisterResource("kubernetes:core/v1:Node", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   724  		if err != nil {
   725  			return nil, err
   726  		}
   727  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   728  	case "v1/PersistentVolume":
   729  		var res corev1.PersistentVolume
   730  		err := ctx.RegisterResource("kubernetes:core/v1:PersistentVolume", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   731  		if err != nil {
   732  			return nil, err
   733  		}
   734  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   735  	case "v1/PersistentVolumeClaim":
   736  		var res corev1.PersistentVolumeClaim
   737  		err := ctx.RegisterResource("kubernetes:core/v1:PersistentVolumeClaim", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   738  		if err != nil {
   739  			return nil, err
   740  		}
   741  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   742  	case "v1/Pod":
   743  		var res corev1.Pod
   744  		err := ctx.RegisterResource("kubernetes:core/v1:Pod", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   745  		if err != nil {
   746  			return nil, err
   747  		}
   748  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   749  	case "v1/PodTemplate":
   750  		var res corev1.PodTemplate
   751  		err := ctx.RegisterResource("kubernetes:core/v1:PodTemplate", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   752  		if err != nil {
   753  			return nil, err
   754  		}
   755  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   756  	case "v1/ReplicationController":
   757  		var res corev1.ReplicationController
   758  		err := ctx.RegisterResource("kubernetes:core/v1:ReplicationController", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   759  		if err != nil {
   760  			return nil, err
   761  		}
   762  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   763  	case "v1/ResourceQuota":
   764  		var res corev1.ResourceQuota
   765  		err := ctx.RegisterResource("kubernetes:core/v1:ResourceQuota", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   766  		if err != nil {
   767  			return nil, err
   768  		}
   769  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   770  	case "v1/Secret":
   771  		var res corev1.Secret
   772  		err := ctx.RegisterResource("kubernetes:core/v1:Secret", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   773  		if err != nil {
   774  			return nil, err
   775  		}
   776  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   777  	case "v1/Service":
   778  		var res corev1.Service
   779  		err := ctx.RegisterResource("kubernetes:core/v1:Service", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   780  		if err != nil {
   781  			return nil, err
   782  		}
   783  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   784  	case "v1/ServiceAccount":
   785  		var res corev1.ServiceAccount
   786  		err := ctx.RegisterResource("kubernetes:core/v1:ServiceAccount", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   787  		if err != nil {
   788  			return nil, err
   789  		}
   790  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   791  	case "discovery.k8s.io/v1/EndpointSlice":
   792  		var res discoveryv1.EndpointSlice
   793  		err := ctx.RegisterResource("kubernetes:discovery.k8s.io/v1:EndpointSlice", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   794  		if err != nil {
   795  			return nil, err
   796  		}
   797  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   798  	case "discovery.k8s.io/v1beta1/EndpointSlice":
   799  		var res discoveryv1beta1.EndpointSlice
   800  		err := ctx.RegisterResource("kubernetes:discovery.k8s.io/v1beta1:EndpointSlice", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   801  		if err != nil {
   802  			return nil, err
   803  		}
   804  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   805  	case "events.k8s.io/v1/Event":
   806  		var res eventsv1.Event
   807  		err := ctx.RegisterResource("kubernetes:events.k8s.io/v1:Event", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   808  		if err != nil {
   809  			return nil, err
   810  		}
   811  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   812  	case "events.k8s.io/v1beta1/Event":
   813  		var res eventsv1beta1.Event
   814  		err := ctx.RegisterResource("kubernetes:events.k8s.io/v1beta1:Event", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   815  		if err != nil {
   816  			return nil, err
   817  		}
   818  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   819  	case "extensions/v1beta1/DaemonSet":
   820  		var res extensionsv1beta1.DaemonSet
   821  		err := ctx.RegisterResource("kubernetes:extensions/v1beta1:DaemonSet", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   822  		if err != nil {
   823  			return nil, err
   824  		}
   825  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   826  	case "extensions/v1beta1/Deployment":
   827  		var res extensionsv1beta1.Deployment
   828  		err := ctx.RegisterResource("kubernetes:extensions/v1beta1:Deployment", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   829  		if err != nil {
   830  			return nil, err
   831  		}
   832  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   833  	case "extensions/v1beta1/Ingress":
   834  		var res extensionsv1beta1.Ingress
   835  		err := ctx.RegisterResource("kubernetes:extensions/v1beta1:Ingress", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   836  		if err != nil {
   837  			return nil, err
   838  		}
   839  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   840  	case "extensions/v1beta1/NetworkPolicy":
   841  		var res extensionsv1beta1.NetworkPolicy
   842  		err := ctx.RegisterResource("kubernetes:extensions/v1beta1:NetworkPolicy", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   843  		if err != nil {
   844  			return nil, err
   845  		}
   846  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   847  	case "extensions/v1beta1/PodSecurityPolicy":
   848  		var res extensionsv1beta1.PodSecurityPolicy
   849  		err := ctx.RegisterResource("kubernetes:extensions/v1beta1:PodSecurityPolicy", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   850  		if err != nil {
   851  			return nil, err
   852  		}
   853  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   854  	case "extensions/v1beta1/ReplicaSet":
   855  		var res extensionsv1beta1.ReplicaSet
   856  		err := ctx.RegisterResource("kubernetes:extensions/v1beta1:ReplicaSet", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   857  		if err != nil {
   858  			return nil, err
   859  		}
   860  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   861  	case "flowcontrol.apiserver.k8s.io/v1alpha1/FlowSchema":
   862  		var res flowcontrolv1alpha1.FlowSchema
   863  		err := ctx.RegisterResource("kubernetes:flowcontrol.apiserver.k8s.io/v1alpha1:FlowSchema", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   864  		if err != nil {
   865  			return nil, err
   866  		}
   867  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   868  	case "flowcontrol.apiserver.k8s.io/v1alpha1/PriorityLevelConfiguration":
   869  		var res flowcontrolv1alpha1.PriorityLevelConfiguration
   870  		err := ctx.RegisterResource("kubernetes:flowcontrol.apiserver.k8s.io/v1alpha1:PriorityLevelConfiguration", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   871  		if err != nil {
   872  			return nil, err
   873  		}
   874  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   875  	case "flowcontrol.apiserver.k8s.io/v1beta1/FlowSchema":
   876  		var res flowcontrolv1beta1.FlowSchema
   877  		err := ctx.RegisterResource("kubernetes:flowcontrol.apiserver.k8s.io/v1beta1:FlowSchema", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   878  		if err != nil {
   879  			return nil, err
   880  		}
   881  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   882  	case "flowcontrol.apiserver.k8s.io/v1beta1/PriorityLevelConfiguration":
   883  		var res flowcontrolv1beta1.PriorityLevelConfiguration
   884  		err := ctx.RegisterResource("kubernetes:flowcontrol.apiserver.k8s.io/v1beta1:PriorityLevelConfiguration", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   885  		if err != nil {
   886  			return nil, err
   887  		}
   888  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   889  	case "flowcontrol.apiserver.k8s.io/v1beta2/FlowSchema":
   890  		var res flowcontrolv1beta2.FlowSchema
   891  		err := ctx.RegisterResource("kubernetes:flowcontrol.apiserver.k8s.io/v1beta2:FlowSchema", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   892  		if err != nil {
   893  			return nil, err
   894  		}
   895  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   896  	case "flowcontrol.apiserver.k8s.io/v1beta2/PriorityLevelConfiguration":
   897  		var res flowcontrolv1beta2.PriorityLevelConfiguration
   898  		err := ctx.RegisterResource("kubernetes:flowcontrol.apiserver.k8s.io/v1beta2:PriorityLevelConfiguration", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   899  		if err != nil {
   900  			return nil, err
   901  		}
   902  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   903  	case "flowcontrol.apiserver.k8s.io/v1beta3/FlowSchema":
   904  		var res flowcontrolv1beta3.FlowSchema
   905  		err := ctx.RegisterResource("kubernetes:flowcontrol.apiserver.k8s.io/v1beta3:FlowSchema", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   906  		if err != nil {
   907  			return nil, err
   908  		}
   909  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   910  	case "flowcontrol.apiserver.k8s.io/v1beta3/PriorityLevelConfiguration":
   911  		var res flowcontrolv1beta3.PriorityLevelConfiguration
   912  		err := ctx.RegisterResource("kubernetes:flowcontrol.apiserver.k8s.io/v1beta3:PriorityLevelConfiguration", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   913  		if err != nil {
   914  			return nil, err
   915  		}
   916  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   917  	case "meta/v1/Status":
   918  		var res metav1.Status
   919  		err := ctx.RegisterResource("kubernetes:meta/v1:Status", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   920  		if err != nil {
   921  			return nil, err
   922  		}
   923  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   924  	case "networking.k8s.io/v1/Ingress":
   925  		var res networkingv1.Ingress
   926  		err := ctx.RegisterResource("kubernetes:networking.k8s.io/v1:Ingress", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   927  		if err != nil {
   928  			return nil, err
   929  		}
   930  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   931  	case "networking.k8s.io/v1/IngressClass":
   932  		var res networkingv1.IngressClass
   933  		err := ctx.RegisterResource("kubernetes:networking.k8s.io/v1:IngressClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   934  		if err != nil {
   935  			return nil, err
   936  		}
   937  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   938  	case "networking.k8s.io/v1/NetworkPolicy":
   939  		var res networkingv1.NetworkPolicy
   940  		err := ctx.RegisterResource("kubernetes:networking.k8s.io/v1:NetworkPolicy", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   941  		if err != nil {
   942  			return nil, err
   943  		}
   944  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   945  	case "networking.k8s.io/v1alpha1/ClusterCIDR":
   946  		var res networkingv1alpha1.ClusterCIDR
   947  		err := ctx.RegisterResource("kubernetes:networking.k8s.io/v1alpha1:ClusterCIDR", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   948  		if err != nil {
   949  			return nil, err
   950  		}
   951  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   952  	case "networking.k8s.io/v1alpha1/IPAddress":
   953  		var res networkingv1alpha1.IPAddress
   954  		err := ctx.RegisterResource("kubernetes:networking.k8s.io/v1alpha1:IPAddress", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   955  		if err != nil {
   956  			return nil, err
   957  		}
   958  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   959  	case "networking.k8s.io/v1beta1/Ingress":
   960  		var res networkingv1beta1.Ingress
   961  		err := ctx.RegisterResource("kubernetes:networking.k8s.io/v1beta1:Ingress", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   962  		if err != nil {
   963  			return nil, err
   964  		}
   965  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   966  	case "networking.k8s.io/v1beta1/IngressClass":
   967  		var res networkingv1beta1.IngressClass
   968  		err := ctx.RegisterResource("kubernetes:networking.k8s.io/v1beta1:IngressClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   969  		if err != nil {
   970  			return nil, err
   971  		}
   972  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   973  	case "node.k8s.io/v1/RuntimeClass":
   974  		var res nodev1.RuntimeClass
   975  		err := ctx.RegisterResource("kubernetes:node.k8s.io/v1:RuntimeClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   976  		if err != nil {
   977  			return nil, err
   978  		}
   979  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   980  	case "node.k8s.io/v1alpha1/RuntimeClass":
   981  		var res nodev1alpha1.RuntimeClass
   982  		err := ctx.RegisterResource("kubernetes:node.k8s.io/v1alpha1:RuntimeClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   983  		if err != nil {
   984  			return nil, err
   985  		}
   986  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   987  	case "node.k8s.io/v1beta1/RuntimeClass":
   988  		var res nodev1beta1.RuntimeClass
   989  		err := ctx.RegisterResource("kubernetes:node.k8s.io/v1beta1:RuntimeClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   990  		if err != nil {
   991  			return nil, err
   992  		}
   993  		return []resourceTuple{{Name: key, Resource: &res}}, nil
   994  	case "policy/v1/PodDisruptionBudget":
   995  		var res policyv1.PodDisruptionBudget
   996  		err := ctx.RegisterResource("kubernetes:policy/v1:PodDisruptionBudget", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
   997  		if err != nil {
   998  			return nil, err
   999  		}
  1000  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1001  	case "policy/v1beta1/PodDisruptionBudget":
  1002  		var res policyv1beta1.PodDisruptionBudget
  1003  		err := ctx.RegisterResource("kubernetes:policy/v1beta1:PodDisruptionBudget", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1004  		if err != nil {
  1005  			return nil, err
  1006  		}
  1007  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1008  	case "policy/v1beta1/PodSecurityPolicy":
  1009  		var res policyv1beta1.PodSecurityPolicy
  1010  		err := ctx.RegisterResource("kubernetes:policy/v1beta1:PodSecurityPolicy", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1011  		if err != nil {
  1012  			return nil, err
  1013  		}
  1014  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1015  	case "rbac.authorization.k8s.io/v1/ClusterRole":
  1016  		var res rbacv1.ClusterRole
  1017  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1:ClusterRole", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1018  		if err != nil {
  1019  			return nil, err
  1020  		}
  1021  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1022  	case "rbac.authorization.k8s.io/v1/ClusterRoleBinding":
  1023  		var res rbacv1.ClusterRoleBinding
  1024  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1:ClusterRoleBinding", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1025  		if err != nil {
  1026  			return nil, err
  1027  		}
  1028  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1029  	case "rbac.authorization.k8s.io/v1/Role":
  1030  		var res rbacv1.Role
  1031  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1:Role", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1032  		if err != nil {
  1033  			return nil, err
  1034  		}
  1035  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1036  	case "rbac.authorization.k8s.io/v1/RoleBinding":
  1037  		var res rbacv1.RoleBinding
  1038  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1:RoleBinding", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1039  		if err != nil {
  1040  			return nil, err
  1041  		}
  1042  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1043  	case "rbac.authorization.k8s.io/v1alpha1/ClusterRole":
  1044  		var res rbacv1alpha1.ClusterRole
  1045  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1alpha1:ClusterRole", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1046  		if err != nil {
  1047  			return nil, err
  1048  		}
  1049  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1050  	case "rbac.authorization.k8s.io/v1alpha1/ClusterRoleBinding":
  1051  		var res rbacv1alpha1.ClusterRoleBinding
  1052  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1alpha1:ClusterRoleBinding", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1053  		if err != nil {
  1054  			return nil, err
  1055  		}
  1056  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1057  	case "rbac.authorization.k8s.io/v1alpha1/Role":
  1058  		var res rbacv1alpha1.Role
  1059  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1alpha1:Role", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1060  		if err != nil {
  1061  			return nil, err
  1062  		}
  1063  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1064  	case "rbac.authorization.k8s.io/v1alpha1/RoleBinding":
  1065  		var res rbacv1alpha1.RoleBinding
  1066  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1alpha1:RoleBinding", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1067  		if err != nil {
  1068  			return nil, err
  1069  		}
  1070  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1071  	case "rbac.authorization.k8s.io/v1beta1/ClusterRole":
  1072  		var res rbacv1beta1.ClusterRole
  1073  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1beta1:ClusterRole", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1074  		if err != nil {
  1075  			return nil, err
  1076  		}
  1077  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1078  	case "rbac.authorization.k8s.io/v1beta1/ClusterRoleBinding":
  1079  		var res rbacv1beta1.ClusterRoleBinding
  1080  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1beta1:ClusterRoleBinding", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1081  		if err != nil {
  1082  			return nil, err
  1083  		}
  1084  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1085  	case "rbac.authorization.k8s.io/v1beta1/Role":
  1086  		var res rbacv1beta1.Role
  1087  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1beta1:Role", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1088  		if err != nil {
  1089  			return nil, err
  1090  		}
  1091  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1092  	case "rbac.authorization.k8s.io/v1beta1/RoleBinding":
  1093  		var res rbacv1beta1.RoleBinding
  1094  		err := ctx.RegisterResource("kubernetes:rbac.authorization.k8s.io/v1beta1:RoleBinding", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1095  		if err != nil {
  1096  			return nil, err
  1097  		}
  1098  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1099  	case "resource.k8s.io/v1alpha1/PodScheduling":
  1100  		var res resourcev1alpha1.PodScheduling
  1101  		err := ctx.RegisterResource("kubernetes:resource.k8s.io/v1alpha1:PodScheduling", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1102  		if err != nil {
  1103  			return nil, err
  1104  		}
  1105  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1106  	case "resource.k8s.io/v1alpha1/ResourceClaim":
  1107  		var res resourcev1alpha1.ResourceClaim
  1108  		err := ctx.RegisterResource("kubernetes:resource.k8s.io/v1alpha1:ResourceClaim", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1109  		if err != nil {
  1110  			return nil, err
  1111  		}
  1112  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1113  	case "resource.k8s.io/v1alpha1/ResourceClaimTemplate":
  1114  		var res resourcev1alpha1.ResourceClaimTemplate
  1115  		err := ctx.RegisterResource("kubernetes:resource.k8s.io/v1alpha1:ResourceClaimTemplate", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1116  		if err != nil {
  1117  			return nil, err
  1118  		}
  1119  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1120  	case "resource.k8s.io/v1alpha1/ResourceClass":
  1121  		var res resourcev1alpha1.ResourceClass
  1122  		err := ctx.RegisterResource("kubernetes:resource.k8s.io/v1alpha1:ResourceClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1123  		if err != nil {
  1124  			return nil, err
  1125  		}
  1126  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1127  	case "resource.k8s.io/v1alpha2/PodSchedulingContext":
  1128  		var res resourcev1alpha2.PodSchedulingContext
  1129  		err := ctx.RegisterResource("kubernetes:resource.k8s.io/v1alpha2:PodSchedulingContext", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1130  		if err != nil {
  1131  			return nil, err
  1132  		}
  1133  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1134  	case "resource.k8s.io/v1alpha2/ResourceClaim":
  1135  		var res resourcev1alpha2.ResourceClaim
  1136  		err := ctx.RegisterResource("kubernetes:resource.k8s.io/v1alpha2:ResourceClaim", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1137  		if err != nil {
  1138  			return nil, err
  1139  		}
  1140  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1141  	case "resource.k8s.io/v1alpha2/ResourceClaimTemplate":
  1142  		var res resourcev1alpha2.ResourceClaimTemplate
  1143  		err := ctx.RegisterResource("kubernetes:resource.k8s.io/v1alpha2:ResourceClaimTemplate", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1144  		if err != nil {
  1145  			return nil, err
  1146  		}
  1147  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1148  	case "resource.k8s.io/v1alpha2/ResourceClass":
  1149  		var res resourcev1alpha2.ResourceClass
  1150  		err := ctx.RegisterResource("kubernetes:resource.k8s.io/v1alpha2:ResourceClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1151  		if err != nil {
  1152  			return nil, err
  1153  		}
  1154  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1155  	case "scheduling.k8s.io/v1/PriorityClass":
  1156  		var res schedulingv1.PriorityClass
  1157  		err := ctx.RegisterResource("kubernetes:scheduling.k8s.io/v1:PriorityClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1158  		if err != nil {
  1159  			return nil, err
  1160  		}
  1161  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1162  	case "scheduling.k8s.io/v1alpha1/PriorityClass":
  1163  		var res schedulingv1alpha1.PriorityClass
  1164  		err := ctx.RegisterResource("kubernetes:scheduling.k8s.io/v1alpha1:PriorityClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1165  		if err != nil {
  1166  			return nil, err
  1167  		}
  1168  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1169  	case "scheduling.k8s.io/v1beta1/PriorityClass":
  1170  		var res schedulingv1beta1.PriorityClass
  1171  		err := ctx.RegisterResource("kubernetes:scheduling.k8s.io/v1beta1:PriorityClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1172  		if err != nil {
  1173  			return nil, err
  1174  		}
  1175  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1176  	case "settings.k8s.io/v1alpha1/PodPreset":
  1177  		var res settingsv1alpha1.PodPreset
  1178  		err := ctx.RegisterResource("kubernetes:settings.k8s.io/v1alpha1:PodPreset", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1179  		if err != nil {
  1180  			return nil, err
  1181  		}
  1182  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1183  	case "storage.k8s.io/v1/CSIDriver":
  1184  		var res storagev1.CSIDriver
  1185  		err := ctx.RegisterResource("kubernetes:storage.k8s.io/v1:CSIDriver", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1186  		if err != nil {
  1187  			return nil, err
  1188  		}
  1189  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1190  	case "storage.k8s.io/v1/CSINode":
  1191  		var res storagev1.CSINode
  1192  		err := ctx.RegisterResource("kubernetes:storage.k8s.io/v1:CSINode", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1193  		if err != nil {
  1194  			return nil, err
  1195  		}
  1196  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1197  	case "storage.k8s.io/v1/CSIStorageCapacity":
  1198  		var res storagev1.CSIStorageCapacity
  1199  		err := ctx.RegisterResource("kubernetes:storage.k8s.io/v1:CSIStorageCapacity", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1200  		if err != nil {
  1201  			return nil, err
  1202  		}
  1203  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1204  	case "storage.k8s.io/v1/StorageClass":
  1205  		var res storagev1.StorageClass
  1206  		err := ctx.RegisterResource("kubernetes:storage.k8s.io/v1:StorageClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1207  		if err != nil {
  1208  			return nil, err
  1209  		}
  1210  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1211  	case "storage.k8s.io/v1/VolumeAttachment":
  1212  		var res storagev1.VolumeAttachment
  1213  		err := ctx.RegisterResource("kubernetes:storage.k8s.io/v1:VolumeAttachment", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1214  		if err != nil {
  1215  			return nil, err
  1216  		}
  1217  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1218  	case "storage.k8s.io/v1alpha1/VolumeAttachment":
  1219  		var res storagev1alpha1.VolumeAttachment
  1220  		err := ctx.RegisterResource("kubernetes:storage.k8s.io/v1alpha1:VolumeAttachment", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1221  		if err != nil {
  1222  			return nil, err
  1223  		}
  1224  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1225  	case "storage.k8s.io/v1beta1/CSIDriver":
  1226  		var res storagev1beta1.CSIDriver
  1227  		err := ctx.RegisterResource("kubernetes:storage.k8s.io/v1beta1:CSIDriver", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1228  		if err != nil {
  1229  			return nil, err
  1230  		}
  1231  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1232  	case "storage.k8s.io/v1beta1/CSINode":
  1233  		var res storagev1beta1.CSINode
  1234  		err := ctx.RegisterResource("kubernetes:storage.k8s.io/v1beta1:CSINode", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1235  		if err != nil {
  1236  			return nil, err
  1237  		}
  1238  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1239  	case "storage.k8s.io/v1beta1/CSIStorageCapacity":
  1240  		var res storagev1beta1.CSIStorageCapacity
  1241  		err := ctx.RegisterResource("kubernetes:storage.k8s.io/v1beta1:CSIStorageCapacity", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1242  		if err != nil {
  1243  			return nil, err
  1244  		}
  1245  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1246  	case "storage.k8s.io/v1beta1/StorageClass":
  1247  		var res storagev1beta1.StorageClass
  1248  		err := ctx.RegisterResource("kubernetes:storage.k8s.io/v1beta1:StorageClass", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1249  		if err != nil {
  1250  			return nil, err
  1251  		}
  1252  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1253  	case "storage.k8s.io/v1beta1/VolumeAttachment":
  1254  		var res storagev1beta1.VolumeAttachment
  1255  		err := ctx.RegisterResource("kubernetes:storage.k8s.io/v1beta1:VolumeAttachment", metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1256  		if err != nil {
  1257  			return nil, err
  1258  		}
  1259  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1260  	default:
  1261  		var res apiextensions.CustomResource
  1262  		err := ctx.RegisterResource(fmt.Sprintf("kubernetes:%s:%s", apiVersion, kind), metaName, kubernetes.UntypedArgs(obj), &res, opts...)
  1263  		if err != nil {
  1264  			return nil, err
  1265  		}
  1266  		return []resourceTuple{{Name: key, Resource: &res}}, nil
  1267  	}
  1268  }