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 }