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  }