/
job_client.sk.go
130 lines (109 loc) · 3.25 KB
/
job_client.sk.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
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Code generated by solo-kit. DO NOT EDIT.
package kubernetes
import (
"context"
"github.com/solo-io/solo-kit/pkg/api/v1/clients"
"github.com/solo-io/solo-kit/pkg/api/v1/clients/factory"
"github.com/solo-io/solo-kit/pkg/api/v1/resources"
"github.com/solo-io/solo-kit/pkg/errors"
)
type JobWatcher interface {
// watch namespace-scoped jobs
Watch(namespace string, opts clients.WatchOpts) (<-chan JobList, <-chan error, error)
}
type JobClient interface {
BaseClient() clients.ResourceClient
Register() error
Read(namespace, name string, opts clients.ReadOpts) (*Job, error)
Write(resource *Job, opts clients.WriteOpts) (*Job, error)
Delete(namespace, name string, opts clients.DeleteOpts) error
List(namespace string, opts clients.ListOpts) (JobList, error)
JobWatcher
}
type jobClient struct {
rc clients.ResourceClient
}
func NewJobClient(ctx context.Context, rcFactory factory.ResourceClientFactory) (JobClient, error) {
return NewJobClientWithToken(ctx, rcFactory, "")
}
func NewJobClientWithToken(ctx context.Context, rcFactory factory.ResourceClientFactory, token string) (JobClient, error) {
rc, err := rcFactory.NewResourceClient(ctx, factory.NewResourceClientParams{
ResourceType: &Job{},
Token: token,
})
if err != nil {
return nil, errors.Wrapf(err, "creating base Job resource client")
}
return NewJobClientWithBase(rc), nil
}
func NewJobClientWithBase(rc clients.ResourceClient) JobClient {
return &jobClient{
rc: rc,
}
}
func (client *jobClient) BaseClient() clients.ResourceClient {
return client.rc
}
func (client *jobClient) Register() error {
return client.rc.Register()
}
func (client *jobClient) Read(namespace, name string, opts clients.ReadOpts) (*Job, error) {
opts = opts.WithDefaults()
resource, err := client.rc.Read(namespace, name, opts)
if err != nil {
return nil, err
}
return resource.(*Job), nil
}
func (client *jobClient) Write(job *Job, opts clients.WriteOpts) (*Job, error) {
opts = opts.WithDefaults()
resource, err := client.rc.Write(job, opts)
if err != nil {
return nil, err
}
return resource.(*Job), nil
}
func (client *jobClient) Delete(namespace, name string, opts clients.DeleteOpts) error {
opts = opts.WithDefaults()
return client.rc.Delete(namespace, name, opts)
}
func (client *jobClient) List(namespace string, opts clients.ListOpts) (JobList, error) {
opts = opts.WithDefaults()
resourceList, err := client.rc.List(namespace, opts)
if err != nil {
return nil, err
}
return convertToJob(resourceList), nil
}
func (client *jobClient) Watch(namespace string, opts clients.WatchOpts) (<-chan JobList, <-chan error, error) {
opts = opts.WithDefaults()
resourcesChan, errs, initErr := client.rc.Watch(namespace, opts)
if initErr != nil {
return nil, nil, initErr
}
jobsChan := make(chan JobList)
go func() {
for {
select {
case resourceList := <-resourcesChan:
select {
case jobsChan <- convertToJob(resourceList):
case <-opts.Ctx.Done():
close(jobsChan)
return
}
case <-opts.Ctx.Done():
close(jobsChan)
return
}
}
}()
return jobsChan, errs, nil
}
func convertToJob(resources resources.ResourceList) JobList {
var jobList JobList
for _, resource := range resources {
jobList = append(jobList, resource.(*Job))
}
return jobList
}