1
2
3
4 package command_test
5
6 import (
7 "bytes"
8 "fmt"
9
10 "sigs.k8s.io/kustomize/kyaml/fn/framework"
11 "sigs.k8s.io/kustomize/kyaml/fn/framework/command"
12 "sigs.k8s.io/kustomize/kyaml/kio"
13 "sigs.k8s.io/kustomize/kyaml/yaml"
14 )
15
16 const service = "Service"
17
18
19
20 func ExampleBuild_modify() {
21
22 var config struct {
23 Data map[string]string `yaml:"data"`
24 }
25 fn := func(items []*yaml.RNode) ([]*yaml.RNode, error) {
26 for i := range items {
27
28 err := items[i].PipeE(yaml.SetAnnotation("value", config.Data["value"]))
29 if err != nil {
30 return nil, err
31 }
32 }
33 return items, nil
34 }
35 p := framework.SimpleProcessor{Filter: kio.FilterFunc(fn), Config: &config}
36 cmd := command.Build(p, command.StandaloneDisabled, false)
37
38
39 cmd.SetIn(bytes.NewBufferString(`
40 apiVersion: config.kubernetes.io/v1
41 kind: ResourceList
42 # items are provided as nodes
43 items:
44 - apiVersion: apps/v1
45 kind: Deployment
46 metadata:
47 name: foo
48 - apiVersion: v1
49 kind: Service
50 metadata:
51 name: foo
52 functionConfig:
53 apiVersion: v1
54 kind: ConfigMap
55 data:
56 value: baz
57 `))
58
59 if err := cmd.Execute(); err != nil {
60 panic(err)
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 func ExampleBuild_generateReplace() {
89
90
91 type Spec struct {
92 Name string `yaml:"name,omitempty"`
93 }
94 type ExampleServiceGenerator struct {
95 Spec Spec `yaml:"spec,omitempty"`
96 }
97 functionConfig := &ExampleServiceGenerator{}
98
99
100 p := &framework.SimpleProcessor{
101 Config: functionConfig,
102 Filter: kio.FilterFunc(func(items []*yaml.RNode) ([]*yaml.RNode, error) {
103 var newNodes []*yaml.RNode
104 for i := range items {
105 meta, err := items[i].GetMeta()
106 if err != nil {
107 return nil, err
108 }
109
110
111 if meta.Name == functionConfig.Spec.Name &&
112 meta.Kind == service &&
113 meta.APIVersion == "v1" {
114 continue
115 }
116 newNodes = append(newNodes, items[i])
117 }
118
119
120 n, err := yaml.Parse(fmt.Sprintf(`apiVersion: v1
121 kind: Service
122 metadata:
123 name: %s
124 `, functionConfig.Spec.Name))
125 if err != nil {
126 return nil, err
127 }
128 newNodes = append(newNodes, n)
129 return newNodes, nil
130 }),
131 }
132 cmd := command.Build(p, command.StandaloneDisabled, false)
133
134
135 cmd.SetIn(bytes.NewBufferString(`
136 apiVersion: config.kubernetes.io/v1
137 kind: ResourceList
138 # items are provided as nodes
139 items:
140 - apiVersion: apps/v1
141 kind: Deployment
142 metadata:
143 name: foo
144 functionConfig:
145 apiVersion: example.com/v1alpha1
146 kind: ExampleServiceGenerator
147 spec:
148 name: bar
149 `))
150
151
152 if err := cmd.Execute(); err != nil {
153 panic(err)
154 }
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173 }
174
175
176
177
178
179 func ExampleBuild_generateUpdate() {
180
181
182 type Spec struct {
183 Name string `yaml:"name,omitempty"`
184 Annotations map[string]string `yaml:"annotations,omitempty"`
185 }
186 type ExampleServiceGenerator struct {
187 Spec Spec `yaml:"spec,omitempty"`
188 }
189 functionConfig := &ExampleServiceGenerator{}
190
191
192 fn := func(items []*yaml.RNode) ([]*yaml.RNode, error) {
193 var found bool
194 for i := range items {
195 meta, err := items[i].GetMeta()
196 if err != nil {
197 return nil, err
198 }
199
200
201
202 if meta.Name == functionConfig.Spec.Name &&
203 meta.Kind == service &&
204 meta.APIVersion == "v1" {
205
206 for k, v := range functionConfig.Spec.Annotations {
207 err := items[i].PipeE(yaml.SetAnnotation(k, v))
208 if err != nil {
209 return nil, err
210 }
211 }
212 found = true
213 break
214 }
215 }
216 if found {
217 return items, nil
218 }
219
220
221 n, err := yaml.Parse(fmt.Sprintf(`apiVersion: v1
222 kind: Service
223 metadata:
224 name: %s
225 `, functionConfig.Spec.Name))
226 if err != nil {
227 return nil, err
228 }
229 for k, v := range functionConfig.Spec.Annotations {
230 err := n.PipeE(yaml.SetAnnotation(k, v))
231 if err != nil {
232 return nil, err
233 }
234 }
235 items = append(items, n)
236 return items, nil
237 }
238
239 p := &framework.SimpleProcessor{Config: functionConfig, Filter: kio.FilterFunc(fn)}
240 cmd := command.Build(p, command.StandaloneDisabled, false)
241
242
243 cmd.SetIn(bytes.NewBufferString(`
244 apiVersion: config.kubernetes.io/v1
245 kind: ResourceList
246 # items are provided as nodes
247 items:
248 - apiVersion: apps/v1
249 kind: Deployment
250 metadata:
251 name: foo
252 - apiVersion: v1
253 kind: Service
254 metadata:
255 name: bar
256 functionConfig:
257 apiVersion: example.com/v1alpha1
258 kind: ExampleServiceGenerator
259 spec:
260 name: bar
261 annotations:
262 a: b
263 `))
264
265
266 if err := cmd.Execute(); err != nil {
267 panic(err)
268 }
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291 }
292
293
294
295
296 func ExampleBuild_validate() {
297 fn := func(rl *framework.ResourceList) error {
298
299 var validationResults framework.Results
300
301
302 for i := range rl.Items {
303
304 meta, err := rl.Items[i].GetMeta()
305 if err != nil {
306 return err
307 }
308 if meta.Kind != "Deployment" {
309 continue
310 }
311
312
313 r, err := rl.Items[i].Pipe(yaml.Lookup("spec", "replicas"))
314 if err != nil {
315 return err
316 }
317
318
319 if r != nil {
320 continue
321 }
322 validationResults = append(validationResults, &framework.Result{
323 Severity: framework.Error,
324 Message: "field is required",
325 ResourceRef: &yaml.ResourceIdentifier{
326 TypeMeta: meta.TypeMeta,
327 NameMeta: meta.ObjectMeta.NameMeta,
328 },
329 Field: &framework.Field{
330 Path: "spec.replicas",
331 ProposedValue: "1",
332 },
333 })
334 }
335
336 if len(validationResults) > 0 {
337 rl.Results = validationResults
338 }
339
340 return rl.Results
341 }
342
343 cmd := command.Build(framework.ResourceListProcessorFunc(fn), command.StandaloneDisabled, true)
344
345 cmd.SetIn(bytes.NewBufferString(`
346 apiVersion: config.kubernetes.io/v1
347 kind: ResourceList
348 # items are provided as nodes
349 items:
350 - apiVersion: apps/v1
351 kind: Deployment
352 metadata:
353 name: foo
354 `))
355
356
357 if err := cmd.Execute(); err != nil {
358
359 }
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379 }
380
View as plain text