@@ -28,15 +28,21 @@ func MakeFileFunc(baseDir string, encBase64 bool) function.Function {
2828 return function .New (& function.Spec {
2929 Params : []function.Parameter {
3030 {
31- Name : "path" ,
32- Type : cty .String ,
33- AllowMarked : true ,
31+ Name : "path" ,
32+ Type : cty .String ,
33+ AllowMarked : true ,
34+ AllowUnknown : true ,
3435 },
3536 },
3637 Type : function .StaticReturnType (cty .String ),
3738 RefineResult : refineNotNull ,
3839 Impl : func (args []cty.Value , retType cty.Type ) (cty.Value , error ) {
3940 pathArg , pathMarks := args [0 ].Unmark ()
41+
42+ if ! pathArg .IsKnown () {
43+ return cty .UnknownVal (cty .String ).WithMarks (pathMarks ), nil
44+ }
45+
4046 path := pathArg .AsString ()
4147 src , err := readFileBytes (baseDir , path , pathMarks )
4248 if err != nil {
@@ -94,13 +100,16 @@ func MakeTemplateFileFunc(baseDir string, funcsCb func() (funcs map[string]funct
94100 return function .New (& function.Spec {
95101 Params : []function.Parameter {
96102 {
97- Name : "path" ,
98- Type : cty .String ,
99- AllowMarked : true ,
103+ Name : "path" ,
104+ Type : cty .String ,
105+ AllowMarked : true ,
106+ AllowUnknown : true ,
100107 },
101108 {
102- Name : "vars" ,
103- Type : cty .DynamicPseudoType ,
109+ Name : "vars" ,
110+ Type : cty .DynamicPseudoType ,
111+ AllowMarked : true ,
112+ AllowUnknown : true ,
104113 },
105114 },
106115 Type : func (args []cty.Value ) (cty.Type , error ) {
@@ -125,12 +134,19 @@ func MakeTemplateFileFunc(baseDir string, funcsCb func() (funcs map[string]funct
125134 },
126135 Impl : func (args []cty.Value , retType cty.Type ) (cty.Value , error ) {
127136 pathArg , pathMarks := args [0 ].Unmark ()
137+
138+ vars , varsMarks := args [1 ].UnmarkDeep ()
139+
140+ if ! pathArg .IsKnown () {
141+ return cty .UnknownVal (retType ).WithMarks (pathMarks , varsMarks ), nil
142+ }
143+
128144 expr , tmplMarks , err := loadTmpl (pathArg .AsString (), pathMarks )
129145 if err != nil {
130146 return cty .DynamicVal , err
131147 }
132- result , err := renderTmpl (expr , args [ 1 ] )
133- return result .WithMarks (tmplMarks ), err
148+ result , err := renderTmpl (expr , vars )
149+ return result .WithMarks (tmplMarks , varsMarks ), err
134150 },
135151 })
136152
@@ -142,15 +158,21 @@ func MakeFileExistsFunc(baseDir string) function.Function {
142158 return function .New (& function.Spec {
143159 Params : []function.Parameter {
144160 {
145- Name : "path" ,
146- Type : cty .String ,
147- AllowMarked : true ,
161+ Name : "path" ,
162+ Type : cty .String ,
163+ AllowMarked : true ,
164+ AllowUnknown : true ,
148165 },
149166 },
150167 Type : function .StaticReturnType (cty .Bool ),
151168 RefineResult : refineNotNull ,
152169 Impl : func (args []cty.Value , retType cty.Type ) (cty.Value , error ) {
153170 pathArg , pathMarks := args [0 ].Unmark ()
171+
172+ if ! pathArg .IsKnown () {
173+ return cty .UnknownVal (cty .Bool ).WithMarks (pathMarks ), nil
174+ }
175+
154176 path := pathArg .AsString ()
155177 path , err := homedir .Expand (path )
156178 if err != nil {
@@ -210,24 +232,30 @@ func MakeFileSetFunc(baseDir string) function.Function {
210232 return function .New (& function.Spec {
211233 Params : []function.Parameter {
212234 {
213- Name : "path" ,
214- Type : cty .String ,
215- AllowMarked : true ,
235+ Name : "path" ,
236+ Type : cty .String ,
237+ AllowMarked : true ,
238+ AllowUnknown : true ,
216239 },
217240 {
218- Name : "pattern" ,
219- Type : cty .String ,
220- AllowMarked : true ,
241+ Name : "pattern" ,
242+ Type : cty .String ,
243+ AllowMarked : true ,
244+ AllowUnknown : true ,
221245 },
222246 },
223247 Type : function .StaticReturnType (cty .Set (cty .String )),
224248 RefineResult : refineNotNull ,
225249 Impl : func (args []cty.Value , retType cty.Type ) (cty.Value , error ) {
226250 pathArg , pathMarks := args [0 ].Unmark ()
227- path := pathArg .AsString ()
228251 patternArg , patternMarks := args [1 ].Unmark ()
229- pattern := patternArg .AsString ()
230252
253+ if ! pathArg .IsKnown () || ! patternArg .IsKnown () {
254+ return cty .UnknownVal (retType ).WithMarks (pathMarks , patternMarks ), nil
255+ }
256+
257+ path := pathArg .AsString ()
258+ pattern := patternArg .AsString ()
231259 marks := []cty.ValueMarks {pathMarks , patternMarks }
232260
233261 if ! filepath .IsAbs (path ) {
0 commit comments