Skip to content

Commit 3979b41

Browse files
committed
CopyParameters -first version
1 parent e23873f commit 3979b41

File tree

2 files changed

+39
-4
lines changed

2 files changed

+39
-4
lines changed

cli/create.go

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ func (r *RootCmd) create() *clibase.Cmd {
2828

2929
parameterFlags workspaceParameterFlags
3030
autoUpdates string
31+
copyParameters string
3132
)
3233
client := new(codersdk.Client)
3334
cmd := &clibase.Cmd{
@@ -76,6 +77,22 @@ func (r *RootCmd) create() *clibase.Cmd {
7677
return xerrors.Errorf("A workspace already exists named %q!", workspaceName)
7778
}
7879

80+
var sourceWorkspace codersdk.Workspace
81+
if copyParameters != "" {
82+
sourceWorkspaceOwner, sourceWorkspaceName, err := splitNamedWorkspace(copyParameters)
83+
if err != nil {
84+
return err
85+
}
86+
87+
sourceWorkspace, err = client.WorkspaceByOwnerAndName(inv.Context(), sourceWorkspaceOwner, sourceWorkspaceName, codersdk.WorkspaceOptions{})
88+
if err != nil {
89+
return err
90+
}
91+
92+
_, _ = fmt.Fprintf(inv.Stdout, "Coder will use the same template %q as the source workspace.\n", sourceWorkspace.TemplateName)
93+
templateName = sourceWorkspace.TemplateName
94+
}
95+
7996
var template codersdk.Template
8097
if templateName == "" {
8198
_, _ = fmt.Fprintln(inv.Stdout, pretty.Sprint(cliui.DefaultStyles.Wrap, "Select a template below to preview the provisioned infrastructure:"))
@@ -134,9 +151,17 @@ func (r *RootCmd) create() *clibase.Cmd {
134151
schedSpec = ptr.Ref(sched.String())
135152
}
136153

137-
cliRichParameters, err := asWorkspaceBuildParameters(parameterFlags.richParameters)
138-
if err != nil {
139-
return xerrors.Errorf("can't parse given parameter values: %w", err)
154+
var buildParameters []codersdk.WorkspaceBuildParameter
155+
if copyParameters != "" {
156+
buildParameters, err = client.WorkspaceBuildParameters(inv.Context(), sourceWorkspace.ID)
157+
if err != nil {
158+
return err
159+
}
160+
} else {
161+
buildParameters, err = asWorkspaceBuildParameters(parameterFlags.richParameters)
162+
if err != nil {
163+
return xerrors.Errorf("can't parse given parameter values: %w", err)
164+
}
140165
}
141166

142167
richParameters, err := prepWorkspaceBuild(inv, client, prepWorkspaceBuildArgs{
@@ -145,7 +170,7 @@ func (r *RootCmd) create() *clibase.Cmd {
145170
NewWorkspaceName: workspaceName,
146171

147172
RichParameterFile: parameterFlags.richParameterFile,
148-
RichParameters: cliRichParameters,
173+
RichParameters: buildParameters,
149174
})
150175
if err != nil {
151176
return xerrors.Errorf("prepare build: %w", err)
@@ -217,6 +242,13 @@ func (r *RootCmd) create() *clibase.Cmd {
217242
Default: string(codersdk.AutomaticUpdatesNever),
218243
Value: clibase.StringOf(&autoUpdates),
219244
},
245+
clibase.Option{
246+
Flag: "copy-parameters",
247+
Env: "CODER_WORKSPACE_COPY_PARAMETERS",
248+
Description: "Specify the source workspace name to copy parameters from.",
249+
Default: string(codersdk.AutomaticUpdatesNever),
250+
Value: clibase.StringOf(&copyParameters),
251+
},
220252
cliui.SkipPromptOption(),
221253
)
222254
cmd.Options = append(cmd.Options, parameterFlags.cliParameters()...)

cli/testdata/coder_create_--help.golden

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ OPTIONS:
1414
Specify automatic updates setting for the workspace (accepts 'always'
1515
or 'never').
1616

17+
--copy-parameters string, $CODER_WORKSPACE_COPY_PARAMETERS (default: never)
18+
Specify the source workspace name to copy parameters from.
19+
1720
--parameter string-array, $CODER_RICH_PARAMETER
1821
Rich parameter value in the format "name=value".
1922

0 commit comments

Comments
 (0)