github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/logging/s3/describe.go (about) 1 package s3 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 Amazon S3 logging endpoint. 15 type DescribeCommand struct { 16 argparser.Base 17 argparser.JSONOutput 18 19 Input fastly.GetS3Input 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 a S3 logging endpoint on a Fastly service version").Alias("get") 32 33 // Required. 34 c.CmdClause.Flag("name", "The name of the S3 logging object").Short('n').Required().StringVar(&c.Input.Name) 35 c.RegisterFlag(argparser.StringFlagOpts{ 36 Name: argparser.FlagVersionName, 37 Description: argparser.FlagVersionDesc, 38 Dst: &c.serviceVersion.Value, 39 Required: true, 40 }) 41 42 // Optional. 43 c.RegisterFlagBool(c.JSONFlag()) // --json 44 c.RegisterFlag(argparser.StringFlagOpts{ 45 Name: argparser.FlagServiceIDName, 46 Description: argparser.FlagServiceIDDesc, 47 Dst: &g.Manifest.Flag.ServiceID, 48 Short: 's', 49 }) 50 c.RegisterFlag(argparser.StringFlagOpts{ 51 Action: c.serviceName.Set, 52 Name: argparser.FlagServiceName, 53 Description: argparser.FlagServiceDesc, 54 Dst: &c.serviceName.Value, 55 }) 56 return &c 57 } 58 59 // Exec invokes the application logic for the command. 60 func (c *DescribeCommand) Exec(_ io.Reader, out io.Writer) error { 61 if c.Globals.Verbose() && c.JSONOutput.Enabled { 62 return fsterr.ErrInvalidVerboseJSONCombo 63 } 64 65 serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{ 66 AllowActiveLocked: true, 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": fsterr.ServiceVersion(serviceVersion), 78 }) 79 return err 80 } 81 82 c.Input.ServiceID = serviceID 83 c.Input.ServiceVersion = fastly.ToValue(serviceVersion.Number) 84 85 o, err := c.Globals.APIClient.GetS3(&c.Input) 86 if err != nil { 87 c.Globals.ErrLog.Add(err) 88 return err 89 } 90 91 if ok, err := c.WriteJSON(out, o); ok { 92 return err 93 } 94 95 lines := text.Lines{ 96 "Bucket": fastly.ToValue(o.BucketName), 97 "Compression codec": fastly.ToValue(o.CompressionCodec), 98 "File max bytes": fastly.ToValue(o.FileMaxBytes), 99 "Format version": fastly.ToValue(o.FormatVersion), 100 "Format": fastly.ToValue(o.Format), 101 "GZip level": fastly.ToValue(o.GzipLevel), 102 "Message type": fastly.ToValue(o.MessageType), 103 "Name": fastly.ToValue(o.Name), 104 "Path": fastly.ToValue(o.Path), 105 "Period": fastly.ToValue(o.Period), 106 "Placement": fastly.ToValue(o.Placement), 107 "Public key": fastly.ToValue(o.PublicKey), 108 "Redundancy": fastly.ToValue(o.Redundancy), 109 "Response condition": fastly.ToValue(o.ResponseCondition), 110 "Server-side encryption KMS key ID": fastly.ToValue(o.ServerSideEncryption), 111 "Server-side encryption": fastly.ToValue(o.ServerSideEncryption), 112 "Timestamp format": fastly.ToValue(o.TimestampFormat), 113 "Version": fastly.ToValue(o.ServiceVersion), 114 } 115 if o.AccessKey != nil || o.SecretKey != nil { 116 lines["Access key"] = fastly.ToValue(o.AccessKey) 117 lines["Secret key"] = fastly.ToValue(o.SecretKey) 118 } 119 if o.IAMRole != nil { 120 lines["IAM role"] = fastly.ToValue(o.IAMRole) 121 } 122 if !c.Globals.Verbose() { 123 lines["Service ID"] = fastly.ToValue(o.ServiceID) 124 } 125 text.PrintLines(out, lines) 126 127 return nil 128 }