forked from kyma-project/kyma
/
resource.go
69 lines (56 loc) · 1.88 KB
/
resource.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
package resource
import (
"github.com/pkg/errors"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/dynamic"
)
type Resource struct {
resCli dynamic.ResourceInterface
namespace string
kind string
}
func New(dynamicCli dynamic.Interface, s schema.GroupVersionResource, namespace string) *Resource {
resCli := dynamicCli.Resource(s).Namespace(namespace)
return &Resource{resCli: resCli, namespace: namespace, kind: s.Resource}
}
func (r *Resource) Create(res interface{}) error {
u, err := runtime.DefaultUnstructuredConverter.ToUnstructured(res)
if err != nil {
return errors.Wrapf(err, "while converting resource %s %s to unstructured", r.kind, res)
}
unstructuredObj := &unstructured.Unstructured{
Object: u,
}
_, err = r.resCli.Create(unstructuredObj)
if err != nil {
if apierrors.IsAlreadyExists(err) {
return errors.Errorf("Cannot create. Resource %s with name '%s' already exist.", unstructuredObj.GetKind(), unstructuredObj.GetName())
}
return errors.Wrapf(err, "while creating resource %s ", unstructuredObj.GetKind())
}
return nil
}
func (r *Resource) Get(name string) (*unstructured.Unstructured, error) {
u, err := r.resCli.Get(name, metav1.GetOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
return nil, err
}
return nil, errors.Wrapf(err, "while getting resource %s '%s'", r.kind, name)
}
return u, nil
}
func (r *Resource) Delete(name string) error {
err := r.resCli.Delete(name, &metav1.DeleteOptions{})
if err != nil {
if apierrors.IsNotFound(err) {
return errors.Errorf("Cannot delete. Resource %s with name '%s' is not found.", r.kind, name)
}
return errors.Wrapf(err, "while deleting resource %s '%s'", r.kind, name)
}
return nil
}