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  }