|
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 |
| -} |