github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/logging/cloudfiles/delete.go (about)

     1  package cloudfiles
     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  // DeleteCommand calls the Fastly API to delete a Cloudfiles logging endpoint.
    15  type DeleteCommand struct {
    16  	argparser.Base
    17  	Input          fastly.DeleteCloudfilesInput
    18  	serviceName    argparser.OptionalServiceNameID
    19  	serviceVersion argparser.OptionalServiceVersion
    20  	autoClone      argparser.OptionalAutoClone
    21  }
    22  
    23  // NewDeleteCommand returns a usable command registered under the parent.
    24  func NewDeleteCommand(parent argparser.Registerer, g *global.Data) *DeleteCommand {
    25  	c := DeleteCommand{
    26  		Base: argparser.Base{
    27  			Globals: g,
    28  		},
    29  	}
    30  	c.CmdClause = parent.Command("delete", "Delete a Cloudfiles logging endpoint on a Fastly service version").Alias("remove")
    31  
    32  	// Required.
    33  	c.CmdClause.Flag("name", "The name of the Cloudfiles logging object").Short('n').Required().StringVar(&c.Input.Name)
    34  	c.RegisterFlag(argparser.StringFlagOpts{
    35  		Name:        argparser.FlagVersionName,
    36  		Description: argparser.FlagVersionDesc,
    37  		Dst:         &c.serviceVersion.Value,
    38  		Required:    true,
    39  	})
    40  
    41  	// Optional.
    42  	c.RegisterAutoCloneFlag(argparser.AutoCloneFlagOpts{
    43  		Action: c.autoClone.Set,
    44  		Dst:    &c.autoClone.Value,
    45  	})
    46  	c.RegisterFlag(argparser.StringFlagOpts{
    47  		Name:        argparser.FlagServiceIDName,
    48  		Description: argparser.FlagServiceIDDesc,
    49  		Dst:         &g.Manifest.Flag.ServiceID,
    50  		Short:       's',
    51  	})
    52  	c.RegisterFlag(argparser.StringFlagOpts{
    53  		Action:      c.serviceName.Set,
    54  		Name:        argparser.FlagServiceName,
    55  		Description: argparser.FlagServiceDesc,
    56  		Dst:         &c.serviceName.Value,
    57  	})
    58  	return &c
    59  }
    60  
    61  // Exec invokes the application logic for the command.
    62  func (c *DeleteCommand) Exec(_ io.Reader, out io.Writer) error {
    63  	serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{
    64  		AutoCloneFlag:      c.autoClone,
    65  		APIClient:          c.Globals.APIClient,
    66  		Manifest:           *c.Globals.Manifest,
    67  		Out:                out,
    68  		ServiceNameFlag:    c.serviceName,
    69  		ServiceVersionFlag: c.serviceVersion,
    70  		VerboseMode:        c.Globals.Flags.Verbose,
    71  	})
    72  	if err != nil {
    73  		c.Globals.ErrLog.AddWithContext(err, map[string]any{
    74  			"Service ID":      serviceID,
    75  			"Service Version": errors.ServiceVersion(serviceVersion),
    76  		})
    77  		return err
    78  	}
    79  
    80  	c.Input.ServiceID = serviceID
    81  	c.Input.ServiceVersion = fastly.ToValue(serviceVersion.Number)
    82  
    83  	if err := c.Globals.APIClient.DeleteCloudfiles(&c.Input); err != nil {
    84  		c.Globals.ErrLog.AddWithContext(err, map[string]any{
    85  			"Service ID":      serviceID,
    86  			"Service Version": fastly.ToValue(serviceVersion.Number),
    87  		})
    88  		return err
    89  	}
    90  
    91  	text.Success(out, "Deleted Cloudfiles logging endpoint %s (service %s version %d)", c.Input.Name, c.Input.ServiceID, c.Input.ServiceVersion)
    92  	return nil
    93  }