Ever since I've done some of our migrations, I've used to put our services into maintenance
mode manually, by copying the nginx.conf file over the service and reloading nginx.
I have been toying with the idea of having a maintenance role for our services for some time,
but I never came up with a good way of doing this.
Yesterday I've drafted some stuff and now we have a maintenance role that can be "plugged" into
other roles. I have added the maintenance mode for most of our roles already, and basically
anything that has a nginx configuration can have this maintenance mode.
I've added some documentation to the README file. But basically all you need to do is to pass
-e maintenance=true to command line on the playbook run. If you don't pass it, and run the book
again, then the normal nginx configuration is applied and things go back as they were.
The next step is to add nginx configuration to allow the ip address of the person running the
book through, to be able to test things, but keep the maintenance mode for everyone else. Just don't know
yet how to glue the specifics.