@@ -1177,11 +1177,18 @@ module.exports = (commandTree, prequire) => {
1177
1177
commandTree . listen ( `/wsk/${ syn } /fire` , doFire , { usage : usage . triggers . available . find ( ( { command} ) => command === 'fire' ) } )
1178
1178
} )
1179
1179
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
+ */
1180
1186
const removeTrigger = ( block , nextBlock , argv , modules ) => {
1181
1187
const name = argv [ argv . length - 1 ]
1182
1188
return ow . triggers . delete ( owOpts ( { name : name } ) )
1183
1189
. then ( trigger => {
1184
1190
const feedAnnotation = trigger . annotations && trigger . annotations . find ( kv => kv . key === 'feed' )
1191
+ debug ( 'trigger delete success' , trigger , feedAnnotation )
1185
1192
if ( feedAnnotation ) {
1186
1193
// special case of feed
1187
1194
debug ( 'delete feed' , trigger )
@@ -1193,10 +1200,100 @@ module.exports = (commandTree, prequire) => {
1193
1200
}
1194
1201
} ) . then ( ( ) => true )
1195
1202
}
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' ) } )
1200
1297
} )
1201
1298
1202
1299
// namespace.current
0 commit comments