@@ -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,39 +45,44 @@ type Loader struct {
4545terraformValues * database.TemplateVersionTerraformValue
4646}
4747
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 {
5453templateVersionID :versionID ,
5554}
56- }
5755
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 )
6158}
6259
63- return r
60+ return l . Renderer ( ctx , db , cache )
6461}
6562
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+ }
7069}
7170
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
7574}
75+ }
7676
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+ }
7883}
7984
80- func (r * Loader )loadData (ctx context.Context ,db database.Store )error {
85+ func (r * loader )loadData (ctx context.Context ,db database.Store )error {
8186if r .templateVersion == nil {
8287tv ,err := db .GetTemplateVersionByID (ctx ,r .templateVersionID )
8388if err != nil {
@@ -116,7 +121,7 @@ func (r *Loader) loadData(ctx context.Context, db database.Store) error {
116121// Static parameter rendering is required to support older template versions that
117122// do not have the database state to support dynamic parameters. A constant
118123// 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 ) {
120125err := r .loadData (ctx ,db )
121126if err != nil {
122127return nil ,xerrors .Errorf ("load data: %w" ,err )
@@ -131,7 +136,7 @@ func (r *Loader) Renderer(ctx context.Context, db database.Store, cache *files.C
131136
132137// Renderer caches all the necessary files when rendering a template version's
133138// 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 ) {
135140// If they can read the template version, then they can read the file for
136141// parameter loading purposes.
137142//nolint:gocritic
@@ -171,7 +176,7 @@ func (r *Loader) dynamicRenderer(ctx context.Context, db database.Store, cache *
171176
172177type dynamicRenderer struct {
173178db database.Store
174- data * Loader
179+ data * loader
175180templateFS fs.FS
176181
177182ownerErrors map [uuid.UUID ]error