github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/domain/create.go (about) 1 package domain 2 3 import ( 4 "io" 5 6 "github.com/fastly/go-fastly/v9/fastly" 7 8 "github.com/fastly/cli/pkg/argparser" 9 "github.com/fastly/cli/pkg/errors" 10 "github.com/fastly/cli/pkg/global" 11 "github.com/fastly/cli/pkg/text" 12 ) 13 14 // CreateCommand calls the Fastly API to create domains. 15 type CreateCommand struct { 16 argparser.Base 17 18 // Required. 19 serviceVersion argparser.OptionalServiceVersion 20 21 // Optional. 22 autoClone argparser.OptionalAutoClone 23 comment argparser.OptionalString 24 name argparser.OptionalString 25 serviceName argparser.OptionalServiceNameID 26 } 27 28 // NewCreateCommand returns a usable command registered under the parent. 29 func NewCreateCommand(parent argparser.Registerer, g *global.Data) *CreateCommand { 30 c := CreateCommand{ 31 Base: argparser.Base{ 32 Globals: g, 33 }, 34 } 35 c.CmdClause = parent.Command("create", "Create a domain on a Fastly service version").Alias("add") 36 37 // Required. 38 c.RegisterFlag(argparser.StringFlagOpts{ 39 Name: argparser.FlagVersionName, 40 Description: argparser.FlagVersionDesc, 41 Dst: &c.serviceVersion.Value, 42 Required: true, 43 }) 44 45 // Optional. 46 c.RegisterAutoCloneFlag(argparser.AutoCloneFlagOpts{ 47 Action: c.autoClone.Set, 48 Dst: &c.autoClone.Value, 49 }) 50 c.CmdClause.Flag("comment", "A descriptive note").Action(c.comment.Set).StringVar(&c.comment.Value) 51 c.CmdClause.Flag("name", "Domain name").Short('n').Action(c.name.Set).StringVar(&c.name.Value) 52 c.RegisterFlag(argparser.StringFlagOpts{ 53 Name: argparser.FlagServiceIDName, 54 Description: argparser.FlagServiceIDDesc, 55 Dst: &g.Manifest.Flag.ServiceID, 56 Short: 's', 57 }) 58 c.RegisterFlag(argparser.StringFlagOpts{ 59 Action: c.serviceName.Set, 60 Name: argparser.FlagServiceName, 61 Description: argparser.FlagServiceDesc, 62 Dst: &c.serviceName.Value, 63 }) 64 return &c 65 } 66 67 // Exec invokes the application logic for the command. 68 func (c *CreateCommand) Exec(_ io.Reader, out io.Writer) error { 69 serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{ 70 AutoCloneFlag: c.autoClone, 71 APIClient: c.Globals.APIClient, 72 Manifest: *c.Globals.Manifest, 73 Out: out, 74 ServiceNameFlag: c.serviceName, 75 ServiceVersionFlag: c.serviceVersion, 76 VerboseMode: c.Globals.Flags.Verbose, 77 }) 78 if err != nil { 79 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 80 "Service ID": serviceID, 81 "Service Version": errors.ServiceVersion(serviceVersion), 82 }) 83 return err 84 } 85 input := fastly.CreateDomainInput{ 86 ServiceID: serviceID, 87 ServiceVersion: fastly.ToValue(serviceVersion.Number), 88 } 89 if c.name.WasSet { 90 input.Name = &c.name.Value 91 } 92 if c.comment.WasSet { 93 input.Comment = &c.comment.Value 94 } 95 d, err := c.Globals.APIClient.CreateDomain(&input) 96 if err != nil { 97 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 98 "Service ID": serviceID, 99 "Service Version": fastly.ToValue(serviceVersion.Number), 100 }) 101 return err 102 } 103 104 text.Success(out, "Created domain %s (service %s version %d)", fastly.ToValue(d.Name), fastly.ToValue(d.ServiceID), fastly.ToValue(d.ServiceVersion)) 105 return nil 106 }