@@ -31,6 +31,7 @@ import (
3131 v1beta12 "k8s.io/api/policy/v1beta1"
3232 "k8s.io/apimachinery/pkg/util/validation"
3333 "k8s.io/client-go/dynamic"
34+ "k8s.io/client-go/kubernetes/scheme"
3435 "k8s.io/kubernetes/pkg/api/legacyscheme"
3536 "k8s.io/metrics/pkg/apis/metrics/v1beta1"
3637 metrics "k8s.io/metrics/pkg/client/clientset/versioned"
@@ -151,6 +152,8 @@ type K8sService interface {
151152 GetResourceByGVR (ctx context.Context , config * rest.Config , GVR schema.GroupVersionResource , resourceName , namespace string ) (* unstructured.Unstructured , error )
152153 PatchResourceByGVR (ctx context.Context , config * rest.Config , GVR schema.GroupVersionResource , resourceName , namespace string , patchType types.PatchType , patchData []byte ) (* unstructured.Unstructured , error )
153154 DeleteResourceByGVR (ctx context.Context , config * rest.Config , GVR schema.GroupVersionResource , resourceName , namespace string , forceDelete bool ) error
155+ GetRestClientForCRD (config * ClusterConfig , groupVersion * schema.GroupVersion ) (* rest.RESTClient , error )
156+ PatchResourceByRestClient (restClient * rest.RESTClient , resource , name , namespace string , pt types.PatchType , data []byte , subresources ... string ) rest.Result
154157}
155158
156159func NewK8sUtil (logger * zap.SugaredLogger , runTimeConfig * RuntimeConfig ) (* K8sServiceImpl , error ) {
@@ -1911,31 +1914,6 @@ func (impl *K8sServiceImpl) CreateOrUpdateSecretByName(client *v12.CoreV1Client,
19111914 return nil
19121915}
19131916
1914- func (impl * K8sServiceImpl ) GetGVRForCRD (config * rest.Config , CRDName string ) (schema.GroupVersionResource , error ) {
1915- apiExtClient , err := apiextensionsclient .NewForConfig (config )
1916- if err != nil {
1917- impl .logger .Error ("error in getting api extension client" , "err" , err )
1918- return schema.GroupVersionResource {}, err
1919- }
1920- crd , err := apiExtClient .ApiextensionsV1 ().CustomResourceDefinitions ().Get (context .TODO (), CRDName , metav1.GetOptions {})
1921- if err != nil {
1922- impl .logger .Error ("error in getting terraform crd" , "err" , err )
1923- return schema.GroupVersionResource {}, err
1924- }
1925- var servedVersion string
1926- for _ , v := range crd .Spec .Versions {
1927- if v .Served {
1928- servedVersion = v .Name
1929- break
1930- }
1931- }
1932- return schema.GroupVersionResource {
1933- Group : crd .Spec .Group ,
1934- Version : servedVersion ,
1935- Resource : crd .Spec .Names .Plural ,
1936- }, nil
1937- }
1938-
19391917func (impl * K8sServiceImpl ) GetResourceByGVR (ctx context.Context , config * rest.Config , GVR schema.GroupVersionResource , resourceName , namespace string ) (* unstructured.Unstructured , error ) {
19401918 dynClient , err := dynamic .NewForConfig (config )
19411919 if err != nil {
@@ -1981,3 +1959,61 @@ func (impl *K8sServiceImpl) DeleteResourceByGVR(ctx context.Context, config *res
19811959 }
19821960 return nil
19831961}
1962+
1963+ func (impl * K8sServiceImpl ) GetGVRForCRD (config * rest.Config , CRDName string ) (schema.GroupVersionResource , error ) {
1964+ apiExtClient , err := apiextensionsclient .NewForConfig (config )
1965+ if err != nil {
1966+ impl .logger .Error ("error in getting api extension client" , "err" , err )
1967+ return schema.GroupVersionResource {}, err
1968+ }
1969+ crd , err := apiExtClient .ApiextensionsV1 ().CustomResourceDefinitions ().Get (context .TODO (), CRDName , metav1.GetOptions {})
1970+ if err != nil {
1971+ impl .logger .Error ("error in getting terraform crd" , "err" , err )
1972+ return schema.GroupVersionResource {}, err
1973+ }
1974+ var servedVersion string
1975+ for _ , v := range crd .Spec .Versions {
1976+ if v .Served {
1977+ servedVersion = v .Name
1978+ break
1979+ }
1980+ }
1981+ return schema.GroupVersionResource {
1982+ Group : crd .Spec .Group ,
1983+ Version : servedVersion ,
1984+ Resource : crd .Spec .Names .Plural ,
1985+ }, nil
1986+ }
1987+
1988+ func (impl * K8sServiceImpl ) GetRestClientForCRD (config * ClusterConfig , groupVersion * schema.GroupVersion ) (* rest.RESTClient , error ) {
1989+
1990+ restConfig , err := impl .GetRestConfigByCluster (config )
1991+ if err != nil {
1992+ return nil , err
1993+ }
1994+
1995+ restConfig .ContentConfig = rest.ContentConfig {
1996+ GroupVersion : groupVersion ,
1997+ NegotiatedSerializer : scheme .Codecs .WithoutConversion (),
1998+ }
1999+ restConfig .APIPath = "/apis"
2000+
2001+ restClient , err := rest .RESTClientFor (restConfig )
2002+ if err != nil {
2003+ impl .logger .Errorw ("error in getting rest client" , "gvr" , groupVersion .String (), "err" , err )
2004+ return nil , err
2005+ }
2006+
2007+ return restClient , nil
2008+ }
2009+
2010+ func (impl * K8sServiceImpl ) PatchResourceByRestClient (restClient * rest.RESTClient , resource , name , namespace string , pt types.PatchType , data []byte , subresources ... string ) rest.Result {
2011+ result := restClient .Patch (pt ).
2012+ Namespace (namespace ).
2013+ Resource (resource ).
2014+ Name (name ).
2015+ SubResource (subresources ... ).
2016+ Body (data ).
2017+ Do (context .Background ())
2018+ return result
2019+ }
0 commit comments