github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/vcl/condition/describe.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 ) 13 14 // DescribeCommand calls the Fastly API to describe an appropriate resource. 15 type DescribeCommand struct { 16 argparser.Base 17 argparser.JSONOutput 18 name string 19 serviceName argparser.OptionalServiceNameID 20 serviceVersion argparser.OptionalServiceVersion 21 } 22 23 // NewDescribeCommand returns a usable command registered under the parent. 24 func NewDescribeCommand(parent argparser.Registerer, g *global.Data) *DescribeCommand { 25 var c DescribeCommand 26 c.CmdClause = parent.Command("describe", "Show detailed information about a condition on a Fastly service version").Alias("get") 27 c.Globals = g 28 29 // Required flags 30 c.CmdClause.Flag("name", "Name of condition").Short('n').Required().StringVar(&c.name) 31 32 c.RegisterFlag(argparser.StringFlagOpts{ 33 Name: argparser.FlagVersionName, 34 Description: argparser.FlagVersionDesc, 35 Dst: &c.serviceVersion.Value, 36 Required: true, 37 }) 38 39 // Optional flags 40 c.RegisterFlagBool(c.JSONFlag()) 41 c.RegisterFlag(argparser.StringFlagOpts{ 42 Name: argparser.FlagServiceIDName, 43 Description: argparser.FlagServiceIDDesc, 44 Dst: &g.Manifest.Flag.ServiceID, 45 Short: 's', 46 }) 47 c.RegisterFlag(argparser.StringFlagOpts{ 48 Action: c.serviceName.Set, 49 Name: argparser.FlagServiceName, 50 Description: argparser.FlagServiceDesc, 51 Dst: &c.serviceName.Value, 52 }) 53 54 return &c 55 } 56 57 // Exec invokes the application logic for the command. 58 func (c *DescribeCommand) Exec(_ io.Reader, out io.Writer) error { 59 if c.Globals.Verbose() && c.JSONOutput.Enabled { 60 return errors.ErrInvalidVerboseJSONCombo 61 } 62 63 serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{ 64 AllowActiveLocked: true, 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 var input fastly.GetConditionInput 81 input.ServiceID = serviceID 82 input.ServiceVersion = fastly.ToValue(serviceVersion.Number) 83 input.Name = c.name 84 85 r, err := c.Globals.APIClient.GetCondition(&input) 86 if err != nil { 87 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 88 "Service ID": serviceID, 89 "Service Version": fastly.ToValue(serviceVersion.Number), 90 }) 91 return err 92 } 93 94 if ok, err := c.WriteJSON(out, r); ok { 95 return err 96 } 97 98 if !c.Globals.Verbose() { 99 fmt.Fprintf(out, "\nService ID: %s\n", fastly.ToValue(r.ServiceID)) 100 } 101 fmt.Fprintf(out, "Version: %d\n", fastly.ToValue(r.ServiceVersion)) 102 fmt.Fprintf(out, "Name: %s\n", fastly.ToValue(r.Name)) 103 fmt.Fprintf(out, "Statement: %s\n", fastly.ToValue(r.Statement)) 104 fmt.Fprintf(out, "Type: %s\n", fastly.ToValue(r.Type)) 105 fmt.Fprintf(out, "Priority: %d\n", fastly.ToValue(r.Priority)) 106 107 return nil 108 }