github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/service/update.go (about) 1 package service 2 3 import ( 4 "fmt" 5 "io" 6 7 "github.com/fastly/go-fastly/v9/fastly" 8 9 "github.com/fastly/cli/pkg/argparser" 10 "github.com/fastly/cli/pkg/global" 11 "github.com/fastly/cli/pkg/text" 12 ) 13 14 // UpdateCommand calls the Fastly API to create services. 15 type UpdateCommand struct { 16 argparser.Base 17 18 comment argparser.OptionalString 19 input fastly.UpdateServiceInput 20 name argparser.OptionalString 21 serviceName argparser.OptionalServiceNameID 22 } 23 24 // NewUpdateCommand returns a usable command registered under the parent. 25 func NewUpdateCommand(parent argparser.Registerer, g *global.Data) *UpdateCommand { 26 c := UpdateCommand{ 27 Base: argparser.Base{ 28 Globals: g, 29 }, 30 } 31 c.CmdClause = parent.Command("update", "Update a Fastly service") 32 33 // Optional. 34 c.CmdClause.Flag("comment", "Human-readable comment").Action(c.comment.Set).StringVar(&c.comment.Value) 35 c.CmdClause.Flag("name", "Service name").Short('n').Action(c.name.Set).StringVar(&c.name.Value) 36 c.RegisterFlag(argparser.StringFlagOpts{ 37 Name: argparser.FlagServiceIDName, 38 Description: argparser.FlagServiceIDDesc, 39 Dst: &g.Manifest.Flag.ServiceID, 40 Short: 's', 41 }) 42 c.RegisterFlag(argparser.StringFlagOpts{ 43 Action: c.serviceName.Set, 44 Name: argparser.FlagServiceName, 45 Description: argparser.FlagServiceDesc, 46 Dst: &c.serviceName.Value, 47 }) 48 return &c 49 } 50 51 // Exec invokes the application logic for the command. 52 func (c *UpdateCommand) Exec(_ io.Reader, out io.Writer) error { 53 serviceID, source, flag, err := argparser.ServiceID(c.serviceName, *c.Globals.Manifest, c.Globals.APIClient, c.Globals.ErrLog) 54 if err != nil { 55 return err 56 } 57 if c.Globals.Verbose() { 58 argparser.DisplayServiceID(serviceID, flag, source, out) 59 } 60 61 c.input.ServiceID = serviceID 62 63 if !c.name.WasSet && !c.comment.WasSet { 64 return fmt.Errorf("error parsing arguments: must provide either --name or --comment to update service") 65 } 66 67 if c.name.WasSet { 68 c.input.Name = &c.name.Value 69 } 70 if c.comment.WasSet { 71 c.input.Comment = &c.comment.Value 72 } 73 74 s, err := c.Globals.APIClient.UpdateService(&c.input) 75 if err != nil { 76 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 77 "Service ID": serviceID, 78 "Service Name": c.name.Value, 79 "Comment": c.comment.Value, 80 }) 81 return err 82 } 83 84 text.Success(out, "Updated service %s", fastly.ToValue(s.ServiceID)) 85 return nil 86 }