github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/logging/newrelic/delete.go (about) 1 package newrelic 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 // NewDeleteCommand returns a usable command registered under the parent. 15 func NewDeleteCommand(parent argparser.Registerer, g *global.Data) *DeleteCommand { 16 c := DeleteCommand{ 17 Base: argparser.Base{ 18 Globals: g, 19 }, 20 } 21 c.CmdClause = parent.Command("delete", "Delete the New Relic Logs logging object for a particular service and version").Alias("remove") 22 23 // Required. 24 c.CmdClause.Flag("name", "The name for the real-time logging configuration to delete").Required().StringVar(&c.name) 25 c.RegisterFlag(argparser.StringFlagOpts{ 26 Name: argparser.FlagVersionName, 27 Description: argparser.FlagVersionDesc, 28 Dst: &c.serviceVersion.Value, 29 Required: true, 30 }) 31 32 // Optional. 33 c.RegisterAutoCloneFlag(argparser.AutoCloneFlagOpts{ 34 Action: c.autoClone.Set, 35 Dst: &c.autoClone.Value, 36 }) 37 c.RegisterFlag(argparser.StringFlagOpts{ 38 Name: argparser.FlagServiceIDName, 39 Description: argparser.FlagServiceIDDesc, 40 Dst: &g.Manifest.Flag.ServiceID, 41 Short: 's', 42 }) 43 c.RegisterFlag(argparser.StringFlagOpts{ 44 Action: c.serviceName.Set, 45 Name: argparser.FlagServiceName, 46 Description: argparser.FlagServiceDesc, 47 Dst: &c.serviceName.Value, 48 }) 49 50 return &c 51 } 52 53 // DeleteCommand calls the Fastly API to delete an appropriate resource. 54 type DeleteCommand struct { 55 argparser.Base 56 57 autoClone argparser.OptionalAutoClone 58 name string 59 serviceName argparser.OptionalServiceNameID 60 serviceVersion argparser.OptionalServiceVersion 61 } 62 63 // Exec invokes the application logic for the command. 64 func (c *DeleteCommand) Exec(_ io.Reader, out io.Writer) error { 65 serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{ 66 AutoCloneFlag: c.autoClone, 67 APIClient: c.Globals.APIClient, 68 Manifest: *c.Globals.Manifest, 69 Out: out, 70 ServiceNameFlag: c.serviceName, 71 ServiceVersionFlag: c.serviceVersion, 72 VerboseMode: c.Globals.Flags.Verbose, 73 }) 74 if err != nil { 75 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 76 "Service ID": serviceID, 77 "Service Version": errors.ServiceVersion(serviceVersion), 78 }) 79 return err 80 } 81 82 input := c.constructInput(serviceID, fastly.ToValue(serviceVersion.Number)) 83 84 err = c.Globals.APIClient.DeleteNewRelic(input) 85 if err != nil { 86 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 87 "Service ID": serviceID, 88 "Service Version": fastly.ToValue(serviceVersion.Number), 89 }) 90 return err 91 } 92 93 text.Success(out, "Deleted New Relic logging endpoint '%s' (service: %s, version: %d)", c.name, serviceID, fastly.ToValue(serviceVersion.Number)) 94 return nil 95 } 96 97 // constructInput transforms values parsed from CLI flags into an object to be used by the API client library. 98 func (c *DeleteCommand) constructInput(serviceID string, serviceVersion int) *fastly.DeleteNewRelicInput { 99 var input fastly.DeleteNewRelicInput 100 101 input.Name = c.name 102 input.ServiceID = serviceID 103 input.ServiceVersion = serviceVersion 104 105 return &input 106 }