forked from ZupIT/charlescd
/
k8srepository.go
101 lines (85 loc) · 2.58 KB
/
k8srepository.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
package module
import (
"context"
charlescdiov1alpha1 "github.com/octopipe/charlescd/butler/api/v1alpha1"
"github.com/octopipe/charlescd/moove/internal/core/listoptions"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client"
)
type k8sRepository struct {
clientset client.Client
}
func NewK8sRepository(clientset client.Client) ModuleRepository {
return k8sRepository{clientset: clientset}
}
func (r k8sRepository) toModule(c charlescdiov1alpha1.Module) Module {
module := Module{
Name: c.Name,
ModuleSpec: c.Spec,
}
return module
}
func (r k8sRepository) toK8sModule(c Module) charlescdiov1alpha1.Module {
module := charlescdiov1alpha1.Module{}
module.SetName(c.Name)
module.Spec = c.ModuleSpec
return module
}
// Create implements ModuleRepository
func (r k8sRepository) Create(ctx context.Context, workspace string, module Module) (Module, error) {
newModule := r.toK8sModule(module)
err := r.clientset.Create(ctx, &newModule)
return r.toModule(newModule), err
}
func (r k8sRepository) Update(ctx context.Context, workspace string, name string, module Module) (Module, error) {
newModule := r.toK8sModule(module)
err := r.clientset.Update(ctx, &newModule)
return r.toModule(newModule), err
}
// FindAll implements ModuleRepository
func (r k8sRepository) FindAll(ctx context.Context, namespace string, request listoptions.Request) (listoptions.Response, error) {
list := charlescdiov1alpha1.ModuleList{}
listOptions := &client.ListOptions{
Namespace: namespace,
Limit: request.Limit,
Continue: request.Continue,
}
err := r.clientset.List(ctx, &list, listOptions)
if err != nil {
return listoptions.Response{}, err
}
moduleItems := []Module{}
for _, i := range list.Items {
moduleItems = append(moduleItems, Module{
Name: i.GetName(),
})
}
return listoptions.Response{
Continue: list.Continue,
Items: moduleItems,
}, nil
}
// FindByName implements ModuleRepository
func (r k8sRepository) FindByName(ctx context.Context, namespace string, name string) (Module, error) {
ref := types.NamespacedName{
Name: name,
Namespace: namespace,
}
module := charlescdiov1alpha1.Module{}
err := r.clientset.Get(ctx, ref, &module)
return r.toModule(module), err
}
// Delete implements ModuleRepository
func (r k8sRepository) Delete(ctx context.Context, namespace string, name string) error {
ref := types.NamespacedName{
Name: name,
Namespace: namespace,
}
module := charlescdiov1alpha1.Module{}
err := r.clientset.Get(ctx, ref, &module)
if err != nil {
return err
}
err = r.clientset.Delete(ctx, &module)
return err
}