dubee commented on a change in pull request #479: Trigger parameter issue
URL: https://github.com/apache/openwhisk-cli/pull/479#discussion_r383479086
 
 

 ##########
 File path: commands/trigger.go
 ##########
 @@ -601,3 +703,110 @@ func (t *Trigger) Update(Client *whisk.Client, args 
[]string) error {
 
        return nil
 }
+
+//UpdateExtendedVersion only executes when users indicate to update triggers 
with --feed-param
+//or --trigger-param flags.
+func UpdateExtendedVersion(Client *whisk.Client, args []string, retTrigger 
*whisk.Trigger) error {
+       var fullFeedName string
+       var qualifiedName = new(QualifiedName)
+       var err error
+
+       if qualifiedName, err = NewQualifiedName(args[0]); err != nil {
+               return NewQualifiedNameError(args[0], err)
+       }
+
+       whisk.Debug(whisk.DbgInfo, "Parsing parameters: %#v\n", 
Flags.trigger.triggerParam)
+       triggerParameters, err := 
getJSONFromStrings(Flags.trigger.triggerParam, true)
+       if err != nil {
+               whisk.Debug(whisk.DbgError, "getJSONFromStrings(%#v, true) 
failed: %s\n", Flags.common.param, err)
+               errStr := wski18n.T("Invalid parameter argument '{{.param}}': 
{{.err}}",
+                       map[string]interface{}{"param": fmt.Sprintf("%#v", 
Flags.common.param), "err": err})
+               werr := whisk.MakeWskErrorFromWskError(errors.New(errStr), err, 
whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
+               return werr
+       }
+
+       whisk.Debug(whisk.DbgInfo, "Parsing annotations: %#v\n", 
Flags.common.annotation)
+       annotations, err := getJSONFromStrings(Flags.common.annotation, true)
+       if err != nil {
+               whisk.Debug(whisk.DbgError, "getJSONFromStrings(%#v, true) 
failed: %s\n", Flags.common.annotation, err)
+               errStr := wski18n.T("Invalid annotation argument 
'{{.annotation}}': {{.err}}",
+                       map[string]interface{}{"annotation": fmt.Sprintf("%#v", 
Flags.common.annotation), "err": err})
+               werr := whisk.MakeWskErrorFromWskError(errors.New(errStr), err, 
whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
+               return werr
+       }
+
+       trigger := &whisk.Trigger{
+               Name:        qualifiedName.GetEntityName(),
+               Parameters:  triggerParameters.(whisk.KeyValueArr),
+               Annotations: annotations.(whisk.KeyValueArr),
+       }
+
+       // Get full feed name from trigger get request as it is needed to get 
the feed
+       if retTrigger != nil && retTrigger.Annotations != nil {
+               fullFeedName = getValueString(retTrigger.Annotations, "feed")
+       }
+
+       _, _, err = Client.Triggers.Insert(trigger, true)
+       if err != nil {
+               whisk.Debug(whisk.DbgError, "Client.Triggers.Insert(%+v,true) 
failed: %s\n", trigger, err)
+               errStr := wski18n.T("Unable to update trigger '{{.name}}': 
{{.err}}",
+                       map[string]interface{}{"name": trigger.Name, "err": 
err})
+               werr := whisk.MakeWskErrorFromWskError(errors.New(errStr), err, 
whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
+               return werr
+       }
+       //if there is no feed attached to this trigger
+       if len(fullFeedName) < 1 {
+               //but user indicate feed parameter change, we issue error 
message.
+               if len(Flags.trigger.feedParam) > 0 {
+                       whisk.Debug(whisk.DbgError, "trigger %+v is found but 
it does not contain a feed. \n", trigger)
+                       err := errors.New("this trigger does not contain a 
feed")
+                       errStr := wski18n.T(FEED_CONFIGURATION_FAILURE, 
map[string]interface{}{"feedname": qualifiedName.GetEntityName(), "err": err})
+                       werr := 
whisk.MakeWskErrorFromWskError(errors.New(errStr), err, 
whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
+                       return werr
+               }
+       }
+
+       if len(fullFeedName) > 0 && 
feedParameterChanged(Flags.trigger.feedParam) {
+               //if there is feed, we invoke the action to configure the feed 
regardless any changes on feed parameters
+               fullTriggerName := fmt.Sprintf("/%s/%s", 
qualifiedName.GetNamespace(), qualifiedName.GetEntityName())
+               Flags.trigger.feedParam = append(Flags.trigger.feedParam, 
getFormattedJSON(FEED_LIFECYCLE_EVENT, FEED_UPDATE))
+               Flags.trigger.feedParam = append(Flags.trigger.feedParam, 
getFormattedJSON(FEED_TRIGGER_NAME, fullTriggerName))
+               Flags.trigger.feedParam = append(Flags.trigger.feedParam, 
getFormattedJSON(FEED_AUTH_KEY, Client.Config.AuthToken))
+
+               // Invoke the specified feed action to configure the trigger 
feed
+               err = configureFeed(qualifiedName.GetEntityName(), 
fullFeedName, getParameters(Flags.trigger.feedParam, false, false))
+               if err != nil {
+                       whisk.Debug(whisk.DbgError, "configureFeed(%s, %s) 
failed: %s\n", qualifiedName.GetEntityName(), Flags.common.feed, err)
+                       errStr := wski18n.T("Unable to create trigger 
'{{.name}}': {{.err}}",
+                               map[string]interface{}{"name": 
qualifiedName.GetEntityName(), "err": err})
+                       werr := 
whisk.MakeWskErrorFromWskError(errors.New(errStr), err, 
whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
+                       return werr
+               }
+       }
+
+       fmt.Fprintf(color.Output,
+               wski18n.T("{{.ok}} updated trigger {{.name}}\n",
+                       map[string]interface{}{"ok": color.GreenString("ok:"), 
"name": boldString(qualifiedName.GetEntityName())}))
+
+       return nil
+}
+
+func feedParameterChanged(triggerParam []string) bool {
+       return len(triggerParam) > 0
+}
+
+//if users are 1. creating a trigger without any feed or parameters
+//             2. creating a trigger using --param flag
+//then we use the old way to create the trigger.
+func userIndicatesToUseOldTriggerCommand() bool {
+       return len(Flags.common.param) > 0 || (len(Flags.trigger.feedParam) == 
0 && len(Flags.common.param) == 0 && len(Flags.trigger.triggerParam) == 0)
+}
+
+func userIssuedNewTriggerCmd() error {
+       if len(Flags.trigger.feedParam) > 0 || len(Flags.trigger.triggerParam) 
> 0 {
+               whisk.Debug(whisk.DbgError, "User tries to mix use of --param 
with --feed-param and --trigger-param")
+               errStr := wski18n.T("Incorrect usage. Cannot combine 
--feed-param or --trigger-param flag with --param flag")
 
 Review comment:
   Need to say `--param-file` to this list. Is this error message exported to 
wski18n?

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to