...
1
2
3
4 package starlark
5
6 import (
7 "encoding/json"
8 "os"
9 "strings"
10
11 "go.starlark.net/starlark"
12 "go.starlark.net/starlarkstruct"
13 "sigs.k8s.io/kustomize/kyaml/errors"
14 "sigs.k8s.io/kustomize/kyaml/internal/forked/github.com/qri-io/starlib/util"
15 "sigs.k8s.io/kustomize/kyaml/openapi"
16 "sigs.k8s.io/kustomize/kyaml/yaml"
17 )
18
19 type Context struct {
20 resourceList starlark.Value
21 }
22
23 func (c *Context) predeclared() (starlark.StringDict, error) {
24 e, err := env()
25 if err != nil {
26 return nil, err
27 }
28 oa, err := oa()
29 if err != nil {
30 return nil, err
31 }
32 dict := starlark.StringDict{
33 "resource_list": c.resourceList,
34 "open_api": oa,
35 "environment": e,
36 }
37
38 return starlark.StringDict{
39 "ctx": starlarkstruct.FromStringDict(starlarkstruct.Default, dict),
40 }, nil
41 }
42
43 func oa() (starlark.Value, error) {
44 return interfaceToValue(openapi.Schema())
45 }
46
47 func env() (starlark.Value, error) {
48 env := map[string]interface{}{}
49 for _, e := range os.Environ() {
50 pair := strings.SplitN(e, "=", 2)
51 if len(pair) < 2 {
52 continue
53 }
54 env[pair[0]] = pair[1]
55 }
56 value, err := util.Marshal(env)
57 if err != nil {
58 return nil, errors.Wrap(err)
59 }
60 return value, nil
61 }
62
63 func interfaceToValue(i interface{}) (starlark.Value, error) {
64 b, err := json.Marshal(i)
65 if err != nil {
66 return nil, err
67 }
68
69 var in map[string]interface{}
70 if err := yaml.Unmarshal(b, &in); err != nil {
71 return nil, errors.Wrap(err)
72 }
73
74 value, err := util.Marshal(in)
75 if err != nil {
76 return nil, errors.Wrap(err)
77 }
78 return value, nil
79 }
80
View as plain text