github.com/fastly/cli@v1.7.2-0.20240304164155-9d0f1d77c3bf/pkg/commands/vcl/condition/update.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 // UpdateCommand calls the Fastly API to update an appropriate resource. 16 type UpdateCommand struct { 17 argparser.Base 18 input fastly.UpdateConditionInput 19 serviceName argparser.OptionalServiceNameID 20 serviceVersion argparser.OptionalServiceVersion 21 autoClone argparser.OptionalAutoClone 22 23 newName argparser.OptionalString 24 statement argparser.OptionalString 25 conditionType argparser.OptionalString 26 priority argparser.OptionalInt 27 comment argparser.OptionalString 28 } 29 30 // NewUpdateCommand returns a usable command registered under the parent. 31 func NewUpdateCommand(parent argparser.Registerer, g *global.Data) *UpdateCommand { 32 var c UpdateCommand 33 c.CmdClause = parent.Command("update", "Update a condition on a Fastly service version") 34 c.Globals = g 35 36 // Required flags 37 c.CmdClause.Flag("name", "Domain name").Short('n').Required().StringVar(&c.input.Name) 38 c.RegisterFlag(argparser.StringFlagOpts{ 39 Name: argparser.FlagVersionName, 40 Description: argparser.FlagVersionDesc, 41 Dst: &c.serviceVersion.Value, 42 Required: true, 43 }) 44 45 // Optional flags 46 c.RegisterAutoCloneFlag(argparser.AutoCloneFlagOpts{ 47 Action: c.autoClone.Set, 48 Dst: &c.autoClone.Value, 49 }) 50 c.CmdClause.Flag("new-name", "New condition name").Action(c.newName.Set).StringVar(&c.newName.Value) 51 c.CmdClause.Flag("priority", "Condition priority").Action(c.priority.Set).IntVar(&c.priority.Value) 52 c.CmdClause.Flag("statement", "Condition statement").Action(c.statement.Set).StringVar(&c.statement.Value) 53 c.CmdClause.Flag("type", "Condition type").Action(c.conditionType.Set).StringVar(&c.conditionType.Value) 54 c.CmdClause.Flag("comment", "Condition comment").Action(c.comment.Set).StringVar(&c.comment.Value) 55 56 c.RegisterFlag(argparser.StringFlagOpts{ 57 Name: argparser.FlagServiceIDName, 58 Description: argparser.FlagServiceIDDesc, 59 Dst: &g.Manifest.Flag.ServiceID, 60 Short: 's', 61 }) 62 c.RegisterFlag(argparser.StringFlagOpts{ 63 Action: c.serviceName.Set, 64 Name: argparser.FlagServiceName, 65 Description: argparser.FlagServiceDesc, 66 Dst: &c.serviceName.Value, 67 }) 68 69 return &c 70 } 71 72 // Exec invokes the application logic for the command. 73 func (c *UpdateCommand) Exec(_ io.Reader, out io.Writer) error { 74 serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{ 75 AutoCloneFlag: c.autoClone, 76 APIClient: c.Globals.APIClient, 77 Manifest: *c.Globals.Manifest, 78 Out: out, 79 ServiceNameFlag: c.serviceName, 80 ServiceVersionFlag: c.serviceVersion, 81 VerboseMode: c.Globals.Flags.Verbose, 82 }) 83 if err != nil { 84 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 85 "Service ID": serviceID, 86 "Service Version": errors.ServiceVersion(serviceVersion), 87 }) 88 return err 89 } 90 91 c.input.ServiceID = serviceID 92 c.input.ServiceVersion = fastly.ToValue(serviceVersion.Number) 93 94 // If no argument are provided, error with useful message. 95 if !c.newName.WasSet && !c.priority.WasSet && !c.statement.WasSet && !c.conditionType.WasSet { 96 return fmt.Errorf("error parsing arguments: must provide either --new-name, --statement, --type or --priority to update condition") 97 } 98 99 if c.newName.WasSet { 100 c.input.Name = c.newName.Value 101 } 102 if c.priority.WasSet { 103 c.input.Priority = &c.priority.Value 104 } 105 if c.conditionType.WasSet { 106 c.input.Type = &c.conditionType.Value 107 } 108 if c.statement.WasSet { 109 c.input.Statement = &c.statement.Value 110 } 111 if c.comment.WasSet { 112 c.input.Statement = &c.comment.Value 113 } 114 115 r, err := c.Globals.APIClient.UpdateCondition(&c.input) 116 if err != nil { 117 c.Globals.ErrLog.AddWithContext(err, map[string]any{ 118 "Service ID": serviceID, 119 "Service Version": fastly.ToValue(serviceVersion.Number), 120 }) 121 return err 122 } 123 124 text.Success(out, 125 "Updated condition %s (service %s version %d)", 126 fastly.ToValue(r.Name), 127 fastly.ToValue(r.ServiceID), 128 fastly.ToValue(r.ServiceVersion), 129 ) 130 return nil 131 }