@@ -19,8 +19,12 @@ func prependLineNumbers(text string) string {
19
19
return buf .String ()
20
20
}
21
21
22
- func (r * desiredStateLoader ) renderEnvironment (firstPassEnv * environment.Environment , baseDir , filename string , content []byte ) * environment.Environment {
23
- tmplData := state.EnvironmentTemplateData {Environment : * firstPassEnv , Namespace : r .namespace }
22
+ func (r * desiredStateLoader ) renderPrestate (firstPassEnv * environment.Environment , baseDir , filename string , content []byte ) (* environment.Environment , * state.HelmState ) {
23
+ tmplData := state.EnvironmentTemplateData {
24
+ Environment : * firstPassEnv ,
25
+ Namespace : r .namespace ,
26
+ Values : map [string ]interface {}{},
27
+ }
24
28
firstPassRenderer := tmpl .NewFirstPassRenderer (baseDir , tmplData )
25
29
26
30
// parse as much as we can, tolerate errors, this is a preparse
@@ -29,7 +33,7 @@ func (r *desiredStateLoader) renderEnvironment(firstPassEnv *environment.Environ
29
33
r .logger .Debugf ("first-pass rendering input of \" %s\" :\n %s" , filename , prependLineNumbers (string (content )))
30
34
if yamlBuf == nil { // we have a template syntax error, let the second parse report
31
35
r .logger .Debugf ("template syntax error: %v" , err )
32
- return firstPassEnv
36
+ return firstPassEnv , nil
33
37
}
34
38
}
35
39
yamlData := yamlBuf .String ()
@@ -57,7 +61,8 @@ func (r *desiredStateLoader) renderEnvironment(firstPassEnv *environment.Environ
57
61
if prestate != nil {
58
62
firstPassEnv = & prestate .Env
59
63
}
60
- return firstPassEnv
64
+
65
+ return firstPassEnv , prestate
61
66
}
62
67
63
68
type RenderOpts struct {
@@ -88,13 +93,18 @@ func (r *desiredStateLoader) twoPassRenderTemplateToYaml(inherited, overrode *en
88
93
r .logger .Debugf ("first-pass uses: %v" , initEnv )
89
94
}
90
95
91
- renderedEnv := r .renderEnvironment (initEnv , baseDir , filename , content )
96
+ renderedEnv , prestate := r .renderPrestate (initEnv , baseDir , filename , content )
92
97
93
98
if r .logger != nil {
94
99
r .logger .Debugf ("first-pass produced: %v" , renderedEnv )
95
100
}
96
101
97
- finalEnv , err := renderedEnv .Merge (overrode )
102
+ finalEnv , err := inherited .Merge (renderedEnv )
103
+ if err != nil {
104
+ return nil , err
105
+ }
106
+
107
+ finalEnv , err = finalEnv .Merge (overrode )
98
108
if err != nil {
99
109
return nil , err
100
110
}
@@ -103,7 +113,23 @@ func (r *desiredStateLoader) twoPassRenderTemplateToYaml(inherited, overrode *en
103
113
r .logger .Debugf ("first-pass rendering result of \" %s\" : %v" , filename , * finalEnv )
104
114
}
105
115
106
- tmplData := state.EnvironmentTemplateData {Environment : * finalEnv , Namespace : r .namespace }
116
+ vals := map [string ]interface {}{}
117
+ if prestate != nil {
118
+ prestate .Env = * finalEnv
119
+ vals , err = prestate .Values ()
120
+ if err != nil {
121
+ return nil , err
122
+ }
123
+ }
124
+ if prestate != nil {
125
+ r .logger .Debugf ("vals:\n %v\n defaultVals:%v" , vals , prestate .DefaultValues )
126
+ }
127
+
128
+ tmplData := state.EnvironmentTemplateData {
129
+ Environment : * finalEnv ,
130
+ Namespace : r .namespace ,
131
+ Values : vals ,
132
+ }
107
133
secondPassRenderer := tmpl .NewFileRenderer (r .readFile , baseDir , tmplData )
108
134
yamlBuf , err := secondPassRenderer .RenderTemplateContentToBuffer (content )
109
135
if err != nil {
0 commit comments