@@ -33,10 +33,10 @@ type Renderer interface {
33
33
34
34
var ErrTemplateVersionNotReady = xerrors .New ("template version job not finished" )
35
35
36
- //Loader is used to load the necessary coder objects for rendering a template
36
+ //loader is used to load the necessary coder objects for rendering a template
37
37
// version's parameters. The output is a Renderer, which is the object that uses
38
38
// the cached objects to render the template version's parameters.
39
- type Loader struct {
39
+ type loader struct {
40
40
templateVersionID uuid.UUID
41
41
42
42
// cache of objects
@@ -45,39 +45,44 @@ type Loader struct {
45
45
terraformValues * database.TemplateVersionTerraformValue
46
46
}
47
47
48
- // Prepare is the entrypoint for this package. It is broken into 2 steps to allow
49
- // prepopulating some of the existing data and saving some database queries.
50
- //
51
- // Usage: dynamicparameters.Prepare(...).Renderer(...)
52
- func Prepare (versionID uuid.UUID )* Loader {
53
- return & Loader {
48
+ // Prepare is the entrypoint for this package. It loads the necessary objects &
49
+ // files from the database and returns a Renderer that can be used to render the
50
+ // template version's parameters.
51
+ func Prepare (ctx context.Context ,db database.Store ,cache * files.Cache ,versionID uuid.UUID ,options ... func (r * loader )) (Renderer ,error ) {
52
+ l := & loader {
54
53
templateVersionID :versionID ,
55
54
}
56
- }
57
55
58
- func (r * Loader )WithTemplateVersion (tv database.TemplateVersion )* Loader {
59
- if tv .ID == r .templateVersionID {
60
- r .templateVersion = & tv
56
+ for _ ,opt := range options {
57
+ opt (l )
61
58
}
62
59
63
- return r
60
+ return l . Renderer ( ctx , db , cache )
64
61
}
65
62
66
- func (r * Loader )WithProvisionerJob (job database.ProvisionerJob )* Loader {
67
- r .job = & job
68
-
69
- return r
63
+ func WithTemplateVersion (tv database.TemplateVersion )func (r * loader ) {
64
+ return func (r * loader ) {
65
+ if tv .ID == r .templateVersionID {
66
+ r .templateVersion = & tv
67
+ }
68
+ }
70
69
}
71
70
72
- func ( r * Loader ) WithTerraformValues ( values database.TemplateVersionTerraformValue ) * Loader {
73
- if values . TemplateVersionID == r . templateVersionID {
74
- r .terraformValues = & values
71
+ func WithProvisionerJob ( job database.ProvisionerJob ) func ( r * loader ) {
72
+ return func ( r * loader ) {
73
+ r .job = & job
75
74
}
75
+ }
76
76
77
- return r
77
+ func WithTerraformValues (values database.TemplateVersionTerraformValue )func (r * loader ) {
78
+ return func (r * loader ) {
79
+ if values .TemplateVersionID == r .templateVersionID {
80
+ r .terraformValues = & values
81
+ }
82
+ }
78
83
}
79
84
80
- func (r * Loader )loadData (ctx context.Context ,db database.Store )error {
85
+ func (r * loader )loadData (ctx context.Context ,db database.Store )error {
81
86
if r .templateVersion == nil {
82
87
tv ,err := db .GetTemplateVersionByID (ctx ,r .templateVersionID )
83
88
if err != nil {
@@ -116,7 +121,7 @@ func (r *Loader) loadData(ctx context.Context, db database.Store) error {
116
121
// Static parameter rendering is required to support older template versions that
117
122
// do not have the database state to support dynamic parameters. A constant
118
123
// warning will be displayed for these template versions.
119
- func (r * Loader )Renderer (ctx context.Context ,db database.Store ,cache * files.Cache ) (Renderer ,error ) {
124
+ func (r * loader )Renderer (ctx context.Context ,db database.Store ,cache * files.Cache ) (Renderer ,error ) {
120
125
err := r .loadData (ctx ,db )
121
126
if err != nil {
122
127
return nil ,xerrors .Errorf ("load data: %w" ,err )
@@ -131,7 +136,7 @@ func (r *Loader) Renderer(ctx context.Context, db database.Store, cache *files.C
131
136
132
137
// Renderer caches all the necessary files when rendering a template version's
133
138
// parameters. It must be closed after use to release the cached files.
134
- func (r * Loader )dynamicRenderer (ctx context.Context ,db database.Store ,cache * files.Cache ) (* dynamicRenderer ,error ) {
139
+ func (r * loader )dynamicRenderer (ctx context.Context ,db database.Store ,cache * files.Cache ) (* dynamicRenderer ,error ) {
135
140
// If they can read the template version, then they can read the file for
136
141
// parameter loading purposes.
137
142
//nolint:gocritic
@@ -171,7 +176,7 @@ func (r *Loader) dynamicRenderer(ctx context.Context, db database.Store, cache *
171
176
172
177
type dynamicRenderer struct {
173
178
db database.Store
174
- data * Loader
179
+ data * loader
175
180
templateFS fs.FS
176
181
177
182
ownerErrors map [uuid.UUID ]error