I sometimes see comments in the cfengine community, stating that cf-runagent is somehow useless. In its detractors' opinion, cf-agent runs by default every 5 minutes, so when you request cf-runagent to run the agent, chances are that it already did it by itself.
Well, fellow cfengineers, I strongly disagree. To me, cf-runagent is a powerful gun in my toolbox. Here's why.
The real big advantage of using cf-runagent is that you can choose which hosts you want to trigger a run on, and you can set classes in the remote agent (assuming you have cf-serverd properly configured). Combining these two features together, it's trivial to trigger one-off actions remotely (e.g.: deploying a new version of a software), and to do that in a one-two-many fashion: try on one node; if an action works on one test machine, try it on two; if it still works, install on a few more until you're confident it will work across the board; then, trigger the action everywhere.
I used that technique when replacing puppet with cfengine. Using cf-runagent, I was able to remotely enable and disable any of the two and, when the time came, to remove puppet from the nodes altogether (software packages and configurations). Isn't that reason good enough to keep using, developing and improving cf-runagent? 😉
bundle agent SeasonGreetings { reports: December.(Day24|Day25):: "Merry Christmas!" ; }