Renderer caches all the necessary files when rendering a template version's parameters. It must be closed after use to release the cached files.
(ctx context.Context, db database.Store, cache *files.CacheCloser)
| 168 | // Renderer caches all the necessary files when rendering a template version's |
| 169 | // parameters. It must be closed after use to release the cached files. |
| 170 | func (r *loader) dynamicRenderer(ctx context.Context, db database.Store, cache *files.CacheCloser) (*dynamicRenderer, error) { |
| 171 | closeFiles := true // If the function returns with no error, this will toggle to false. |
| 172 | defer func() { |
| 173 | if closeFiles { |
| 174 | cache.Close() |
| 175 | } |
| 176 | }() |
| 177 | |
| 178 | tfVarValues, err := VariableValues(*r.templateVariableValues) |
| 179 | if err != nil { |
| 180 | return nil, xerrors.Errorf("parse variable values: %w", err) |
| 181 | } |
| 182 | |
| 183 | // If they can read the template version, then they can read the file for |
| 184 | // parameter loading purposes. |
| 185 | //nolint:gocritic |
| 186 | fileCtx := dbauthz.AsFileReader(ctx) |
| 187 | |
| 188 | var templateFS fs.FS |
| 189 | |
| 190 | templateFS, err = cache.Acquire(fileCtx, db, r.job.FileID) |
| 191 | if err != nil { |
| 192 | return nil, xerrors.Errorf("acquire template file: %w", err) |
| 193 | } |
| 194 | |
| 195 | var moduleFilesFS *files.CloseFS |
| 196 | if r.terraformValues.CachedModuleFiles.Valid { |
| 197 | moduleFilesFS, err = cache.Acquire(fileCtx, db, r.terraformValues.CachedModuleFiles.UUID) |
| 198 | if err != nil { |
| 199 | return nil, xerrors.Errorf("acquire module files: %w", err) |
| 200 | } |
| 201 | templateFS = files.NewOverlayFS(templateFS, []files.Overlay{{Path: ".terraform/modules", FS: moduleFilesFS}}) |
| 202 | } |
| 203 | |
| 204 | closeFiles = false // Caller will have to call close |
| 205 | return &dynamicRenderer{ |
| 206 | data: r, |
| 207 | templateFS: templateFS, |
| 208 | db: db, |
| 209 | ownerErrors: make(map[uuid.UUID]error), |
| 210 | close: cache.Close, |
| 211 | tfvarValues: tfVarValues, |
| 212 | }, nil |
| 213 | } |
| 214 | |
| 215 | type dynamicRenderer struct { |
| 216 | db database.Store |
no test coverage detected