Skip to content

Commit 60d5002

Browse files
authored
refactor: change template archive extraction to be on provisioner (coder#9264)
* refactor provisionersdk protocol Signed-off-by: Spike Curtis <spike@coder.com> * refactor provisioners to use new protocol Signed-off-by: Spike Curtis <spike@coder.com> * refactor provisionerd to use new protocol Signed-off-by: Spike Curtis <spike@coder.com> * refactor tests & proto renames * Fixes from self-review Signed-off-by: Spike Curtis <spike@coder.com> * appease fmt & link Signed-off-by: Spike Curtis <spike@coder.com> * code review fixes & e2e fixes Signed-off-by: Spike Curtis <spike@coder.com> * More fmt Signed-off-by: Spike Curtis <spike@coder.com> * Code review fixes Signed-off-by: Spike Curtis <spike@coder.com> * new gen; use uuid for session workdir Signed-off-by: Spike Curtis <spike@coder.com> * Revert nix-based gen CI task until dogfood is on nix Signed-off-by: Spike Curtis <spike@coder.com> * revert deleting dogfood Docker stuff Signed-off-by: Spike Curtis <spike@coder.com> * Revert "revert deleting dogfood Docker stuff" This reverts commit 9762158. --------- Signed-off-by: Spike Curtis <spike@coder.com>
1 parent 4bed492 commit 60d5002

File tree

77 files changed

+3426
-3462
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+3426
-3462
lines changed

Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -456,10 +456,10 @@ DB_GEN_FILES := \
456456

457457
# all gen targets should be added here and to gen/mark-fresh
458458
gen: \
459-
coderd/database/dump.sql \
460-
$(DB_GEN_FILES) \
461459
provisionersdk/proto/provisioner.pb.go \
462460
provisionerd/proto/provisionerd.pb.go \
461+
coderd/database/dump.sql \
462+
$(DB_GEN_FILES) \
463463
site/src/api/typesGenerated.ts \
464464
coderd/rbac/object_gen.go \
465465
docs/admin/prometheus.md \
@@ -478,10 +478,10 @@ gen: \
478478
# used during releases so we don't run generation scripts.
479479
gen/mark-fresh:
480480
files="\
481-
coderd/database/dump.sql \
482-
$(DB_GEN_FILES) \
483481
provisionersdk/proto/provisioner.pb.go \
484482
provisionerd/proto/provisionerd.pb.go \
483+
coderd/database/dump.sql \
484+
$(DB_GEN_FILES) \
485485
site/src/api/typesGenerated.ts \
486486
coderd/rbac/object_gen.go \
487487
docs/admin/prometheus.md \

cli/agent_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ func TestWorkspaceAgent(t *testing.T) {
7575
user := coderdtest.CreateFirstUser(t, client)
7676
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
7777
Parse: echo.ParseComplete,
78-
ProvisionApply: []*proto.Provision_Response{{
79-
Type: &proto.Provision_Response_Complete{
80-
Complete: &proto.Provision_Complete{
78+
ProvisionApply: []*proto.Response{{
79+
Type: &proto.Response_Apply{
80+
Apply: &proto.ApplyComplete{
8181
Resources: []*proto.Resource{{
8282
Name: "somename",
8383
Type: "someinstance",
@@ -127,9 +127,9 @@ func TestWorkspaceAgent(t *testing.T) {
127127
user := coderdtest.CreateFirstUser(t, client)
128128
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
129129
Parse: echo.ParseComplete,
130-
ProvisionApply: []*proto.Provision_Response{{
131-
Type: &proto.Provision_Response_Complete{
132-
Complete: &proto.Provision_Complete{
130+
ProvisionApply: []*proto.Response{{
131+
Type: &proto.Response_Apply{
132+
Apply: &proto.ApplyComplete{
133133
Resources: []*proto.Resource{{
134134
Name: "somename",
135135
Type: "someinstance",
@@ -179,9 +179,9 @@ func TestWorkspaceAgent(t *testing.T) {
179179
user := coderdtest.CreateFirstUser(t, client)
180180
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
181181
Parse: echo.ParseComplete,
182-
ProvisionApply: []*proto.Provision_Response{{
183-
Type: &proto.Provision_Response_Complete{
184-
Complete: &proto.Provision_Complete{
182+
ProvisionApply: []*proto.Response{{
183+
Type: &proto.Response_Apply{
184+
Apply: &proto.ApplyComplete{
185185
Resources: []*proto.Resource{{
186186
Name: "somename",
187187
Type: "someinstance",

cli/configssh_test.go

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@ func TestConfigSSH(t *testing.T) {
8282
authToken := uuid.NewString()
8383
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
8484
Parse: echo.ParseComplete,
85-
ProvisionPlan: []*proto.Provision_Response{{
86-
Type: &proto.Provision_Response_Complete{
87-
Complete: &proto.Provision_Complete{
85+
ProvisionPlan: []*proto.Response{{
86+
Type: &proto.Response_Plan{
87+
Plan: &proto.PlanComplete{
8888
Resources: []*proto.Resource{{
8989
Name: "example",
9090
Type: "aws_instance",
@@ -720,22 +720,11 @@ func TestConfigSSH_Hostnames(t *testing.T) {
720720
resources = append(resources, resource)
721721
}
722722

723-
provisionResponse := []*proto.Provision_Response{{
724-
Type: &proto.Provision_Response_Complete{
725-
Complete: &proto.Provision_Complete{
726-
Resources: resources,
727-
},
728-
},
729-
}}
730-
731723
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
732724
user := coderdtest.CreateFirstUser(t, client)
733725
// authToken := uuid.NewString()
734-
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
735-
Parse: echo.ParseComplete,
736-
ProvisionPlan: provisionResponse,
737-
ProvisionApply: provisionResponse,
738-
})
726+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID,
727+
echo.WithResources(resources))
739728
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
740729
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
741730
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)

cli/create_test.go

Lines changed: 29 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,7 @@ func TestCreate(t *testing.T) {
2929
t.Parallel()
3030
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
3131
user := coderdtest.CreateFirstUser(t, client)
32-
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
33-
Parse: echo.ParseComplete,
34-
ProvisionApply: provisionCompleteWithAgent,
35-
ProvisionPlan: provisionCompleteWithAgent,
36-
})
32+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, completeWithAgent())
3733
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
3834
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
3935
args := []string{
@@ -84,11 +80,7 @@ func TestCreate(t *testing.T) {
8480
t.Parallel()
8581
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
8682
owner := coderdtest.CreateFirstUser(t, client)
87-
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, &echo.Responses{
88-
Parse: echo.ParseComplete,
89-
ProvisionApply: provisionCompleteWithAgent,
90-
ProvisionPlan: provisionCompleteWithAgent,
91-
})
83+
version := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, completeWithAgent())
9284
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
9385
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID)
9486
_, user := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
@@ -141,11 +133,7 @@ func TestCreate(t *testing.T) {
141133
t.Parallel()
142134
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
143135
user := coderdtest.CreateFirstUser(t, client)
144-
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
145-
Parse: echo.ParseComplete,
146-
ProvisionApply: provisionCompleteWithAgent,
147-
ProvisionPlan: provisionCompleteWithAgent,
148-
})
136+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, completeWithAgent())
149137
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
150138
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) {
151139
var defaultTTLMillis int64 = 2 * 60 * 60 * 1000 // 2 hours
@@ -240,6 +228,22 @@ func TestCreate(t *testing.T) {
240228
})
241229
}
242230

231+
func prepareEchoResponses(parameters []*proto.RichParameter) *echo.Responses {
232+
return &echo.Responses{
233+
Parse: echo.ParseComplete,
234+
ProvisionPlan: []*proto.Response{
235+
{
236+
Type: &proto.Response_Plan{
237+
Plan: &proto.PlanComplete{
238+
Parameters: parameters,
239+
},
240+
},
241+
},
242+
},
243+
ProvisionApply: echo.ApplyComplete,
244+
}
245+
}
246+
243247
func TestCreateWithRichParameters(t *testing.T) {
244248
t.Parallel()
245249

@@ -258,27 +262,12 @@ func TestCreateWithRichParameters(t *testing.T) {
258262
immutableParameterValue = "4"
259263
)
260264

261-
echoResponses := &echo.Responses{
262-
Parse: echo.ParseComplete,
263-
ProvisionPlan: []*proto.Provision_Response{
264-
{
265-
Type: &proto.Provision_Response_Complete{
266-
Complete: &proto.Provision_Complete{
267-
Parameters: []*proto.RichParameter{
268-
{Name: firstParameterName, Description: firstParameterDescription, Mutable: true},
269-
{Name: secondParameterName, DisplayName: secondParameterDisplayName, Description: secondParameterDescription, Mutable: true},
270-
{Name: immutableParameterName, Description: immutableParameterDescription, Mutable: false},
271-
},
272-
},
273-
},
274-
},
275-
},
276-
ProvisionApply: []*proto.Provision_Response{{
277-
Type: &proto.Provision_Response_Complete{
278-
Complete: &proto.Provision_Complete{},
279-
},
280-
}},
281-
}
265+
echoResponses := prepareEchoResponses([]*proto.RichParameter{
266+
{Name: firstParameterName, Description: firstParameterDescription, Mutable: true},
267+
{Name: secondParameterName, DisplayName: secondParameterDisplayName, Description: secondParameterDescription, Mutable: true},
268+
{Name: immutableParameterName, Description: immutableParameterDescription, Mutable: false},
269+
},
270+
)
282271

283272
t.Run("InputParameters", func(t *testing.T) {
284273
t.Parallel()
@@ -427,28 +416,6 @@ func TestCreateValidateRichParameters(t *testing.T) {
427416
{Name: boolParameterName, Type: "bool", Mutable: true},
428417
}
429418

430-
prepareEchoResponses := func(richParameters []*proto.RichParameter) *echo.Responses {
431-
return &echo.Responses{
432-
Parse: echo.ParseComplete,
433-
ProvisionPlan: []*proto.Provision_Response{
434-
{
435-
Type: &proto.Provision_Response_Complete{
436-
Complete: &proto.Provision_Complete{
437-
Parameters: richParameters,
438-
},
439-
},
440-
},
441-
},
442-
ProvisionApply: []*proto.Provision_Response{
443-
{
444-
Type: &proto.Provision_Response_Complete{
445-
Complete: &proto.Provision_Complete{},
446-
},
447-
},
448-
},
449-
}
450-
}
451-
452419
t.Run("ValidateString", func(t *testing.T) {
453420
t.Parallel()
454421

@@ -626,20 +593,16 @@ func TestCreateWithGitAuth(t *testing.T) {
626593
t.Parallel()
627594
echoResponses := &echo.Responses{
628595
Parse: echo.ParseComplete,
629-
ProvisionPlan: []*proto.Provision_Response{
596+
ProvisionPlan: []*proto.Response{
630597
{
631-
Type: &proto.Provision_Response_Complete{
632-
Complete: &proto.Provision_Complete{
598+
Type: &proto.Response_Plan{
599+
Plan: &proto.PlanComplete{
633600
GitAuthProviders: []string{"github"},
634601
},
635602
},
636603
},
637604
},
638-
ProvisionApply: []*proto.Provision_Response{{
639-
Type: &proto.Provision_Response_Complete{
640-
Complete: &proto.Provision_Complete{},
641-
},
642-
}},
605+
ProvisionApply: echo.ApplyComplete,
643606
}
644607

645608
client := coderdtest.New(t, &coderdtest.Options{

cli/gitssh_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func prepareTestGitSSH(ctx context.Context, t *testing.T) (*codersdk.Client, str
4848
agentToken := uuid.NewString()
4949
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
5050
Parse: echo.ParseComplete,
51-
ProvisionPlan: echo.ProvisionComplete,
51+
ProvisionPlan: echo.PlanComplete,
5252
ProvisionApply: echo.ProvisionApplyWithAgent(agentToken),
5353
})
5454
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)

cli/portforward_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ func runAgent(t *testing.T, client *codersdk.Client, userID uuid.UUID) codersdk.
302302
agentToken := uuid.NewString()
303303
version := coderdtest.CreateTemplateVersion(t, client, orgID, &echo.Responses{
304304
Parse: echo.ParseComplete,
305-
ProvisionPlan: echo.ProvisionComplete,
305+
ProvisionPlan: echo.PlanComplete,
306306
ProvisionApply: echo.ProvisionApplyWithAgent(agentToken),
307307
})
308308

cli/restart_test.go

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,14 @@ import (
2020
func TestRestart(t *testing.T) {
2121
t.Parallel()
2222

23-
echoResponses := &echo.Responses{
24-
Parse: echo.ParseComplete,
25-
ProvisionPlan: []*proto.Provision_Response{
26-
{
27-
Type: &proto.Provision_Response_Complete{
28-
Complete: &proto.Provision_Complete{
29-
Parameters: []*proto.RichParameter{
30-
{
31-
Name: ephemeralParameterName,
32-
Description: ephemeralParameterDescription,
33-
Mutable: true,
34-
Ephemeral: true,
35-
},
36-
},
37-
},
38-
},
39-
},
23+
echoResponses := prepareEchoResponses([]*proto.RichParameter{
24+
{
25+
Name: ephemeralParameterName,
26+
Description: ephemeralParameterDescription,
27+
Mutable: true,
28+
Ephemeral: true,
4029
},
41-
ProvisionApply: []*proto.Provision_Response{{
42-
Type: &proto.Provision_Response_Complete{
43-
Complete: &proto.Provision_Complete{},
44-
},
45-
}},
46-
}
30+
})
4731

4832
t.Run("OK", func(t *testing.T) {
4933
t.Parallel()
@@ -187,10 +171,10 @@ func TestRestartWithParameters(t *testing.T) {
187171

188172
echoResponses := &echo.Responses{
189173
Parse: echo.ParseComplete,
190-
ProvisionPlan: []*proto.Provision_Response{
174+
ProvisionPlan: []*proto.Response{
191175
{
192-
Type: &proto.Provision_Response_Complete{
193-
Complete: &proto.Provision_Complete{
176+
Type: &proto.Response_Plan{
177+
Plan: &proto.PlanComplete{
194178
Parameters: []*proto.RichParameter{
195179
{
196180
Name: immutableParameterName,
@@ -202,11 +186,7 @@ func TestRestartWithParameters(t *testing.T) {
202186
},
203187
},
204188
},
205-
ProvisionApply: []*proto.Provision_Response{{
206-
Type: &proto.Provision_Response_Complete{
207-
Complete: &proto.Provision_Complete{},
208-
},
209-
}},
189+
ProvisionApply: echo.ApplyComplete,
210190
}
211191

212192
t.Run("DoNotAskForImmutables", func(t *testing.T) {

cli/server.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ import (
4141
"github.com/prometheus/client_golang/prometheus"
4242
"github.com/prometheus/client_golang/prometheus/collectors"
4343
"github.com/prometheus/client_golang/prometheus/promhttp"
44-
"github.com/spf13/afero"
4544
"go.opentelemetry.io/otel/trace"
4645
"golang.org/x/mod/semver"
4746
"golang.org/x/oauth2"
@@ -1304,7 +1303,11 @@ func newProvisionerDaemon(
13041303
defer wg.Done()
13051304
defer cancel()
13061305

1307-
err := echo.Serve(ctx, afero.NewOsFs(), &provisionersdk.ServeOptions{Listener: echoServer})
1306+
err := echo.Serve(ctx, &provisionersdk.ServeOptions{
1307+
Listener: echoServer,
1308+
WorkDirectory: workDir,
1309+
Logger: logger.Named("echo"),
1310+
})
13081311
if err != nil {
13091312
select {
13101313
case errCh <- err:
@@ -1336,10 +1339,11 @@ func newProvisionerDaemon(
13361339

13371340
err := terraform.Serve(ctx, &terraform.ServeOptions{
13381341
ServeOptions: &provisionersdk.ServeOptions{
1339-
Listener: terraformServer,
1342+
Listener: terraformServer,
1343+
Logger: logger.Named("terraform"),
1344+
WorkDirectory: workDir,
13401345
},
13411346
CachePath: tfDir,
1342-
Logger: logger.Named("terraform"),
13431347
Tracer: tracer,
13441348
})
13451349
if err != nil && !xerrors.Is(err, context.Canceled) {
@@ -1366,7 +1370,6 @@ func newProvisionerDaemon(
13661370
UpdateInterval: time.Second,
13671371
ForceCancelInterval: cfg.Provisioner.ForceCancelInterval.Value(),
13681372
Provisioners: provisioners,
1369-
WorkDirectory: workDir,
13701373
TracerProvider: coderAPI.TracerProvider,
13711374
Metrics: &metrics,
13721375
}), nil

cli/show_test.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77

88
"github.com/coder/coder/v2/cli/clitest"
99
"github.com/coder/coder/v2/coderd/coderdtest"
10-
"github.com/coder/coder/v2/provisioner/echo"
1110
"github.com/coder/coder/v2/pty/ptytest"
1211
)
1312

@@ -17,11 +16,7 @@ func TestShow(t *testing.T) {
1716
t.Parallel()
1817
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
1918
user := coderdtest.CreateFirstUser(t, client)
20-
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, &echo.Responses{
21-
Parse: echo.ParseComplete,
22-
ProvisionApply: provisionCompleteWithAgent,
23-
ProvisionPlan: provisionCompleteWithAgent,
24-
})
19+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, completeWithAgent())
2520
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
2621
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
2722
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)

0 commit comments

Comments
 (0)