source/crd.go
func NewCRDClientForAPIVersionKind(client kubernetes.Interface, kubeConfig, kubeMaster, apiVersion, kind string) (*rest.RESTClient, *runtime.Scheme, error) {
	if kubeConfig == "" {
		if _, err := os.Stat(clientcmd.RecommendedHomeFile); err == nil {
			kubeConfig = clientcmd.RecommendedHomeFile
		}
	}

	config, err := clientcmd.BuildConfigFromFlags(kubeMaster, kubeConfig)
	if err != nil {
		return nil, nil, err
	}

	groupVersion, err := schema.ParseGroupVersion(apiVersion)
	if err != nil {
		return nil, nil, err
	}
	apiResourceList, err := client.Discovery().ServerResourcesForGroupVersion(groupVersion.String())
	if err != nil {
		return nil, nil, fmt.Errorf("error listing resources in GroupVersion %q: %s", groupVersion.String(), err)
	}

	var crdAPIResource *metav1.APIResource
	for _, apiResource := range apiResourceList.APIResources {
		if apiResource.Kind == kind {
			crdAPIResource = &apiResource
			break
		}
	}
	if crdAPIResource == nil {
		return nil, nil, fmt.Errorf("unable to find Resource Kind %q in GroupVersion %q", kind, apiVersion)
	}

	scheme := runtime.NewScheme()
	addKnownTypes(scheme, groupVersion)

	config.ContentConfig.GroupVersion = &groupVersion
	config.APIPath = "/apis"
	config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: serializer.NewCodecFactory(scheme)}

	crdClient, err := rest.UnversionedRESTClientFor(config)
	if err != nil {
		return nil, nil, err
	}
	return crdClient, scheme, nil
}
func NewCRDClientForAPIVersionKind(client kubernetes.Interface, kubeConfig, kubeMaster, apiVersion, kind string) (*rest.RESTClient, *runtime.Scheme, error) {
	if kubeConfig == "" {
		if _, err := os.Stat(clientcmd.RecommendedHomeFile); err == nil {
			kubeConfig = clientcmd.RecommendedHomeFile
		}
	}

	config, err := clientcmd.BuildConfigFromFlags(kubeMaster, kubeConfig)
	if err != nil {
		return nil, nil, err
	}

	groupVersion, err := schema.ParseGroupVersion(apiVersion)
	if err != nil {
		return nil, nil, err
	}
	apiResourceList, err := client.Discovery().ServerResourcesForGroupVersion(groupVersion.String())
	if err != nil {
		return nil, nil, fmt.Errorf("error listing resources in GroupVersion %q: %s", groupVersion.String(), err)
	}

	var crdAPIResource *metav1.APIResource
	for _, apiResource := range apiResourceList.APIResources {
		if apiResource.Kind == kind {
			crdAPIResource = &apiResource
			break
		}
	}
	if crdAPIResource == nil {
		return nil, nil, fmt.Errorf("unable to find Resource Kind %q in GroupVersion %q", kind, apiVersion)
	}

	scheme := runtime.NewScheme()
	addKnownTypes(scheme, groupVersion)

	config.ContentConfig.GroupVersion = &groupVersion
	config.APIPath = "/apis"
	config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: serializer.NewCodecFactory(scheme)}

	crdClient, err := rest.UnversionedRESTClientFor(config)
	if err != nil {
		return nil, nil, err
	}
	return crdClient, scheme, nil
}
func NewCRDClientForAPIVersionKind ( client kubernetes . Interface , kubeConfig , kubeMaster , apiVersion , kind string ) ( * rest . RESTClient , * runtime . Scheme , error ) { if kubeConfig == " " { if _ , err := os . Stat ( clientcmd . RecommendedHomeFile ) ; err == nil { kubeConfig = clientcmd . RecommendedHomeFile } } config , err := clientcmd . BuildConfigFromFlags ( kubeMaster , kubeConfig ) if err != nil { return nil , nil , err } groupVersion , err := schema . ParseGroupVersion ( apiVersion ) if err != nil { return nil , nil , err } apiResourceList , err := client . Discovery ( ) . ServerResourcesForGroupVersion ( groupVersion . String ( ) ) if err != nil { return nil , nil , fmt . Errorf ( " " , groupVersion . String ( ) , err ) } var crdAPIResource * metav1 . APIResource for _ , apiResource := range apiResourceList . APIResources { if apiResource . Kind == kind { crdAPIResource = & apiResource break } } if crdAPIResource == nil { return nil , nil , fmt . Errorf ( " " , kind , apiVersion ) } scheme := runtime . NewScheme ( ) addKnownTypes ( scheme , groupVersion ) config . ContentConfig . GroupVersion = & groupVersion config . APIPath = " " config . NegotiatedSerializer = serializer . DirectCodecFactory { CodecFactory : serializer . NewCodecFactory ( scheme ) } crdClient , err := rest . UnversionedRESTClientFor ( config ) if err != nil { return nil , nil , err } return crdClient , scheme , nil }
// NewCRDClientForAPIVersionKind return rest client for the given apiVersion and kind of the CRD
NewCRDClientForAPIVersionKind return rest client for the given apiVersion and kind of the CRD