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 }