-
Notifications
You must be signed in to change notification settings - Fork 406
/
kyma_subscription.go
115 lines (101 loc) · 3.53 KB
/
kyma_subscription.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
package kyma_subscription
import (
"encoding/json"
kymaeventingv1alpha1 "github.com/kyma-project/kyma/components/eventing-controller/api/v1alpha1"
"github.com/pkg/errors"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
k8sruntime "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/dynamic"
)
type Client struct {
DynamicClient dynamic.Interface
}
func NewClient(dInf dynamic.Interface) Client {
return Client{DynamicClient: dInf}
}
func (c Client) List() (*kymaeventingv1alpha1.SubscriptionList, error) {
subscriptionsUnstructured, err := c.DynamicClient.Resource(GroupVersionResource()).Namespace(corev1.NamespaceAll).List(metav1.ListOptions{})
if err != nil {
return nil, err
}
return toSubscriptionList(subscriptionsUnstructured)
}
func (c Client) Get(namespace, name string) (*kymaeventingv1alpha1.Subscription, error) {
unstructuredSubscription, err := c.DynamicClient.Resource(GroupVersionResource()).Namespace(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return nil, err
}
return toSubscription(unstructuredSubscription)
}
func (c Client) Delete(namespace, name string) error {
err := c.DynamicClient.Resource(GroupVersionResource()).Namespace(namespace).Delete(name, &metav1.DeleteOptions{})
if err != nil {
return err
}
return nil
}
func (c Client) Create(sub *kymaeventingv1alpha1.Subscription) (*kymaeventingv1alpha1.Subscription, error) {
unstructuredObj, err := toUnstructured(sub)
if err != nil {
return nil, errors.Wrap(err, "failed to convert cm to unstructured")
}
unstructuredSub, err := c.DynamicClient.
Resource(GroupVersionResource()).
Namespace(sub.Namespace).
Create(unstructuredObj, metav1.CreateOptions{})
if err != nil {
return nil, err
}
return toSubscription(unstructuredSub)
}
func toUnstructured(sub *kymaeventingv1alpha1.Subscription) (*unstructured.Unstructured, error) {
object, err := k8sruntime.DefaultUnstructuredConverter.ToUnstructured(&sub)
if err != nil {
return nil, err
}
return &unstructured.Unstructured{Object: object}, nil
}
func toSubscription(unstructuredSub *unstructured.Unstructured) (*kymaeventingv1alpha1.Subscription, error) {
subscription := new(kymaeventingv1alpha1.Subscription)
err := k8sruntime.DefaultUnstructuredConverter.FromUnstructured(unstructuredSub.Object, subscription)
if err != nil {
return nil, err
}
return subscription, nil
}
func toSubscriptionList(unstructuredList *unstructured.UnstructuredList) (*kymaeventingv1alpha1.SubscriptionList, error) {
subscriptionList := new(kymaeventingv1alpha1.SubscriptionList)
subscriptionListBytes, err := unstructuredList.MarshalJSON()
if err != nil {
return nil, err
}
err = json.Unmarshal(subscriptionListBytes, subscriptionList)
if err != nil {
return nil, err
}
return subscriptionList, nil
}
func GroupVersionResource() schema.GroupVersionResource {
return schema.GroupVersionResource{
Version: kymaeventingv1alpha1.GroupVersion.Version,
Group: kymaeventingv1alpha1.GroupVersion.Group,
Resource: "subscriptions",
}
}
func GroupVersionKind() schema.GroupVersionKind {
return schema.GroupVersionKind{
Version: kymaeventingv1alpha1.GroupVersion.Version,
Group: kymaeventingv1alpha1.GroupVersion.Group,
Kind: "Subscription",
}
}
func GroupVersionKindList() schema.GroupVersionKind {
return schema.GroupVersionKind{
Version: kymaeventingv1alpha1.GroupVersion.Version,
Group: kymaeventingv1alpha1.GroupVersion.Group,
Kind: "SubscriptionList",
}
}