@@ -18,17 +18,7 @@ import (
18
18
type InlineLoader struct {}
19
19
20
20
func (i * InlineLoader ) Load (path string , opts JsonnetOpts ) (* v1alpha1.Environment , error ) {
21
- raw , err := EvalJsonnet (path , opts )
22
- if err != nil {
23
- return nil , err
24
- }
25
-
26
- var data interface {}
27
- if err := json .Unmarshal ([]byte (raw ), & data ); err != nil {
28
- return nil , err
29
- }
30
-
31
- envs , err := extractEnvs (data )
21
+ envs , err := inlineEval (path , opts )
32
22
if err != nil {
33
23
return nil , err
34
24
}
@@ -45,38 +35,91 @@ func (i *InlineLoader) Load(path string, opts JsonnetOpts) (*v1alpha1.Environmen
45
35
return nil , fmt .Errorf ("Found no environments in '%s'" , path )
46
36
}
47
37
48
- root , err := jpath .FindRoot (path )
38
+ // TODO: Re-serializing the entire env here. This is horribly inefficient
39
+ envData , err := json .Marshal (envs [0 ])
49
40
if err != nil {
50
41
return nil , err
51
42
}
52
43
53
- file , err := jpath . Entrypoint (path )
44
+ env , err := inlineParse (path , envData )
54
45
if err != nil {
55
46
return nil , err
56
47
}
57
48
58
- namespace , err := filepath .Rel (root , file )
49
+ return env , nil
50
+ }
51
+
52
+ func (i * InlineLoader ) Peek (path string , opts JsonnetOpts ) (* v1alpha1.Environment , error ) {
53
+ opts .EvalScript = EnvsOnlyEvalScript
54
+ return i .Load (path , opts )
55
+ }
56
+
57
+ func (i * InlineLoader ) List (path string , opts JsonnetOpts ) ([]* v1alpha1.Environment , error ) {
58
+ opts .EvalScript = EnvsOnlyEvalScript
59
+ list , err := inlineEval (path , opts )
59
60
if err != nil {
60
61
return nil , err
61
62
}
62
63
63
- // TODO: Re-serializing the entire env here. This is horribly inefficient
64
- envData , err := json .Marshal (envs [0 ])
64
+ envs := make ([]* v1alpha1.Environment , 0 , len (list ))
65
+ for _ , raw := range list {
66
+ data , err := json .Marshal (raw )
67
+ if err != nil {
68
+ return nil , err
69
+ }
70
+
71
+ env , err := inlineParse (path , data )
72
+ if err != nil {
73
+ return nil , err
74
+ }
75
+
76
+ envs = append (envs , env )
77
+ }
78
+
79
+ return envs , nil
80
+ }
81
+
82
+ func inlineEval (path string , opts JsonnetOpts ) (manifest.List , error ) {
83
+ raw , err := EvalJsonnet (path , opts )
65
84
if err != nil {
66
85
return nil , err
67
86
}
68
87
69
- env , err := spec .Parse (envData , namespace )
88
+ var data interface {}
89
+ if err := json .Unmarshal ([]byte (raw ), & data ); err != nil {
90
+ return nil , err
91
+ }
92
+
93
+ envs , err := extractEnvs (data )
70
94
if err != nil {
71
95
return nil , err
72
96
}
73
97
74
- return env , nil
98
+ return envs , nil
75
99
}
76
100
77
- func (i * InlineLoader ) Peek (path string , opts JsonnetOpts ) (* v1alpha1.Environment , error ) {
78
- opts .EvalScript = EnvsOnlyEvalScript
79
- return i .Load (path , opts )
101
+ func inlineParse (path string , data []byte ) (* v1alpha1.Environment , error ) {
102
+ root , err := jpath .FindRoot (path )
103
+ if err != nil {
104
+ return nil , err
105
+ }
106
+
107
+ file , err := jpath .Entrypoint (path )
108
+ if err != nil {
109
+ return nil , err
110
+ }
111
+
112
+ namespace , err := filepath .Rel (root , file )
113
+ if err != nil {
114
+ return nil , err
115
+ }
116
+
117
+ env , err := spec .Parse (data , namespace )
118
+ if err != nil {
119
+ return nil , err
120
+ }
121
+
122
+ return env , nil
80
123
}
81
124
82
125
// extractEnvs filters out any Environment manifests
0 commit comments