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

     1  package ftp
     2  
     3  import (
     4  	"io"
     5  
     6  	"github.com/fastly/go-fastly/v9/fastly"
     7  
     8  	"github.com/fastly/cli/pkg/argparser"
     9  	fsterr "github.com/fastly/cli/pkg/errors"
    10  	"github.com/fastly/cli/pkg/global"
    11  	"github.com/fastly/cli/pkg/text"
    12  )
    13  
    14  // DescribeCommand calls the Fastly API to describe an FTP logging endpoint.
    15  type DescribeCommand struct {
    16  	argparser.Base
    17  	argparser.JSONOutput
    18  
    19  	Input          fastly.GetFTPInput
    20  	serviceName    argparser.OptionalServiceNameID
    21  	serviceVersion argparser.OptionalServiceVersion
    22  }
    23  
    24  // NewDescribeCommand returns a usable command registered under the parent.
    25  func NewDescribeCommand(parent argparser.Registerer, g *global.Data) *DescribeCommand {
    26  	c := DescribeCommand{
    27  		Base: argparser.Base{
    28  			Globals: g,
    29  		},
    30  	}
    31  	c.CmdClause = parent.Command("describe", "Show detailed information about an FTP logging endpoint on a Fastly service version").Alias("get")
    32  	c.RegisterFlagBool(c.JSONFlag()) // --json
    33  	c.RegisterFlag(argparser.StringFlagOpts{
    34  		Name:        argparser.FlagServiceIDName,
    35  		Description: argparser.FlagServiceIDDesc,
    36  		Dst:         &g.Manifest.Flag.ServiceID,
    37  		Short:       's',
    38  	})
    39  	c.RegisterFlag(argparser.StringFlagOpts{
    40  		Action:      c.serviceName.Set,
    41  		Name:        argparser.FlagServiceName,
    42  		Description: argparser.FlagServiceDesc,
    43  		Dst:         &c.serviceName.Value,
    44  	})
    45  	c.RegisterFlag(argparser.StringFlagOpts{
    46  		Name:        argparser.FlagVersionName,
    47  		Description: argparser.FlagVersionDesc,
    48  		Dst:         &c.serviceVersion.Value,
    49  		Required:    true,
    50  	})
    51  	c.CmdClause.Flag("name", "The name of the FTP logging object").Short('n').Required().StringVar(&c.Input.Name)
    52  	return &c
    53  }
    54  
    55  // Exec invokes the application logic for the command.
    56  func (c *DescribeCommand) Exec(_ io.Reader, out io.Writer) error {
    57  	if c.Globals.Verbose() && c.JSONOutput.Enabled {
    58  		return fsterr.ErrInvalidVerboseJSONCombo
    59  	}
    60  
    61  	serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{
    62  		AllowActiveLocked:  true,
    63  		APIClient:          c.Globals.APIClient,
    64  		Manifest:           *c.Globals.Manifest,
    65  		Out:                out,
    66  		ServiceNameFlag:    c.serviceName,
    67  		ServiceVersionFlag: c.serviceVersion,
    68  		VerboseMode:        c.Globals.Flags.Verbose,
    69  	})
    70  	if err != nil {
    71  		c.Globals.ErrLog.AddWithContext(err, map[string]any{
    72  			"Service ID":      serviceID,
    73  			"Service Version": fsterr.ServiceVersion(serviceVersion),
    74  		})
    75  		return err
    76  	}
    77  
    78  	c.Input.ServiceID = serviceID
    79  	c.Input.ServiceVersion = fastly.ToValue(serviceVersion.Number)
    80  
    81  	o, err := c.Globals.APIClient.GetFTP(&c.Input)
    82  	if err != nil {
    83  		c.Globals.ErrLog.Add(err)
    84  		return err
    85  	}
    86  
    87  	if ok, err := c.WriteJSON(out, o); ok {
    88  		return err
    89  	}
    90  
    91  	lines := text.Lines{
    92  		"Address":            fastly.ToValue(o.Address),
    93  		"Compression codec":  fastly.ToValue(o.CompressionCodec),
    94  		"Format version":     fastly.ToValue(o.FormatVersion),
    95  		"Format":             fastly.ToValue(o.Format),
    96  		"GZip level":         fastly.ToValue(o.GzipLevel),
    97  		"Name":               fastly.ToValue(o.Name),
    98  		"Password":           fastly.ToValue(o.Password),
    99  		"Path":               fastly.ToValue(o.Path),
   100  		"Period":             fastly.ToValue(o.Period),
   101  		"Placement":          fastly.ToValue(o.Placement),
   102  		"Port":               fastly.ToValue(o.Port),
   103  		"Public key":         fastly.ToValue(o.PublicKey),
   104  		"Response condition": fastly.ToValue(o.ResponseCondition),
   105  		"Timestamp format":   fastly.ToValue(o.TimestampFormat),
   106  		"Username":           fastly.ToValue(o.Username),
   107  		"Version":            fastly.ToValue(o.ServiceVersion),
   108  	}
   109  	if !c.Globals.Verbose() {
   110  		lines["Service ID"] = fastly.ToValue(o.ServiceID)
   111  	}
   112  	text.PrintLines(out, lines)
   113  
   114  	return nil
   115  }