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  }