-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathconfigmap.go
119 lines (100 loc) · 3.02 KB
/
configmap.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
package configmap
import (
"context"
"fmt"
"net/http"
"github.com/ericchiang/k8s"
corev1 "github.com/ericchiang/k8s/apis/core/v1"
"github.com/rs/rest-layer/resource"
"github.com/rs/rest-layer/schema"
"github.com/rs/rest-layer/schema/query"
)
const configMapNameField = "id"
const namespaceField = "namespace"
var ConfigMapSchema = schema.Schema{
Fields: schema.Fields{
configMapNameField: {
Required: true,
Filterable: false,
Sortable: false,
Validator: &schema.String{
MinLen: 1,
},
},
namespaceField: {
Required: false,
Filterable: true,
Sortable: false,
Validator: &schema.String{
MinLen: 1,
},
},
"data": {
Required: true,
Filterable: false,
Validator: &schema.Dict{
KeysValidator: &schema.String{},
Values: schema.Field{
Validator: &schema.String{},
},
},
},
},
}
var (
emptyLabels map[string]string
)
func (k *KubernetesClient) Insert(ctx context.Context, items []*resource.Item) (err error) {
for _, item := range items {
configMapName := fmt.Sprintf("%v", item.Payload[configMapNameField])
actualKubernetesNamespace := k.getKubernetesNamespaceFromItem(item)
configMap := buildConfigMap(item, actualKubernetesNamespace, emptyLabels)
var existingConfigMap corev1.ConfigMap
err = k.client.Get(ctx, actualKubernetesNamespace, configMapName, &existingConfigMap)
if err != nil {
apiErr, _ := err.(*k8s.APIError)
if apiErr.Code == http.StatusNotFound {
if err := k.client.Create(ctx, configMap); err != nil {
return err
}
}
}
updatedConfigMap := buildConfigMap(item, actualKubernetesNamespace, existingConfigMap.Metadata.Labels)
return k.client.Update(ctx, updatedConfigMap)
}
return nil
}
func (k *KubernetesClient) Delete(ctx context.Context, item *resource.Item) (err error) {
return k.client.Delete(ctx, buildConfigMap(item, k.getKubernetesNamespaceFromItem(item), emptyLabels))
}
func (k *KubernetesClient) Update(ctx context.Context, item *resource.Item, original *resource.Item) (err error) {
return k.client.Update(ctx, buildConfigMap(item, k.getKubernetesNamespaceFromItem(item), emptyLabels))
}
func (k *KubernetesClient) Clear(ctx context.Context, q *query.Query) (total int, err error) {
configMaps, err := k.Find(ctx, q)
if err != nil {
return 0, err
} else {
for _, configMap := range configMaps.Items {
if err := k.Delete(ctx, configMap); err != nil {
return 0, err
}
}
}
return configMaps.Total, nil
}
func (k *KubernetesClient) Find(ctx context.Context, q *query.Query) (list *resource.ItemList, err error) {
list = &resource.ItemList{Items: []*resource.Item{}}
configMap, kubernetesNamespace, err := k.findConfigMap(ctx, q)
if err != nil {
return nil, err
} else if configMap != nil && kubernetesNamespace != "" {
item, err := buildItem(configMap, kubernetesNamespace, configMap.Metadata.Name)
if err != nil {
return nil, err
}
list.Items = append(list.Items, item)
}
list.Total = len(list.Items)
return list, nil
}