/
namespace_api.go
84 lines (60 loc) · 1.93 KB
/
namespace_api.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
package kube
import (
"context"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
v1 "k8s.io/client-go/kubernetes/typed/core/v1"
)
type NamespaceAPI struct {
Kubernetes *Kubernetes
Client v1.NamespaceInterface
}
func NewNamespaceAPI(kubernetes *Kubernetes) *NamespaceAPI {
client := kubernetes.Client.CoreV1().Namespaces()
return &NamespaceAPI{Kubernetes: kubernetes, Client: client}
}
func (n *NamespaceAPI) Find() {
stmt := n.Kubernetes.Statement
switch stmt.GetTarget().(type) {
case Namespace:
namespace := stmt.GetTarget().(Namespace)
namespaceSpec, _ := n.Client.Get(context.TODO(), namespace.Name, metav1.GetOptions{})
namespace.Unmarshal(namespaceSpec)
stmt.SetTarget(namespace)
case []Namespace:
namespaces := stmt.GetTarget().([]Namespace)
namespacesSpec, _ := n.Client.List(context.TODO(), metav1.ListOptions{})
for _, n := range namespacesSpec.Items {
var namespace Namespace
namespace.Unmarshal(&n)
namespaces = append(namespaces, namespace)
}
stmt.SetTarget(namespaces)
}
}
func (n *NamespaceAPI) Create() {
stmt := n.Kubernetes.Statement
namespace := stmt.GetTarget().(Namespace)
namespaceSpec, _ := namespace.Marshal()
n.Client.Create(context.TODO(), &namespaceSpec, metav1.CreateOptions{})
// need to return the created data
}
func (n *NamespaceAPI) Update() {
stmt := n.Kubernetes.Statement
old := stmt.GetTarget().(Namespace)
new := stmt.GetOrigin().(Namespace)
namespaceSpec, _ := n.Client.Get(context.TODO(), old.Name, metav1.GetOptions{})
if new.Labels != nil {
namespaceSpec.SetLabels(new.Labels)
}
if updated, err := n.Client.Update(context.TODO(), namespaceSpec, metav1.UpdateOptions{}); err == nil {
new.Unmarshal(updated)
stmt.SetTarget(new)
}
}
func (n *NamespaceAPI) Upsert() {
}
func (n *NamespaceAPI) Delete() {
stmt := n.Kubernetes.Statement
namespace := stmt.GetTarget().(Namespace)
n.Client.Delete(context.TODO(), namespace.Name, metav1.DeleteOptions{})
}