forked from open-cluster-management-io/sdk-go
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclient.go
More file actions
98 lines (80 loc) · 3.72 KB
/
Copy pathclient.go
File metadata and controls
98 lines (80 loc) · 3.72 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package lease
import (
"context"
coordinationv1 "k8s.io/api/coordination/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
kubetypes "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/watch"
v1 "k8s.io/client-go/applyconfigurations/coordination/v1"
leasev1client "k8s.io/client-go/kubernetes/typed/coordination/v1"
"k8s.io/klog/v2"
cloudeventserrors "open-cluster-management.io/sdk-go/pkg/cloudevents/clients/errors"
"open-cluster-management.io/sdk-go/pkg/cloudevents/clients/options"
"open-cluster-management.io/sdk-go/pkg/cloudevents/clients/store"
"open-cluster-management.io/sdk-go/pkg/cloudevents/generic"
"open-cluster-management.io/sdk-go/pkg/cloudevents/generic/types"
)
type LeaseClient struct {
cloudEventsClient generic.CloudEventsClient[*coordinationv1.Lease]
watcherStore store.ClientWatcherStore[*coordinationv1.Lease]
namespace string
}
func (l LeaseClient) Create(ctx context.Context, lease *coordinationv1.Lease, opts metav1.CreateOptions) (*coordinationv1.Lease, error) {
return nil, errors.NewMethodNotSupported(coordinationv1.Resource("leases"), "create")
}
func (l LeaseClient) Update(ctx context.Context, lease *coordinationv1.Lease, opts metav1.UpdateOptions) (*coordinationv1.Lease, error) {
eventType := types.CloudEventsType{
CloudEventsDataType: LeaseEventDataType,
SubResource: types.SubResourceSpec,
Action: types.UpdateRequestAction,
}
if err := l.cloudEventsClient.Publish(ctx, eventType, lease); err != nil {
return nil, cloudeventserrors.ToStatusError(coordinationv1.Resource("leases"), lease.Name, err)
}
return lease, nil
}
func (l LeaseClient) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error {
return errors.NewMethodNotSupported(coordinationv1.Resource("leases"), "delete")
}
func (l LeaseClient) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error {
return errors.NewMethodNotSupported(coordinationv1.Resource("leases"), "deletecollection")
}
func (l LeaseClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*coordinationv1.Lease, error) {
klog.V(4).Infof("getting lease %s", name)
lease, exists, err := l.watcherStore.Get(l.namespace, name)
if err != nil {
return nil, errors.NewInternalError(err)
}
if !exists {
return nil, errors.NewNotFound(coordinationv1.Resource("leases"), name)
}
return lease, nil
}
func (l LeaseClient) List(ctx context.Context, opts metav1.ListOptions) (*coordinationv1.LeaseList, error) {
return nil, errors.NewMethodNotSupported(coordinationv1.Resource("leases"), "list")
}
func (l LeaseClient) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
return nil, errors.NewMethodNotSupported(coordinationv1.Resource("leases"), "watch")
}
func (l LeaseClient) Patch(ctx context.Context, name string, pt kubetypes.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *coordinationv1.Lease, err error) {
return nil, errors.NewMethodNotSupported(coordinationv1.Resource("leases"), "patch")
}
func (l LeaseClient) Apply(ctx context.Context, lease *v1.LeaseApplyConfiguration, opts metav1.ApplyOptions) (result *coordinationv1.Lease, err error) {
return nil, errors.NewMethodNotSupported(coordinationv1.Resource("leases"), "apply")
}
var _ leasev1client.LeaseInterface = &LeaseClient{}
func NewLeaseClient(
ctx context.Context, opt *options.GenericClientOptions[*coordinationv1.Lease],
namespace string,
) (*LeaseClient, error) {
cloudEventsClient, err := opt.AgentClient(ctx)
if err != nil {
return nil, err
}
return &LeaseClient{
cloudEventsClient: cloudEventsClient,
watcherStore: opt.WatcherStore(),
namespace: namespace,
}, nil
}