mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: add dynamic parameters websocket endpoint (#17165)
This commit is contained in:
@@ -211,6 +211,8 @@ type Responses struct {
|
||||
// transition responses. They are prioritized over the generic responses.
|
||||
ProvisionApplyMap map[proto.WorkspaceTransition][]*proto.Response
|
||||
ProvisionPlanMap map[proto.WorkspaceTransition][]*proto.Response
|
||||
|
||||
ExtraFiles map[string][]byte
|
||||
}
|
||||
|
||||
// Tar returns a tar archive of responses to provisioner operations.
|
||||
@@ -226,8 +228,12 @@ func TarWithOptions(ctx context.Context, logger slog.Logger, responses *Response
|
||||
|
||||
if responses == nil {
|
||||
responses = &Responses{
|
||||
ParseComplete, ApplyComplete, PlanComplete,
|
||||
nil, nil,
|
||||
Parse: ParseComplete,
|
||||
ProvisionApply: ApplyComplete,
|
||||
ProvisionPlan: PlanComplete,
|
||||
ProvisionApplyMap: nil,
|
||||
ProvisionPlanMap: nil,
|
||||
ExtraFiles: nil,
|
||||
}
|
||||
}
|
||||
if responses.ProvisionPlan == nil {
|
||||
@@ -327,6 +333,25 @@ func TarWithOptions(ctx context.Context, logger slog.Logger, responses *Response
|
||||
}
|
||||
}
|
||||
}
|
||||
for name, content := range responses.ExtraFiles {
|
||||
logger.Debug(ctx, "extra file", slog.F("name", name))
|
||||
|
||||
err := writer.WriteHeader(&tar.Header{
|
||||
Name: name,
|
||||
Size: int64(len(content)),
|
||||
Mode: 0o644,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
n, err := writer.Write(content)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
logger.Debug(context.Background(), "extra file written", slog.F("name", name), slog.F("bytes_written", n))
|
||||
}
|
||||
// `writer.Close()` function flushes the writer buffer, and adds extra padding to create a legal tarball.
|
||||
err := writer.Close()
|
||||
if err != nil {
|
||||
@@ -347,3 +372,12 @@ func WithResources(resources []*proto.Resource) *Responses {
|
||||
}}}},
|
||||
}
|
||||
}
|
||||
|
||||
func WithExtraFiles(extraFiles map[string][]byte) *Responses {
|
||||
return &Responses{
|
||||
Parse: ParseComplete,
|
||||
ProvisionApply: ApplyComplete,
|
||||
ProvisionPlan: PlanComplete,
|
||||
ExtraFiles: extraFiles,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user