@@ -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,44 +45,39 @@ type loader struct {
45
45
terraformValues * database.TemplateVersionTerraformValue
46
46
}
47
47
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 {
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 {
53
54
templateVersionID :versionID ,
54
55
}
56
+ }
55
57
56
- for _ ,opt := range options {
57
- opt (l )
58
+ func (r * Loader )WithTemplateVersion (tv database.TemplateVersion )* Loader {
59
+ if tv .ID == r .templateVersionID {
60
+ r .templateVersion = & tv
58
61
}
59
62
60
- return l . Renderer ( ctx , db , cache )
63
+ return r
61
64
}
62
65
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
- }
69
- }
66
+ func (r * Loader )WithProvisionerJob (job database.ProvisionerJob )* Loader {
67
+ r .job = & job
70
68
71
- func WithProvisionerJob (job database.ProvisionerJob )func (r * loader ) {
72
- return func (r * loader ) {
73
- r .job = & job
74
- }
69
+ return r
75
70
}
76
71
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
- }
72
+ func (r * Loader )WithTerraformValues (values database.TemplateVersionTerraformValue )* Loader {
73
+ if values .TemplateVersionID == r .templateVersionID {
74
+ r .terraformValues = & values
82
75
}
76
+
77
+ return r
83
78
}
84
79
85
- func (r * loader )loadData (ctx context.Context ,db database.Store )error {
80
+ func (r * Loader )loadData (ctx context.Context ,db database.Store )error {
86
81
if r .templateVersion == nil {
87
82
tv ,err := db .GetTemplateVersionByID (ctx ,r .templateVersionID )
88
83
if err != nil {
@@ -121,7 +116,7 @@ func (r *loader) loadData(ctx context.Context, db database.Store) error {
121
116
// Static parameter rendering is required to support older template versions that
122
117
// do not have the database state to support dynamic parameters. A constant
123
118
// warning will be displayed for these template versions.
124
- func (r * loader )Renderer (ctx context.Context ,db database.Store ,cache * files.Cache ) (Renderer ,error ) {
119
+ func (r * Loader )Renderer (ctx context.Context ,db database.Store ,cache * files.Cache ) (Renderer ,error ) {
125
120
err := r .loadData (ctx ,db )
126
121
if err != nil {
127
122
return nil ,xerrors .Errorf ("load data: %w" ,err )
@@ -136,7 +131,7 @@ func (r *loader) Renderer(ctx context.Context, db database.Store, cache *files.C
136
131
137
132
// Renderer caches all the necessary files when rendering a template version's
138
133
// parameters. It must be closed after use to release the cached files.
139
- func (r * loader )dynamicRenderer (ctx context.Context ,db database.Store ,cache * files.Cache ) (* dynamicRenderer ,error ) {
134
+ func (r * Loader )dynamicRenderer (ctx context.Context ,db database.Store ,cache * files.Cache ) (* dynamicRenderer ,error ) {
140
135
// If they can read the template version, then they can read the file for
141
136
// parameter loading purposes.
142
137
//nolint:gocritic
@@ -176,7 +171,7 @@ func (r *loader) dynamicRenderer(ctx context.Context, db database.Store, cache *
176
171
177
172
type dynamicRenderer struct {
178
173
db database.Store
179
- data * loader
174
+ data * Loader
180
175
templateFS fs.FS
181
176
182
177
ownerErrors map [uuid.UUID ]error