@@ -77,8 +77,8 @@ func NewFromClient(ctx context.Context, dynamic dynamic.Interface) *Client {
77
77
}
78
78
}
79
79
80
- // maps kinds to api resources
81
- func knownKinds ( kind string ) (schema. GroupVersionResource , error ) {
80
+ // getResource maps kinds to api resources
81
+ func ( c * Client ) getResource ( kind string , namespace string ) (dynamic. ResourceInterface , error ) {
82
82
kindMapping := map [string ]schema.GroupVersionResource {
83
83
"ConfigMap" : {Group : "" , Version : "v1" , Resource : "configmaps" },
84
84
"Deployment" : {Group : "apps" , Version : "v1" , Resource : "deployments" },
@@ -94,11 +94,19 @@ func knownKinds(kind string) (schema.GroupVersionResource, error) {
94
94
"StatefulSet" : {Group : "apps" , Version : "v1" , Resource : "statefulsets" },
95
95
}
96
96
97
- gvk , found := kindMapping [kind ]
97
+ gvr , found := kindMapping [kind ]
98
98
if ! found {
99
- return schema. GroupVersionResource {} , fmt .Errorf ("unknown kind: '%s'" , kind )
99
+ return nil , fmt .Errorf ("unknown kind: '%s'" , kind )
100
100
}
101
- return gvk , nil
101
+
102
+ var resource dynamic.ResourceInterface
103
+ if kind == "Namespace" {
104
+ resource = c .dynamic .Resource (gvr )
105
+ } else {
106
+ resource = c .dynamic .Resource (gvr ).Namespace (namespace )
107
+ }
108
+
109
+ return resource , nil
102
110
}
103
111
104
112
// Apply creates a resource in a kubernetes cluster from a YAML manifest
@@ -108,23 +116,21 @@ func (c *Client) Apply(manifest string) error {
108
116
if err != nil {
109
117
return err
110
118
}
111
- resource , err := knownKinds (gvk .Kind )
112
- if err != nil {
113
- return err
114
- }
115
-
116
119
namespace := uObj .GetNamespace ()
117
120
if namespace == "" {
118
121
namespace = "default"
119
122
}
120
123
121
- _ , err = c .dynamic .Resource (resource ).
122
- Namespace (namespace ).
123
- Create (
124
- c .ctx ,
125
- uObj ,
126
- metav1.CreateOptions {},
127
- )
124
+ resource , err := c .getResource (gvk .Kind , namespace )
125
+ if err != nil {
126
+ return err
127
+ }
128
+
129
+ _ , err = resource .Create (
130
+ c .ctx ,
131
+ uObj ,
132
+ metav1.CreateOptions {},
133
+ )
128
134
return err
129
135
}
130
136
@@ -139,19 +145,12 @@ func (c *Client) Create(obj map[string]interface{}) (map[string]interface{}, err
139
145
if namespace == "" {
140
146
namespace = "default"
141
147
}
142
- gvr , err := knownKinds (gvk .Kind )
148
+
149
+ resource , err := c .getResource (gvk .Kind , namespace )
143
150
if err != nil {
144
151
return nil , err
145
152
}
146
153
147
- // Namesapces cannot be created in a namespaced resource interface, handle as special case
148
- var resource dynamic.ResourceInterface
149
- if gvk .Kind == "Namespace" {
150
- resource = c .dynamic .Resource (gvr )
151
- } else {
152
- resource = c .dynamic .Resource (gvr ).Namespace (namespace )
153
- }
154
-
155
154
resp , err := resource .Create (
156
155
c .ctx ,
157
156
uObj ,
@@ -165,19 +164,16 @@ func (c *Client) Create(obj map[string]interface{}) (map[string]interface{}, err
165
164
166
165
// Get returns an object given its kind, name and namespace
167
166
func (c * Client ) Get (kind string , name string , namespace string ) (map [string ]interface {}, error ) {
168
- resource , err := knownKinds (kind )
167
+ resource , err := c . getResource (kind , namespace )
169
168
if err != nil {
170
169
return nil , err
171
170
}
172
171
173
- resp , err := c .dynamic .
174
- Resource (resource ).
175
- Namespace (namespace ).
176
- Get (
177
- c .ctx ,
178
- name ,
179
- metav1.GetOptions {},
180
- )
172
+ resp , err := resource .Get (
173
+ c .ctx ,
174
+ name ,
175
+ metav1.GetOptions {},
176
+ )
181
177
if err != nil {
182
178
return nil , err
183
179
}
@@ -186,14 +182,12 @@ func (c *Client) Get(kind string, name string, namespace string) (map[string]int
186
182
187
183
// List returns a list of objects given its kind and namespace
188
184
func (c * Client ) List (kind string , namespace string ) ([]map [string ]interface {}, error ) {
189
- resource , err := knownKinds (kind )
185
+ resource , err := c . getResource (kind , namespace )
190
186
if err != nil {
191
187
return nil , err
192
188
}
193
- resp , err := c .dynamic .
194
- Resource (resource ).
195
- Namespace (namespace ).
196
- List (c .ctx , metav1.ListOptions {})
189
+
190
+ resp , err := resource .List (c .ctx , metav1.ListOptions {})
197
191
if err != nil {
198
192
return nil , err
199
193
}
@@ -207,15 +201,11 @@ func (c *Client) List(kind string, namespace string) ([]map[string]interface{},
207
201
208
202
// Delete deletes an object given its kind, name and namespace
209
203
func (c * Client ) Delete (kind string , name string , namespace string ) error {
210
- resource , err := knownKinds (kind )
204
+ resource , err := c . getResource (kind , namespace )
211
205
if err != nil {
212
206
return err
213
207
}
214
-
215
- err = c .dynamic .
216
- Resource (resource ).
217
- Namespace (namespace ).
218
- Delete (c .ctx , name , metav1.DeleteOptions {})
208
+ err = resource .Delete (c .ctx , name , metav1.DeleteOptions {})
219
209
220
210
return err
221
211
}
@@ -231,18 +221,16 @@ func (c *Client) Update(obj map[string]interface{}) (map[string]interface{}, err
231
221
if namespace == "" {
232
222
namespace = "default"
233
223
}
234
- resource , err := knownKinds (gvk .Kind )
224
+ resource , err := c . getResource (gvk .Kind , namespace )
235
225
if err != nil {
236
226
return nil , err
237
227
}
238
228
239
- resp , err := c .dynamic .Resource (resource ).
240
- Namespace (namespace ).
241
- Update (
242
- c .ctx ,
243
- uObj ,
244
- metav1.UpdateOptions {},
245
- )
229
+ resp , err := resource .Update (
230
+ c .ctx ,
231
+ uObj ,
232
+ metav1.UpdateOptions {},
233
+ )
246
234
if err != nil {
247
235
return nil , err
248
236
}
0 commit comments