mirror of
https://github.com/coder/coder.git
synced 2025-07-06 15:41:45 +00:00
chore: deprecate template create command in favor of template push (#11390)
This commit is contained in:
@ -1,15 +1,11 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
"unicode/utf8"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"golang.org/x/xerrors"
|
||||
|
||||
"github.com/coder/pretty"
|
||||
@ -40,9 +36,13 @@ func (r *RootCmd) templateCreate() *clibase.Cmd {
|
||||
client := new(codersdk.Client)
|
||||
cmd := &clibase.Cmd{
|
||||
Use: "create [name]",
|
||||
Short: "Create a template from the current directory or as specified by flag",
|
||||
Short: "DEPRECATED: Create a template from the current directory or as specified by flag",
|
||||
Middleware: clibase.Chain(
|
||||
clibase.RequireRangeArgs(0, 1),
|
||||
cliui.DeprecationWarning(
|
||||
"Use `coder templates push` command for creating and updating templates. \n"+
|
||||
"Use `coder templates edit` command for editing template settings. ",
|
||||
),
|
||||
r.InitClient(client),
|
||||
),
|
||||
Handler: func(inv *clibase.Invocation) error {
|
||||
@ -253,107 +253,3 @@ func (r *RootCmd) templateCreate() *clibase.Cmd {
|
||||
cmd.Options = append(cmd.Options, uploadFlags.options()...)
|
||||
return cmd
|
||||
}
|
||||
|
||||
type createValidTemplateVersionArgs struct {
|
||||
Name string
|
||||
Message string
|
||||
Client *codersdk.Client
|
||||
Organization codersdk.Organization
|
||||
Provisioner codersdk.ProvisionerType
|
||||
FileID uuid.UUID
|
||||
|
||||
// Template is only required if updating a template's active version.
|
||||
Template *codersdk.Template
|
||||
// ReuseParameters will attempt to reuse params from the Template field
|
||||
// before prompting the user. Set to false to always prompt for param
|
||||
// values.
|
||||
ReuseParameters bool
|
||||
ProvisionerTags map[string]string
|
||||
UserVariableValues []codersdk.VariableValue
|
||||
}
|
||||
|
||||
func createValidTemplateVersion(inv *clibase.Invocation, args createValidTemplateVersionArgs) (*codersdk.TemplateVersion, error) {
|
||||
client := args.Client
|
||||
|
||||
req := codersdk.CreateTemplateVersionRequest{
|
||||
Name: args.Name,
|
||||
Message: args.Message,
|
||||
StorageMethod: codersdk.ProvisionerStorageMethodFile,
|
||||
FileID: args.FileID,
|
||||
Provisioner: args.Provisioner,
|
||||
ProvisionerTags: args.ProvisionerTags,
|
||||
UserVariableValues: args.UserVariableValues,
|
||||
}
|
||||
if args.Template != nil {
|
||||
req.TemplateID = args.Template.ID
|
||||
}
|
||||
version, err := client.CreateTemplateVersion(inv.Context(), args.Organization.ID, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = cliui.ProvisionerJob(inv.Context(), inv.Stdout, cliui.ProvisionerJobOptions{
|
||||
Fetch: func() (codersdk.ProvisionerJob, error) {
|
||||
version, err := client.TemplateVersion(inv.Context(), version.ID)
|
||||
return version.Job, err
|
||||
},
|
||||
Cancel: func() error {
|
||||
return client.CancelTemplateVersion(inv.Context(), version.ID)
|
||||
},
|
||||
Logs: func() (<-chan codersdk.ProvisionerJobLog, io.Closer, error) {
|
||||
return client.TemplateVersionLogsAfter(inv.Context(), version.ID, 0)
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
var jobErr *cliui.ProvisionerJobError
|
||||
if errors.As(err, &jobErr) && !codersdk.JobIsMissingParameterErrorCode(jobErr.Code) {
|
||||
return nil, err
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
version, err = client.TemplateVersion(inv.Context(), version.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if version.Job.Status != codersdk.ProvisionerJobSucceeded {
|
||||
return nil, xerrors.New(version.Job.Error)
|
||||
}
|
||||
|
||||
resources, err := client.TemplateVersionResources(inv.Context(), version.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Only display the resources on the start transition, to avoid listing them more than once.
|
||||
var startResources []codersdk.WorkspaceResource
|
||||
for _, r := range resources {
|
||||
if r.Transition == codersdk.WorkspaceTransitionStart {
|
||||
startResources = append(startResources, r)
|
||||
}
|
||||
}
|
||||
err = cliui.WorkspaceResources(inv.Stdout, startResources, cliui.WorkspaceResourcesOptions{
|
||||
HideAgentState: true,
|
||||
HideAccess: true,
|
||||
Title: "Template Preview",
|
||||
})
|
||||
if err != nil {
|
||||
return nil, xerrors.Errorf("preview template resources: %w", err)
|
||||
}
|
||||
|
||||
return &version, nil
|
||||
}
|
||||
|
||||
func ParseProvisionerTags(rawTags []string) (map[string]string, error) {
|
||||
tags := map[string]string{}
|
||||
for _, rawTag := range rawTags {
|
||||
parts := strings.SplitN(rawTag, "=", 2)
|
||||
if len(parts) < 2 {
|
||||
return nil, xerrors.Errorf("invalid tag format for %q. must be key=value", rawTag)
|
||||
}
|
||||
tags[parts[0]] = parts[1]
|
||||
}
|
||||
return tags, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user