in commands/trigger.go [708:791]
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
}