@@ -20,6 +20,7 @@ package commands
2020import (
2121 "errors"
2222 "fmt"
23+ "strings"
2324
2425 "github.com/apache/openwhisk-cli/wski18n"
2526 "github.com/apache/openwhisk-client-go/whisk"
@@ -286,6 +287,30 @@ var triggerDeleteCmd = &cobra.Command{
286287 err = configureFeed (qualifiedName .GetEntityName (), fullFeedName , getParameters (Flags .common .param , false , false ))
287288 if err != nil {
288289 whisk .Debug (whisk .DbgError , "configureFeed(%s, %s) failed: %s\n " , qualifiedName .GetEntityName (), fullFeedName , err )
290+
291+ // If the trigger feed does not exist, it's deleted! This error message will look like
292+ // "could not find trigger /NAMESPACE_ID/TRIGGER_NAME in the database"
293+ // OR if the feed action is not present, there's no way to clean up the feed
294+ // "The requested resource does not exist"
295+ // likewise, if the feed action has no code, there's no way to clean up the feed
296+ // "Missing main/no code to execute"
297+ if strings .Contains (err .Error (), "could not find trigger" ) {
298+ whisk .Debug (whisk .DbgWarn , "trigger feed is already deleted for trigger %s\n " , qualifiedName .GetEntityName ())
299+ } else if strings .Contains (err .Error (), "The requested resource does not exist" ) {
300+ whisk .Debug (whisk .DbgWarn , "trigger feed action '%s' does not exist\n " , fullFeedName )
301+ } else if strings .Contains (err .Error (), "no code to execute" ) {
302+ whisk .Debug (whisk .DbgWarn , "trigger feed action '%s' does not contain valid code\n " , fullFeedName )
303+ } else {
304+ errStr := wski18n .T ("Unable to delete trigger '{{.name}}': {{.err}}" ,
305+ map [string ]interface {}{"name" : qualifiedName .GetEntityName (), "err" : err })
306+
307+ if ! Flags .common .force {
308+ werr := whisk .MakeWskErrorFromWskError (errors .New (errStr ), err , whisk .EXIT_CODE_ERR_GENERAL , whisk .DISPLAY_MSG , whisk .NO_DISPLAY_USAGE )
309+ return werr
310+ } else {
311+ whisk .Debug (whisk .DbgInfo , "trigger delete is forced despite feed deletion failure\n " )
312+ }
313+ }
289314 }
290315
291316 Flags .common .param = origParams
@@ -370,7 +395,7 @@ func configureFeed(triggerName string, feedName string, parameters interface{})
370395 if err != nil {
371396 whisk .Debug (whisk .DbgError , "Invoke of action '%s' failed: %s\n " , feedName , err )
372397 errStr := wski18n .T (FEED_CONFIGURATION_FAILURE , map [string ]interface {}{"feedname" : feedName , "trigname" : triggerName , "err" : err })
373- err = whisk .MakeWskErrorFromWskError (errors .New (errStr ), err , whisk .EXIT_CODE_ERR_GENERAL , whisk .DISPLAY_MSG , whisk .DISPLAY_USAGE )
398+ err = whisk .MakeWskError (errors .New (errStr ), whisk .EXIT_CODE_ERR_GENERAL , whisk .DISPLAY_MSG , whisk .NO_DISPLAY_USAGE )
374399 } else {
375400 whisk .Debug (whisk .DbgInfo , "Successfully configured trigger feed via feed action '%s'\n " , feedName )
376401 }
@@ -405,6 +430,8 @@ func init() {
405430
406431 triggerGetCmd .Flags ().BoolVarP (& Flags .trigger .summary , "summary" , "s" , false , wski18n .T ("summarize trigger details; parameters with prefix \" *\" are bound" ))
407432
433+ triggerDeleteCmd .Flags ().BoolVarP (& Flags .common .force , "force" , "f" , false , wski18n .T ("force trigger deletion even when feed deletion fails" ))
434+
408435 triggerFireCmd .Flags ().StringSliceVarP (& Flags .common .param , "param" , "p" , []string {}, wski18n .T ("parameter values in `KEY VALUE` format" ))
409436 triggerFireCmd .Flags ().StringVarP (& Flags .common .paramFile , "param-file" , "P" , "" , wski18n .T ("`FILE` containing parameter values in JSON format" ))
410437
@@ -477,6 +504,7 @@ func (t *Trigger) Create(Client *whisk.Client, args []string) error {
477504 printFailedBlockingInvocationResponse (* feedName , false , res , err )
478505
479506 reason := wski18n .T (FEED_CONFIGURATION_FAILURE , map [string ]interface {}{"feedname" : feedName .GetFullQualifiedName (), "err" : err })
507+
480508 errStr := wski18n .T ("Unable to create trigger '{{.name}}': {{.err}}" ,
481509 map [string ]interface {}{"name" : trigger .Name , "err" : reason })
482510 werr := whisk .MakeWskErrorFromWskError (errors .New (errStr ), err , whisk .EXIT_CODE_ERR_GENERAL , whisk .DISPLAY_MSG , whisk .NO_DISPLAY_USAGE )
0 commit comments