github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/cloud/pkg/devicecontroller/utils/crdclient.go (about)

     1  package utils
     2  
     3  import (
     4  	"k8s.io/apimachinery/pkg/apis/meta/v1"
     5  	"k8s.io/apimachinery/pkg/runtime"
     6  	"k8s.io/apimachinery/pkg/runtime/serializer"
     7  	"k8s.io/client-go/rest"
     8  	"k8s.io/klog"
     9  
    10  	"github.com/kubeedge/kubeedge/cloud/pkg/apis/devices/v1alpha1"
    11  )
    12  
    13  // NewCRDClient is used to create a restClient for crd
    14  func NewCRDClient(cfg *rest.Config) (*rest.RESTClient, error) {
    15  	scheme := runtime.NewScheme()
    16  	schemeBuilder := runtime.NewSchemeBuilder(AddDeviceCrds)
    17  
    18  	err := schemeBuilder.AddToScheme(scheme)
    19  	if err != nil {
    20  		return nil, err
    21  	}
    22  
    23  	config := *cfg
    24  	config.APIPath = "/apis"
    25  	config.GroupVersion = &v1alpha1.SchemeGroupVersion
    26  	config.ContentType = runtime.ContentTypeJSON
    27  	config.NegotiatedSerializer = serializer.NewCodecFactory(scheme).WithoutConversion()
    28  
    29  	client, err := rest.RESTClientFor(&config)
    30  	if err != nil {
    31  		klog.Errorf("Failed to create REST Client due to error %v", err)
    32  		return nil, err
    33  	}
    34  
    35  	return client, nil
    36  }
    37  
    38  func AddDeviceCrds(scheme *runtime.Scheme) error {
    39  	// Add Device
    40  	scheme.AddKnownTypes(v1alpha1.SchemeGroupVersion, &v1alpha1.Device{}, &v1alpha1.DeviceList{})
    41  	v1.AddToGroupVersion(scheme, v1alpha1.SchemeGroupVersion)
    42  	// Add DeviceModel
    43  	scheme.AddKnownTypes(v1alpha1.SchemeGroupVersion, &v1alpha1.DeviceModel{}, &v1alpha1.DeviceModelList{})
    44  	v1.AddToGroupVersion(scheme, v1alpha1.SchemeGroupVersion)
    45  
    46  	return nil
    47  }