@@ -1177,11 +1177,18 @@ module.exports = (commandTree, prequire) => {
11771177 commandTree . listen ( `/wsk/${ syn } /fire` , doFire , { usage : usage . triggers . available . find ( ( { command} ) => command === 'fire' ) } )
11781178 } )
11791179
1180+ /**
1181+ * A request to delete a trigger. If this trigger has an
1182+ * associated feed, we are responsible for invoking the DELETE
1183+ * lifecycle event on the feed.
1184+ *
1185+ */
11801186 const removeTrigger = ( block , nextBlock , argv , modules ) => {
11811187 const name = argv [ argv . length - 1 ]
11821188 return ow . triggers . delete ( owOpts ( { name : name } ) )
11831189 . then ( trigger => {
11841190 const feedAnnotation = trigger . annotations && trigger . annotations . find ( kv => kv . key === 'feed' )
1191+ debug ( 'trigger delete success' , trigger , feedAnnotation )
11851192 if ( feedAnnotation ) {
11861193 // special case of feed
11871194 debug ( 'delete feed' , trigger )
@@ -1193,10 +1200,100 @@ module.exports = (commandTree, prequire) => {
11931200 }
11941201 } ) . then ( ( ) => true )
11951202 }
1196- synonyms . verbs . delete . forEach ( rm => {
1197- synonyms . entities . triggers . forEach ( syn => {
1198- commandTree . listen ( `/wsk/${ syn } /${ rm } ` , removeTrigger , { docs : 'Remove an OpenWhisk trigger' } )
1199- } )
1203+ synonyms . entities . triggers . forEach ( syn => {
1204+ commandTree . listen ( `/wsk/${ syn } /delete` ,
1205+ removeTrigger ,
1206+ { usage : usage . triggers . available . find ( ( { command} ) => command === 'delete' ) } )
1207+ } )
1208+
1209+ /**
1210+ * As per the delete trigger comment for removeTrigger, we
1211+ * similarly must invoke the CREATE lifecycle event for feed
1212+ * creation
1213+ *
1214+ */
1215+ const createTrigger = ( _1 , _2 , _3 , _4 , _5 , _6 , argv , options ) => {
1216+ const name = argv [ argv . length - 1 ] ,
1217+ triggerSpec = owOpts ( { name } ) ,
1218+ paramsArray = [ ] ,
1219+ params = { }
1220+
1221+ if ( options . param ) {
1222+ for ( let idx = 0 ; idx < options . param . length ; idx += 2 ) {
1223+ const key = options . param [ idx ]
1224+ let value = options . param [ idx + 1 ]
1225+
1226+ try {
1227+ value = JSON . parse ( options . param [ idx + 1 ] )
1228+ } catch ( err ) {
1229+ }
1230+
1231+ params [ key ] = value
1232+ paramsArray . push ( { key, value } )
1233+ }
1234+ }
1235+
1236+ if ( options . feed ) {
1237+ // add the feed annotation
1238+
1239+ const annotation = { key : 'feed' , value : options . feed }
1240+ debug ( 'adding feed annotation' , annotation )
1241+
1242+ if ( ! triggerSpec . trigger ) {
1243+ triggerSpec . trigger = { }
1244+ }
1245+ if ( ! triggerSpec . trigger . annotations ) {
1246+ triggerSpec . trigger . annotations = [ ]
1247+ }
1248+
1249+ triggerSpec . trigger . annotations . push ( annotation )
1250+ } else {
1251+ if ( ! triggerSpec . trigger ) {
1252+ triggerSpec . trigger = { }
1253+ }
1254+ if ( ! triggerSpec . trigger . parameters ) {
1255+ triggerSpec . trigger . parameters = paramsArray
1256+ } else {
1257+ triggerSpec . trigger . parameters = triggerSpec . trigger . parameters . concat ( paramsArray )
1258+ }
1259+ }
1260+
1261+ debug ( 'creating trigger' , triggerSpec )
1262+ return ow . triggers . create ( triggerSpec )
1263+ . then ( trigger => {
1264+ /** remove trigger if something bad happened instantiating the feed */
1265+ const removeTrigger = err => {
1266+ console . error ( err )
1267+ ow . triggers . delete ( owOpts ( { name } ) )
1268+ throw new Error ( 'Internal Error' )
1269+ }
1270+
1271+ if ( options . feed ) {
1272+ try {
1273+ // special case of feed: invoke CREATE lifecycle
1274+ const feedName = options . feed
1275+
1276+ debug ( 'create feed' , feedName , name , params )
1277+ return ow . feeds . create ( owOpts ( { feedName, trigger : name , params } ) )
1278+ . then ( ( ) => trigger ) // return the trigger, not the result of invoking the feed lifecycle
1279+ . catch ( removeTrigger ) // catastrophe, clean up after ourselves
1280+
1281+ } catch ( err ) {
1282+ // make sure to clean up after ourselves in case of catastrophe
1283+ return removeTrigger ( err )
1284+ }
1285+
1286+ } else {
1287+ // otherwise, this is a normal trigger, not a feed
1288+ return trigger
1289+ }
1290+ } )
1291+ . then ( addPrettyType ( 'triggers' , 'create' , name ) )
1292+ }
1293+ synonyms . entities . triggers . forEach ( syn => {
1294+ commandTree . listen ( `/wsk/${ syn } /create` ,
1295+ createTrigger ,
1296+ { usage : usage . triggers . available . find ( ( { command} ) => command === 'create' ) } )
12001297 } )
12011298
12021299 // namespace.current
0 commit comments