github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/vcl/condition/list.go (about) 1 package condition 2 3 import ( 4 "fmt" 5 "io" 6 7 "github.com/fastly/go-fastly/v9/fastly" 8 9 "github.com/fastly/cli/pkg/argparser" 10 "github.com/fastly/cli/pkg/errors" 11 "github.com/fastly/cli/pkg/global" 12 "github.com/fastly/cli/pkg/text" 13 ) 14 15 // ListCommand calls the Fastly API to list appropriate resources. 16 type ListCommand struct { 17 argparser.Base 18 argparser.JSONOutput 19 20 serviceName argparser.OptionalServiceNameID 21 serviceVersion argparser.OptionalServiceVersion 22 } 23 24 // NewListCommand returns a usable command registered under the parent. 25 func NewListCommand(parent argparser.Registerer, g *global.Data) *ListCommand { 26 var c ListCommand 27 c.CmdClause = parent.Command("list", "List condition on a Fastly service version") 28 c.Globals = g 29 30 // Required flags 31 c.RegisterFlag(argparser.StringFlagOpts{ 32 Name: argparser.FlagVersionName, 33 Description: argparser.FlagVersionDesc, 34 Dst: &c.serviceVersion.Value, 35 Required: true, 36 }) 37 38 // Optional Flags 39 c.RegisterFlag(argparser.StringFlagOpts{ 40 Name: argparser.FlagServiceIDName, 41 Description: argparser.FlagServiceIDDesc, 42 Dst: &g.Manifest.Flag.ServiceID, 43 Short: 's', 44 }) 45 c.RegisterFlag(argparser.StringFlagOpts{ 46 Action: c.serviceName.Set, 47 Name: argparser.FlagServiceName, 48 Description: argparser.FlagServiceDesc, 49 Dst: &c.serviceName.Value, 50 }) 51 52 return &c 53 } 54 55 // Exec invokes the application logic for the command. 56 func (c *ListCommand) Exec(_ io.Reader, out io.Writer) error { 57 if c.Globals.Verbose() && c.JSONOutput.Enabled { 58 return errors.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": errors.ServiceVersion(serviceVersion), 74 }) 75 return err 76 } 77 78 var input fastly.ListConditionsInput 79 80 input.ServiceID = serviceID 81 input.ServiceVersion = fastly.ToValue(serviceVersion.Number) 82 83 o, err := c.Globals.APIClient.ListConditions(&input) 84 if err != nil { 85 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 86 "Service ID": serviceID, 87 "Service Version": fastly.ToValue(serviceVersion.Number), 88 }) 89 return err 90 } 91 92 if ok, err := c.WriteJSON(out, o); ok { 93 return err 94 } 95 96 if !c.Globals.Verbose() { 97 tw := text.NewTable(out) 98 tw.AddHeader("SERVICE", "VERSION", "NAME", "STATEMENT", "TYPE", "PRIORITY") 99 for _, r := range o { 100 tw.AddLine( 101 fastly.ToValue(r.ServiceID), 102 fastly.ToValue(r.ServiceVersion), 103 fastly.ToValue(r.Name), 104 fastly.ToValue(r.Statement), 105 fastly.ToValue(r.Type), 106 fastly.ToValue(r.Priority), 107 ) 108 } 109 tw.Print() 110 return nil 111 } 112 113 fmt.Fprintf(out, "Version: %d\n", input.ServiceVersion) 114 for i, r := range o { 115 fmt.Fprintf(out, "\tCondition %d/%d\n", i+1, len(o)) 116 fmt.Fprintf(out, "\t\tName: %s\n", fastly.ToValue(r.Name)) 117 fmt.Fprintf(out, "\t\tStatement: %v\n", fastly.ToValue(r.Statement)) 118 fmt.Fprintf(out, "\t\tType: %v\n", fastly.ToValue(r.Type)) 119 fmt.Fprintf(out, "\t\tPriority: %v\n", fastly.ToValue(r.Priority)) 120 } 121 fmt.Fprintln(out) 122 123 return nil 124 }