Skip to content

Commit 0f342ec

Browse files
authored
feat: add provisioner tags to dynamic-parameters scaletest (coder#20435)
Since `coder exp scaletest dynamic-parameters` ends up creating template versions, provisioner tags may be required to create the template versions. On our own scaletest clusters, we tag every provisioner, so an untagged template version won't build and won't get imported.
1 parent e62c5db commit 0f342ec

File tree

3 files changed

+46
-27
lines changed

3 files changed

+46
-27
lines changed

cli/exp_scaletest_dynamicparameters.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const (
2727
func (r *RootCmd) scaletestDynamicParameters() *serpent.Command {
2828
var (
2929
templateName string
30+
provisionerTags []string
3031
numEvals int64
3132
tracingFlags = &scaletestTracingFlags{}
3233
prometheusFlags = &scaletestPrometheusFlags{}
@@ -56,6 +57,11 @@ func (r *RootCmd) scaletestDynamicParameters() *serpent.Command {
5657
return xerrors.Errorf("template cannot be empty")
5758
}
5859

60+
tags, err := ParseProvisionerTags(provisionerTags)
61+
if err != nil {
62+
return err
63+
}
64+
5965
org, err := orgContext.Selected(inv, client)
6066
if err != nil {
6167
return err
@@ -99,7 +105,7 @@ func (r *RootCmd) scaletestDynamicParameters() *serpent.Command {
99105
}()
100106
tracer := tracerProvider.Tracer(scaletestTracerName)
101107

102-
partitions, err := dynamicparameters.SetupPartitions(ctx, client, org.ID, templateName, numEvals, logger)
108+
partitions, err := dynamicparameters.SetupPartitions(ctx, client, org.ID, templateName, tags, numEvals, logger)
103109
if err != nil {
104110
return xerrors.Errorf("setup dynamic parameters partitions: %w", err)
105111
}
@@ -160,6 +166,11 @@ func (r *RootCmd) scaletestDynamicParameters() *serpent.Command {
160166
Default: "100",
161167
Value: serpent.Int64Of(&numEvals),
162168
},
169+
{
170+
Flag: "provisioner-tag",
171+
Description: "Specify a set of tags to target provisioner daemons.",
172+
Value: serpent.StringArrayOf(&provisionerTags),
173+
},
163174
}
164175
orgContext.AttachOptions(cmd)
165176
output.attach(&cmd.Options)

scaletest/dynamicparameters/template.go

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -168,30 +168,33 @@ type SDKForDynamicParametersSetup interface {
168168
// partitioner is an internal struct to hold context and arguments for partition setup
169169
// and to provide methods for all sub-steps.
170170
type partitioner struct {
171-
ctx context.Context
172-
client SDKForDynamicParametersSetup
173-
orgID uuid.UUID
174-
templateName string
175-
numEvals int64
176-
logger slog.Logger
171+
ctx context.Context
172+
client SDKForDynamicParametersSetup
173+
orgID uuid.UUID
174+
templateName string
175+
provisionerTags map[string]string
176+
numEvals int64
177+
logger slog.Logger
177178

178179
// for testing
179180
clock quartz.Clock
180181
}
181182

182183
func SetupPartitions(
183184
ctx context.Context, client SDKForDynamicParametersSetup,
184-
orgID uuid.UUID, templateName string, numEvals int64,
185+
orgID uuid.UUID, templateName string, provisionerTags map[string]string,
186+
numEvals int64,
185187
logger slog.Logger,
186188
) ([]Partition, error) {
187189
p := &partitioner{
188-
ctx: ctx,
189-
client: client,
190-
orgID: orgID,
191-
templateName: templateName,
192-
numEvals: numEvals,
193-
logger: logger,
194-
clock: quartz.NewReal(),
190+
ctx: ctx,
191+
client: client,
192+
orgID: orgID,
193+
templateName: templateName,
194+
provisionerTags: provisionerTags,
195+
numEvals: numEvals,
196+
logger: logger,
197+
clock: quartz.NewReal(),
195198
}
196199
return p.run()
197200
}
@@ -272,11 +275,12 @@ func (p *partitioner) createTemplateVersion(templateID uuid.UUID) (codersdk.Temp
272275

273276
// Create template version
274277
versionReq := codersdk.CreateTemplateVersionRequest{
275-
TemplateID: templateID,
276-
FileID: uploadResp.ID,
277-
Message: "Initial version for scaletest dynamic parameters",
278-
StorageMethod: codersdk.ProvisionerStorageMethodFile,
279-
Provisioner: codersdk.ProvisionerTypeTerraform,
278+
TemplateID: templateID,
279+
FileID: uploadResp.ID,
280+
Message: "Initial version for scaletest dynamic parameters",
281+
StorageMethod: codersdk.ProvisionerStorageMethodFile,
282+
Provisioner: codersdk.ProvisionerTypeTerraform,
283+
ProvisionerTags: p.provisionerTags,
280284
}
281285
version, err := p.client.CreateTemplateVersion(p.ctx, p.orgID, versionReq)
282286
if err != nil {

scaletest/dynamicparameters/template_internal_test.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,20 +70,22 @@ func TestSetupPartitions_TemplateExists(t *testing.T) {
7070
t: t,
7171
expectedTemplateName: "test-template",
7272
expectedOrgID: orgID,
73+
expectedTags: map[string]string{"foo": "bar"},
7374
matchedProvisioners: 1,
7475
templateVersionJobStatus: codersdk.ProvisionerJobSucceeded,
7576
}
7677
mClock := quartz.NewMock(t)
7778
trap := mClock.Trap().TickerFunc("waitForTemplateVersionJobs")
7879
defer trap.Close()
7980
uut := partitioner{
80-
ctx: ctx,
81-
client: fClient,
82-
orgID: orgID,
83-
templateName: "test-template",
84-
numEvals: 600,
85-
logger: logger,
86-
clock: mClock,
81+
ctx: ctx,
82+
client: fClient,
83+
orgID: orgID,
84+
templateName: "test-template",
85+
provisionerTags: map[string]string{"foo": "bar"},
86+
numEvals: 600,
87+
logger: logger,
88+
clock: mClock,
8789
}
8890
var partitions []Partition
8991
errCh := make(chan error, 1)
@@ -234,6 +236,7 @@ type fakeClient struct {
234236
expectedOrgID uuid.UUID
235237
templateByNameError error
236238

239+
expectedTags map[string]string
237240
matchedProvisioners int
238241
templateVersionJobStatus codersdk.ProvisionerJobStatus
239242

@@ -270,6 +273,7 @@ func (f *fakeClient) CreateTemplate(ctx context.Context, orgID uuid.UUID, create
270273

271274
func (f *fakeClient) CreateTemplateVersion(ctx context.Context, orgID uuid.UUID, createReq codersdk.CreateTemplateVersionRequest) (codersdk.TemplateVersion, error) {
272275
f.templateVersionsCount++
276+
require.Equal(f.t, f.expectedTags, createReq.ProvisionerTags)
273277
return codersdk.TemplateVersion{
274278
ID: uuid.New(),
275279
Name: f.expectedTemplateName,

0 commit comments

Comments
 (0)