@@ -28,6 +28,7 @@ func (r *RootCmd) create() *clibase.Cmd {
28
28
29
29
parameterFlags workspaceParameterFlags
30
30
autoUpdates string
31
+ copyParameters string
31
32
)
32
33
client := new (codersdk.Client )
33
34
cmd := & clibase.Cmd {
@@ -76,6 +77,22 @@ func (r *RootCmd) create() *clibase.Cmd {
76
77
return xerrors .Errorf ("A workspace already exists named %q!" , workspaceName )
77
78
}
78
79
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
+
79
96
var template codersdk.Template
80
97
if templateName == "" {
81
98
_ , _ = 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 {
134
151
schedSpec = ptr .Ref (sched .String ())
135
152
}
136
153
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
+ }
140
165
}
141
166
142
167
richParameters , err := prepWorkspaceBuild (inv , client , prepWorkspaceBuildArgs {
@@ -145,7 +170,7 @@ func (r *RootCmd) create() *clibase.Cmd {
145
170
NewWorkspaceName : workspaceName ,
146
171
147
172
RichParameterFile : parameterFlags .richParameterFile ,
148
- RichParameters : cliRichParameters ,
173
+ RichParameters : buildParameters ,
149
174
})
150
175
if err != nil {
151
176
return xerrors .Errorf ("prepare build: %w" , err )
@@ -217,6 +242,13 @@ func (r *RootCmd) create() *clibase.Cmd {
217
242
Default : string (codersdk .AutomaticUpdatesNever ),
218
243
Value : clibase .StringOf (& autoUpdates ),
219
244
},
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
+ },
220
252
cliui .SkipPromptOption (),
221
253
)
222
254
cmd .Options = append (cmd .Options , parameterFlags .cliParameters ()... )
0 commit comments