-
Notifications
You must be signed in to change notification settings - Fork 228
/
directcrdclient.go
54 lines (44 loc) · 1.44 KB
/
directcrdclient.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package kubecontroller
import (
"context"
nnc "github.com/Azure/azure-container-networking/nodenetworkconfig/api/v1alpha"
"k8s.io/apimachinery/pkg/runtime/schema"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
)
// Implements DirectCRDClient interface
var _ DirectCRDClient = &CRDDirectClient{}
// CRDDirectClient is a direct client to CRDs in the API Server.
type CRDDirectClient struct {
restClient *rest.RESTClient
}
// Get gets a crd
func (crdClient *CRDDirectClient) Get(ctx context.Context, name, namespace, typeName string) (*nnc.NodeNetworkConfig, error) {
var (
nodeNetConfig *nnc.NodeNetworkConfig
err error
)
nodeNetConfig = &nnc.NodeNetworkConfig{}
if err = crdClient.restClient.Get().Namespace(namespace).Resource(crdTypeName).Name(name).Do(ctx).Into(nodeNetConfig); err != nil {
return nil, err
}
return nodeNetConfig, nil
}
// NewCRDDirectClient creates a new direct crd client to the api server
func NewCRDDirectClient(kubeconfig *rest.Config, groupVersion *schema.GroupVersion) (*CRDDirectClient, error) {
var (
config rest.Config
restClient *rest.RESTClient
err error
)
config = *kubeconfig
config.GroupVersion = groupVersion
config.APIPath = "/apis"
config.NegotiatedSerializer = clientgoscheme.Codecs.WithoutConversion()
if restClient, err = rest.RESTClientFor(&config); err != nil {
return nil, err
}
return &CRDDirectClient{
restClient: restClient,
}, nil
}