# File lib/puppet/transaction.rb, line 635
635:     def trigger(resource)
636:         return nil unless targeted?(resource)
637:         callbacks = Hash.new { |hash, key| hash[key] = [] }
638: 
639:         trigged = []
640:         @targets[resource].each do |edge|
641:             # Collect all of the subs for each callback
642:             callbacks[edge.callback] << edge
643:         end
644: 
645:         callbacks.each do |callback, subs|
646:             noop = true
647:             subs.each do |edge|
648:                 if edge.event.nil? or ! edge.event.include?(:noop)
649:                     noop = false
650:                 end
651:             end
652: 
653:             if noop
654:                 resource.notice "Would have triggered %s from %s dependencies" %
655:                     [callback, subs.length]
656: 
657:                 # And then add an event for it.
658:                 return [Puppet::Transaction::Event.new(:noop, resource)]
659:             end
660: 
661:             if subs.length == 1 and subs[0].source == resource
662:                 message = "Refreshing self"
663:             else
664:                 message = "Triggering '%s' from %s dependencies" %
665:                     [callback, subs.length]
666:             end
667:             resource.notice message
668: 
669:             # At this point, just log failures, don't try to react
670:             # to them in any way.
671:             begin
672:                 resource.send(callback)
673:                 @resourcemetrics[:restarted] += 1
674:             rescue => detail
675:                 resource.err "Failed to call %s on %s: %s" %
676:                     [callback, resource, detail]
677: 
678:                 @resourcemetrics[:failed_restarts] += 1
679: 
680:                 if Puppet[:trace]
681:                     puts detail.backtrace
682:                 end
683:             end
684: 
685:             # And then add an event for it.
686:             trigged << Puppet::Transaction::Event.new(:triggered, resource)
687: 
688:             triggered(resource, callback)
689:         end
690: 
691:         if trigged.empty?
692:             return nil
693:         else
694:             return trigged
695:         end
696:     end