github.com/fnproject/cli@v0.0.0-20240508150455-e5d88bd86117/objects/fn/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 fn 18 19 import ( 20 "encoding/json" 21 "fmt" 22 23 client "github.com/fnproject/cli/client" 24 "github.com/fnproject/cli/objects/app" 25 "github.com/urfave/cli" 26 ) 27 28 // Create function command 29 func Create() cli.Command { 30 f := fnsCmd{} 31 return cli.Command{ 32 Name: "function", 33 ShortName: "func", 34 Aliases: []string{"f", "fn"}, 35 Category: "MANAGEMENT COMMAND", 36 Usage: "Create a function within an application", 37 Description: "This command creates a new function within an application.", 38 Before: func(c *cli.Context) error { 39 var err error 40 f.provider, err = client.CurrentProvider() 41 if err != nil { 42 return err 43 } 44 f.client = f.provider.APIClientv2() 45 return nil 46 }, 47 ArgsUsage: "<app-name> <function-name> <image>", 48 Action: f.create, 49 Flags: FnFlags, 50 BashComplete: func(c *cli.Context) { 51 if len(c.Args()) == 0 { 52 app.BashCompleteApps(c) 53 } 54 }, 55 } 56 } 57 58 // List functions command 59 func List() cli.Command { 60 f := fnsCmd{} 61 return cli.Command{ 62 Name: "functions", 63 ShortName: "funcs", 64 Aliases: []string{"f", "fn"}, 65 Usage: "List functions for an application", 66 Category: "MANAGEMENT COMMAND", 67 Description: "This command returns a list of functions for a created application.", 68 Before: func(c *cli.Context) error { 69 var err error 70 f.provider, err = client.CurrentProvider() 71 if err != nil { 72 return err 73 } 74 f.client = f.provider.APIClientv2() 75 return nil 76 }, 77 ArgsUsage: "<app-name>", 78 Action: f.list, 79 Flags: []cli.Flag{ 80 cli.StringFlag{ 81 Name: "cursor", 82 Usage: "pagination cursor", 83 }, 84 cli.Int64Flag{ 85 Name: "n", 86 Usage: "number of functions to return", 87 Value: int64(100), 88 }, 89 cli.StringFlag{ 90 Name: "output", 91 Usage: "Output format (json)", 92 Value: "", 93 }, 94 }, 95 BashComplete: func(c *cli.Context) { 96 switch len(c.Args()) { 97 case 0: 98 app.BashCompleteApps(c) 99 } 100 }, 101 } 102 } 103 104 // Delete function command 105 func Delete() cli.Command { 106 f := fnsCmd{} 107 return cli.Command{ 108 Name: "function", 109 ShortName: "func", 110 Aliases: []string{"f", "fn"}, 111 Category: "MANAGEMENT COMMAND", 112 Description: "This command deletes an existing function from an application.", 113 Usage: "Delete a function from an application", 114 Before: func(c *cli.Context) error { 115 var err error 116 f.provider, err = client.CurrentProvider() 117 if err != nil { 118 return err 119 } 120 f.client = f.provider.APIClientv2() 121 return nil 122 }, 123 ArgsUsage: "<app-name> <function-name>", 124 Action: f.delete, 125 BashComplete: func(c *cli.Context) { 126 switch len(c.Args()) { 127 case 0: 128 app.BashCompleteApps(c) 129 case 1: 130 BashCompleteFns(c) 131 } 132 }, 133 Flags: []cli.Flag{ 134 cli.BoolFlag{ 135 Name: "force, f", 136 Usage: "Forces this delete (you will not be asked if you wish to continue with the delete)", 137 }, 138 cli.BoolFlag{ 139 Name: "recursive, r", 140 Usage: "Delete this function and all associated resources (can fail part way through execution after deleting some resources without the ability to undo)", 141 }, 142 }, 143 } 144 } 145 146 // Inspect function command 147 func Inspect() cli.Command { 148 f := fnsCmd{} 149 return cli.Command{ 150 Name: "function", 151 ShortName: "func", 152 Aliases: []string{"f", "fn"}, 153 Category: "MANAGEMENT COMMAND", 154 Usage: "Retrieve one or all properties for a function", 155 Description: "This command inspects properties of a function.", 156 Before: func(c *cli.Context) error { 157 var err error 158 f.provider, err = client.CurrentProvider() 159 if err != nil { 160 return err 161 } 162 f.client = f.provider.APIClientv2() 163 return nil 164 }, 165 Flags: []cli.Flag{ 166 cli.BoolFlag{ 167 Name: "endpoint", 168 Usage: "Output the function invoke endpoint if set", 169 }, 170 }, 171 ArgsUsage: "<app-name> <function-name> [property[.key]]", 172 Action: f.inspect, 173 BashComplete: func(c *cli.Context) { 174 switch len(c.Args()) { 175 case 0: 176 app.BashCompleteApps(c) 177 case 1: 178 BashCompleteFns(c) 179 case 2: 180 fn, err := getFnByAppAndFnName(c.Args()[0], c.Args()[1]) 181 if err != nil { 182 return 183 } 184 data, err := json.Marshal(fn) 185 if err != nil { 186 return 187 } 188 var inspect map[string]interface{} 189 err = json.Unmarshal(data, &inspect) 190 if err != nil { 191 return 192 } 193 for key := range inspect { 194 fmt.Println(key) 195 } 196 } 197 }, 198 } 199 } 200 201 // Update function command 202 func Update() cli.Command { 203 f := fnsCmd{} 204 return cli.Command{ 205 Name: "function", 206 ShortName: "func", 207 Aliases: []string{"f", "fn"}, 208 Category: "MANAGEMENT COMMAND", 209 Usage: "Update a function in application", 210 Description: "This command updates a function in an application.", 211 Before: func(c *cli.Context) error { 212 var err error 213 f.provider, err = client.CurrentProvider() 214 if err != nil { 215 return err 216 } 217 f.client = f.provider.APIClientv2() 218 return nil 219 }, 220 ArgsUsage: "<app-name> <function-name>", 221 Action: f.update, 222 Flags: updateFnFlags, 223 BashComplete: func(c *cli.Context) { 224 switch len(c.Args()) { 225 case 0: 226 app.BashCompleteApps(c) 227 case 1: 228 BashCompleteFns(c) 229 } 230 }, 231 } 232 } 233 234 // GetConfig for function command 235 func GetConfig() cli.Command { 236 f := fnsCmd{} 237 return cli.Command{ 238 Name: "function", 239 ShortName: "func", 240 Aliases: []string{"f", "fn"}, 241 Category: "MANAGEMENT COMMAND", 242 Usage: "Inspect configuration key for this function", 243 Description: "This command gets the configuration of a specific function for an application.", 244 Before: func(c *cli.Context) error { 245 var err error 246 f.provider, err = client.CurrentProvider() 247 if err != nil { 248 return err 249 } 250 f.client = f.provider.APIClientv2() 251 return nil 252 }, 253 ArgsUsage: "<app-name> <function-name> <key>", 254 Action: f.getConfig, 255 BashComplete: func(c *cli.Context) { 256 switch len(c.Args()) { 257 case 0: 258 app.BashCompleteApps(c) 259 case 1: 260 BashCompleteFns(c) 261 case 2: 262 fn, err := getFnByAppAndFnName(c.Args()[0], c.Args()[1]) 263 if err != nil { 264 return 265 } 266 for key := range fn.Config { 267 fmt.Println(key) 268 } 269 } 270 }, 271 } 272 } 273 274 // SetConfig for function command 275 func SetConfig() cli.Command { 276 f := fnsCmd{} 277 return cli.Command{ 278 Name: "function", 279 ShortName: "func", 280 Aliases: []string{"f", "fn"}, 281 Category: "MANAGEMENT COMMAND", 282 Usage: "Store a configuration key for this function", 283 Description: "This command sets the configuration of a specific function for an application.", 284 Before: func(c *cli.Context) error { 285 var err error 286 f.provider, err = client.CurrentProvider() 287 if err != nil { 288 return err 289 } 290 f.client = f.provider.APIClientv2() 291 return nil 292 }, 293 ArgsUsage: "<app-name> <function-name> <key> <value>", 294 Action: f.setConfig, 295 BashComplete: func(c *cli.Context) { 296 switch len(c.Args()) { 297 case 0: 298 app.BashCompleteApps(c) 299 case 1: 300 BashCompleteFns(c) 301 } 302 }, 303 } 304 } 305 306 // ListConfig for function command 307 func ListConfig() cli.Command { 308 f := fnsCmd{} 309 return cli.Command{ 310 Name: "function", 311 ShortName: "func", 312 Aliases: []string{"f", "fn"}, 313 Category: "MANAGEMENT COMMAND", 314 Usage: "List configuration key/value pairs for this function", 315 Description: "This command returns a list of configurations for a specific function.", 316 Before: func(c *cli.Context) error { 317 var err error 318 f.provider, err = client.CurrentProvider() 319 if err != nil { 320 return err 321 } 322 f.client = f.provider.APIClientv2() 323 return nil 324 }, 325 ArgsUsage: "<app-name> <function-name>", 326 Action: f.listConfig, 327 BashComplete: func(c *cli.Context) { 328 switch len(c.Args()) { 329 case 0: 330 app.BashCompleteApps(c) 331 case 1: 332 BashCompleteFns(c) 333 } 334 }, 335 } 336 } 337 338 // UnsetConfig for function command 339 func UnsetConfig() cli.Command { 340 f := fnsCmd{} 341 return cli.Command{ 342 Name: "function", 343 ShortName: "func", 344 Aliases: []string{"f", "fn"}, 345 Category: "MANAGEMENT COMMAND", 346 Usage: "Remove a configuration key for this function", 347 Description: "This command removes a configuration of a specific function.", 348 Before: func(c *cli.Context) error { 349 var err error 350 f.provider, err = client.CurrentProvider() 351 if err != nil { 352 return err 353 } 354 f.client = f.provider.APIClientv2() 355 return nil 356 }, 357 ArgsUsage: "<app-name> <function-name> <key>", 358 Action: f.unsetConfig, 359 BashComplete: func(c *cli.Context) { 360 switch len(c.Args()) { 361 case 0: 362 app.BashCompleteApps(c) 363 case 1: 364 BashCompleteFns(c) 365 case 2: 366 fn, err := getFnByAppAndFnName(c.Args()[0], c.Args()[1]) 367 if err != nil { 368 return 369 } 370 for key := range fn.Config { 371 fmt.Println(key) 372 } 373 } 374 }, 375 } 376 }