github.com/fnproject/cli@v0.0.0-20240508150455-e5d88bd86117/objects/trigger/commands.go (about) 1 /* 2 * Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package trigger 18 19 import ( 20 "encoding/json" 21 "fmt" 22 23 "github.com/fnproject/cli/client" 24 "github.com/fnproject/cli/objects/app" 25 "github.com/fnproject/cli/objects/fn" 26 "github.com/urfave/cli" 27 ) 28 29 // Create trigger command 30 func Create() cli.Command { 31 t := triggersCmd{} 32 return cli.Command{ 33 Name: "trigger", 34 ShortName: "trig", 35 Category: "MANAGEMENT COMMAND", 36 Aliases: []string{"t", "tr"}, 37 Usage: "Create a new trigger", 38 Description: "This command creates a new trigger.", 39 Before: func(ctx *cli.Context) error { 40 var err error 41 t.provider, err = client.CurrentProvider() 42 if err != nil { 43 return err 44 } 45 t.client = t.provider.APIClientv2() 46 return nil 47 }, 48 ArgsUsage: "<app-name> <function-name> <trigger-name>", 49 Action: t.create, 50 Flags: TriggerFlags, 51 BashComplete: func(c *cli.Context) { 52 switch len(c.Args()) { 53 case 0: 54 app.BashCompleteApps(c) 55 case 1: 56 fn.BashCompleteFns(c) 57 } 58 }, 59 } 60 } 61 62 // List trigger command 63 func List() cli.Command { 64 t := triggersCmd{} 65 return cli.Command{ 66 Name: "triggers", 67 ShortName: "trigs", 68 Category: "MANAGEMENT COMMAND", 69 Description: "This command returns a list of all created triggers for an 'app' or for a specific 'function' of an application.", 70 Aliases: []string{"t", "tr"}, 71 Usage: "List all triggers", 72 Before: func(ctx *cli.Context) error { 73 var err error 74 t.provider, err = client.CurrentProvider() 75 if err != nil { 76 return err 77 } 78 t.client = t.provider.APIClientv2() 79 return nil 80 }, 81 ArgsUsage: "<app-name> [function-name]", 82 Action: t.list, 83 Flags: []cli.Flag{ 84 cli.StringFlag{ 85 Name: "cursor", 86 Usage: "pagination cursor", 87 }, 88 cli.Int64Flag{ 89 Name: "n", 90 Usage: "number of triggers to return", 91 Value: int64(100), 92 }, 93 }, 94 BashComplete: func(c *cli.Context) { 95 switch len(c.Args()) { 96 case 0: 97 app.BashCompleteApps(c) 98 case 1: 99 fn.BashCompleteFns(c) 100 } 101 }, 102 } 103 } 104 105 // Update trigger command 106 func Update() cli.Command { 107 t := triggersCmd{} 108 return cli.Command{ 109 Name: "trigger", 110 ShortName: "trig", 111 Category: "MANAGEMENT COMMAND", 112 Description: "This command updates a created trigger.", 113 Aliases: []string{"t", "tr"}, 114 Usage: "Update a trigger", 115 Before: func(ctx *cli.Context) error { 116 var err error 117 t.provider, err = client.CurrentProvider() 118 if err != nil { 119 return err 120 } 121 t.client = t.provider.APIClientv2() 122 return nil 123 }, 124 ArgsUsage: "<app-name> <function-name> <trigger-name>", 125 Action: t.update, 126 Flags: []cli.Flag{ 127 cli.StringSliceFlag{ 128 Name: "annotation", 129 Usage: "trigger annotations", 130 }, 131 }, 132 BashComplete: func(c *cli.Context) { 133 switch len(c.Args()) { 134 case 0: 135 app.BashCompleteApps(c) 136 case 1: 137 fn.BashCompleteFns(c) 138 case 2: 139 BashCompleteTriggers(c) 140 } 141 }, 142 } 143 } 144 145 // Delete trigger command 146 func Delete() cli.Command { 147 t := triggersCmd{} 148 return cli.Command{ 149 Name: "trigger", 150 ShortName: "trig", 151 Category: "MANAGEMENT COMMAND", 152 Description: "This command deletes a created trigger.", 153 Aliases: []string{"t", "tr"}, 154 Usage: "Delete a trigger", 155 Before: func(ctx *cli.Context) error { 156 var err error 157 t.provider, err = client.CurrentProvider() 158 if err != nil { 159 return err 160 } 161 t.client = t.provider.APIClientv2() 162 return nil 163 }, 164 ArgsUsage: "<app-name> <function-name> <trigger-name>", 165 Action: t.delete, 166 BashComplete: func(c *cli.Context) { 167 switch len(c.Args()) { 168 case 0: 169 app.BashCompleteApps(c) 170 case 1: 171 fn.BashCompleteFns(c) 172 case 2: 173 BashCompleteTriggers(c) 174 } 175 }, 176 } 177 } 178 179 // Inspect trigger command 180 func Inspect() cli.Command { 181 t := triggersCmd{} 182 return cli.Command{ 183 Name: "trigger", 184 ShortName: "trig", 185 Category: "MANAGEMENT COMMAND", 186 Aliases: []string{"t", "tr"}, 187 Description: "This command gets one of all trigger properties.", 188 Usage: "Retrieve one or all trigger properties", 189 Flags: []cli.Flag{ 190 cli.BoolFlag{ 191 Name: "endpoint", 192 Usage: "Output the trigger HTTP endpoint if set", 193 }, 194 }, 195 Before: func(ctx *cli.Context) error { 196 var err error 197 t.provider, err = client.CurrentProvider() 198 if err != nil { 199 return err 200 } 201 t.client = t.provider.APIClientv2() 202 return nil 203 }, 204 ArgsUsage: "<app-name> <function-name> <trigger-name> [property[.key]]", 205 Action: t.inspect, 206 BashComplete: func(c *cli.Context) { 207 switch len(c.Args()) { 208 case 0: 209 app.BashCompleteApps(c) 210 case 1: 211 fn.BashCompleteFns(c) 212 case 2: 213 BashCompleteTriggers(c) 214 case 3: 215 trigg, err := GetTriggerByAppFnAndTriggerNames(c.Args()[0], c.Args()[1], c.Args()[2]) 216 if err != nil { 217 return 218 } 219 data, err := json.Marshal(trigg) 220 if err != nil { 221 return 222 } 223 var inspect map[string]interface{} 224 err = json.Unmarshal(data, &inspect) 225 if err != nil { 226 return 227 } 228 for key := range inspect { 229 fmt.Println(key) 230 } 231 } 232 }, 233 } 234 }