It’s typical during maintenance windows that you would want to disable puppet, do your work, enable again and do a run. Or perhaps you don’t run puppet all the time, you just want to kick it off during your maintenance window. Doing this with ssh for loops is slow and annoying, here’s a way to target large sums of machines for these actions using mcollective.
Using mcollective‘s discovery features and a suitable agent this is really easy, I’ve written such an agent and made it available on the mcollective-plugins site.
You can see below a sample session with it. In all of the examples below we’re constraining it to hosts with the roles::dev_server puppet class using mcollective discovery. Not shown here is that you can get status as well as use the splay options provided by puppet, see the wiki page for details on that.
First we’ll make sure it’s enabled.
$ mc-puppetd --with-class roles::dev_server enable Determining the amount of hosts matching filter for 2 seconds .... 1 . Finished processing 1 / 1 hosts in 9.81 ms |
Now we’ll disable it
$ mc-puppetd --with-class roles::dev_server disable Determining the amount of hosts matching filter for 2 seconds .... 1 . Finished processing 1 / 1 hosts in 3252.13 ms |
We’ll attempt a runonce, this should fail because we just disabled the agent.
$ mc-puppetd --with-class roles::dev_server runonce -v Determining the amount of hosts matching filter for 2 seconds .... 1 dev1.your.net status=false Lock file exists ---- puppetd agent stats ---- Nodes: 1 / 1 Start Time: Sun Nov 29 23:02:30 +0000 2009 Discovery Time: 2006.38ms Agent Time: 47.62ms Total Time: 2054.00ms |
Let’s enable it and then try to run again.
$ mc-puppetd --with-class roles::dev_server enable Determining the amount of hosts matching filter for 2 seconds .... 1 . Finished processing 1 / 1 hosts in 9.81 ms $ mc-puppetd --with-class roles::dev_server runonce Determining the amount of hosts matching filter for 2 seconds .... 1 . Finished processing 1 / 1 hosts in 2801.82 ms |
I think this is a good way to orchestrate these type of maintenance window and I hope someone finds it useful.