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  }