@@ -33,10 +33,10 @@ type Renderer interface {
3333
3434var ErrTemplateVersionNotReady = xerrors .New ("template version job not finished" )
3535
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
3737// version's parameters. The output is a Renderer, which is the object that uses
3838// the cached objects to render the template version's parameters.
39- type loader struct {
39+ type Loader struct {
4040templateVersionID uuid.UUID
4141
4242// cache of objects
@@ -45,44 +45,39 @@ type loader struct {
4545terraformValues * database.TemplateVersionTerraformValue
4646}
4747
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 {
5354templateVersionID :versionID ,
5455}
56+ }
5557
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
5861}
5962
60- return l . Renderer ( ctx , db , cache )
63+ return r
6164}
6265
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
7068
71- func WithProvisionerJob (job database.ProvisionerJob )func (r * loader ) {
72- return func (r * loader ) {
73- r .job = & job
74- }
69+ return r
7570}
7671
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
8275}
76+
77+ return r
8378}
8479
85- func (r * loader )loadData (ctx context.Context ,db database.Store )error {
80+ func (r * Loader )loadData (ctx context.Context ,db database.Store )error {
8681if r .templateVersion == nil {
8782tv ,err := db .GetTemplateVersionByID (ctx ,r .templateVersionID )
8883if err != nil {
@@ -121,7 +116,7 @@ func (r *loader) loadData(ctx context.Context, db database.Store) error {
121116// Static parameter rendering is required to support older template versions that
122117// do not have the database state to support dynamic parameters. A constant
123118// 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 ) {
125120err := r .loadData (ctx ,db )
126121if err != nil {
127122return nil ,xerrors .Errorf ("load data: %w" ,err )
@@ -136,7 +131,7 @@ func (r *loader) Renderer(ctx context.Context, db database.Store, cache *files.C
136131
137132// Renderer caches all the necessary files when rendering a template version's
138133// 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 ) {
140135// If they can read the template version, then they can read the file for
141136// parameter loading purposes.
142137//nolint:gocritic
@@ -176,7 +171,7 @@ func (r *loader) dynamicRenderer(ctx context.Context, db database.Store, cache *
176171
177172type dynamicRenderer struct {
178173db database.Store
179- data * loader
174+ data * Loader
180175templateFS fs.FS
181176
182177ownerErrors map [uuid.UUID ]error