...
1
16
17 package openapi
18
19 import (
20 "encoding/json"
21 "fmt"
22
23 "k8s.io/apimachinery/pkg/util/managedfields"
24 "k8s.io/kube-openapi/pkg/spec3"
25 "k8s.io/kube-openapi/pkg/validation/spec"
26 )
27
28 func NewTypeConverter(client Client, preserveUnknownFields bool) (managedfields.TypeConverter, error) {
29 spec := map[string]*spec.Schema{}
30 paths, err := client.Paths()
31 if err != nil {
32 return nil, fmt.Errorf("failed to list paths: %w", err)
33 }
34 for _, gv := range paths {
35 s, err := gv.Schema("application/json")
36 if err != nil {
37 return nil, fmt.Errorf("failed to download schema: %w", err)
38 }
39 var openapi spec3.OpenAPI
40 if err := json.Unmarshal(s, &openapi); err != nil {
41 return nil, fmt.Errorf("failed to parse schema: %w", err)
42 }
43 for k, v := range openapi.Components.Schemas {
44 spec[k] = v
45 }
46 }
47 return managedfields.NewTypeConverter(spec, preserveUnknownFields)
48 }
49
View as plain text