|
1 | 1 | package cli |
2 | 2 |
|
3 | 3 | import ( |
4 | | -"errors" |
5 | 4 | "fmt" |
6 | | -"io" |
7 | 5 | "net/http" |
8 | | -"strings" |
9 | 6 | "time" |
10 | 7 | "unicode/utf8" |
11 | 8 |
|
12 | | -"github.com/google/uuid" |
13 | 9 | "golang.org/x/xerrors" |
14 | 10 |
|
15 | 11 | "github.com/coder/pretty" |
@@ -40,9 +36,13 @@ func (r *RootCmd) templateCreate() *clibase.Cmd { |
40 | 36 | client:=new(codersdk.Client) |
41 | 37 | cmd:=&clibase.Cmd{ |
42 | 38 | Use:"create [name]", |
43 | | -Short:"Create a template from the current directory or as specified by flag", |
| 39 | +Short:"DEPRECATED:Create a template from the current directory or as specified by flag", |
44 | 40 | Middleware:clibase.Chain( |
45 | 41 | clibase.RequireRangeArgs(0,1), |
| 42 | +cliui.DeprecationWarning( |
| 43 | +"Use `coder templates push` command for creating and updating templates.\n"+ |
| 44 | +"Use `coder templates edit` command for editing template settings. ", |
| 45 | +), |
46 | 46 | r.InitClient(client), |
47 | 47 | ), |
48 | 48 | Handler:func(inv*clibase.Invocation)error { |
@@ -253,107 +253,3 @@ func (r *RootCmd) templateCreate() *clibase.Cmd { |
253 | 253 | cmd.Options=append(cmd.Options,uploadFlags.options()...) |
254 | 254 | returncmd |
255 | 255 | } |
256 | | - |
257 | | -typecreateValidTemplateVersionArgsstruct { |
258 | | -Namestring |
259 | | -Messagestring |
260 | | -Client*codersdk.Client |
261 | | -Organization codersdk.Organization |
262 | | -Provisioner codersdk.ProvisionerType |
263 | | -FileID uuid.UUID |
264 | | - |
265 | | -// Template is only required if updating a template's active version. |
266 | | -Template*codersdk.Template |
267 | | -// ReuseParameters will attempt to reuse params from the Template field |
268 | | -// before prompting the user. Set to false to always prompt for param |
269 | | -// values. |
270 | | -ReuseParametersbool |
271 | | -ProvisionerTagsmap[string]string |
272 | | -UserVariableValues []codersdk.VariableValue |
273 | | -} |
274 | | - |
275 | | -funccreateValidTemplateVersion(inv*clibase.Invocation,argscreateValidTemplateVersionArgs) (*codersdk.TemplateVersion,error) { |
276 | | -client:=args.Client |
277 | | - |
278 | | -req:= codersdk.CreateTemplateVersionRequest{ |
279 | | -Name:args.Name, |
280 | | -Message:args.Message, |
281 | | -StorageMethod:codersdk.ProvisionerStorageMethodFile, |
282 | | -FileID:args.FileID, |
283 | | -Provisioner:args.Provisioner, |
284 | | -ProvisionerTags:args.ProvisionerTags, |
285 | | -UserVariableValues:args.UserVariableValues, |
286 | | -} |
287 | | -ifargs.Template!=nil { |
288 | | -req.TemplateID=args.Template.ID |
289 | | -} |
290 | | -version,err:=client.CreateTemplateVersion(inv.Context(),args.Organization.ID,req) |
291 | | -iferr!=nil { |
292 | | -returnnil,err |
293 | | -} |
294 | | - |
295 | | -err=cliui.ProvisionerJob(inv.Context(),inv.Stdout, cliui.ProvisionerJobOptions{ |
296 | | -Fetch:func() (codersdk.ProvisionerJob,error) { |
297 | | -version,err:=client.TemplateVersion(inv.Context(),version.ID) |
298 | | -returnversion.Job,err |
299 | | -}, |
300 | | -Cancel:func()error { |
301 | | -returnclient.CancelTemplateVersion(inv.Context(),version.ID) |
302 | | -}, |
303 | | -Logs:func() (<-chan codersdk.ProvisionerJobLog, io.Closer,error) { |
304 | | -returnclient.TemplateVersionLogsAfter(inv.Context(),version.ID,0) |
305 | | -}, |
306 | | -}) |
307 | | -iferr!=nil { |
308 | | -varjobErr*cliui.ProvisionerJobError |
309 | | -iferrors.As(err,&jobErr)&&!codersdk.JobIsMissingParameterErrorCode(jobErr.Code) { |
310 | | -returnnil,err |
311 | | -} |
312 | | -iferr!=nil { |
313 | | -returnnil,err |
314 | | -} |
315 | | -} |
316 | | -version,err=client.TemplateVersion(inv.Context(),version.ID) |
317 | | -iferr!=nil { |
318 | | -returnnil,err |
319 | | -} |
320 | | - |
321 | | -ifversion.Job.Status!=codersdk.ProvisionerJobSucceeded { |
322 | | -returnnil,xerrors.New(version.Job.Error) |
323 | | -} |
324 | | - |
325 | | -resources,err:=client.TemplateVersionResources(inv.Context(),version.ID) |
326 | | -iferr!=nil { |
327 | | -returnnil,err |
328 | | -} |
329 | | - |
330 | | -// Only display the resources on the start transition, to avoid listing them more than once. |
331 | | -varstartResources []codersdk.WorkspaceResource |
332 | | -for_,r:=rangeresources { |
333 | | -ifr.Transition==codersdk.WorkspaceTransitionStart { |
334 | | -startResources=append(startResources,r) |
335 | | -} |
336 | | -} |
337 | | -err=cliui.WorkspaceResources(inv.Stdout,startResources, cliui.WorkspaceResourcesOptions{ |
338 | | -HideAgentState:true, |
339 | | -HideAccess:true, |
340 | | -Title:"Template Preview", |
341 | | -}) |
342 | | -iferr!=nil { |
343 | | -returnnil,xerrors.Errorf("preview template resources: %w",err) |
344 | | -} |
345 | | - |
346 | | -return&version,nil |
347 | | -} |
348 | | - |
349 | | -funcParseProvisionerTags(rawTags []string) (map[string]string,error) { |
350 | | -tags:=map[string]string{} |
351 | | -for_,rawTag:=rangerawTags { |
352 | | -parts:=strings.SplitN(rawTag,"=",2) |
353 | | -iflen(parts)<2 { |
354 | | -returnnil,xerrors.Errorf("invalid tag format for %q. must be key=value",rawTag) |
355 | | -} |
356 | | -tags[parts[0]]=parts[1] |
357 | | -} |
358 | | -returntags,nil |
359 | | -} |