Hi Ken,
Your site and your practices (and the problems that go with it) are
similar to our own. I've answered by describing what we think the
way forward for Puppet is for us, hopefully you find it helpful and
get some ideas :-)
I feel your pain when you say there are changes languishing in Dev
for too long that get inadvertently pushed out to other
environments. Once I accidentally rolled out a whole set of 'work in
progress' changes that a colleague of mine was committing and
pushing to one environment (we use Git) and I cut a new tag and
pushed a whole heap of these unfinished changes to the next
environment up the chain.
After this I realised our current model really wasn't going to work
in the long run: this happened with only two Admins working on
Puppet in the last week when we employ almost a dozen who could
potentially make the same mistakes. While we're still stuck in this
model now, we think the way forward for us is to take a page out of
our Development Team's book and set up a fully fledged CI
environment for Puppet. It would be even more awesome if our
Developer's CI was also our CI - but considering they've got half a
million unit tests and we've got zero, we've got a long way to go.
How this plays out practically is that all our admins commit into
our Puppet repository and those changes start getting applied
immediately to our Dev/CI servers and they start getting tested
against immediately (hence the unit tests). Problems will always
occur, but they will occur almost immediately and we'll have
feedback to fix it.
In response to your reply to Trevor:
Can you explain how you see maintaining three slightly different
environments with one Puppet Master and a firewall is more difficult
than three individual Puppet Masters? You've already got all the
differences written down in your existing manifests - different IP
addresses for different services, different users/passwords, etc,
maybe slightly different packages, or am I missing something?
Without knowing more about your site (so hopefully this suggestion
is relevant), here's what I would do: I would slowly start to
encourage people to separate out your data from your code using a
shared repository. Take a look at Hiera if you haven't already, I'd
recommend using it but other data sources would suffice as well.
So right now you've got your Dev data in your Dev modules, your
Staging data in your Staging modules, etc. Take one of your modules
(lets say DNS, it's easy), and put it's data (DNS server IP
addresses) into a shared data store that each of your Dev, Staging
and Prod Puppet Masters can access. Then change your Dev module to
remove the data and pull it from the data store. Then do Staging,
the same data store but different information, then finally Prod. If
your three separate DNS modules don't look *exactly* the same now,
you've done something wrong. Do that for every module and you've now
got no reason not to run a single Puppet Master. The changes would
take some time to do every module but if you encourage every admin
to make a small step forward each change they make, eventually you'd
get there.
What kind of changes are you making 5-10 times a day? The same
changes for the same people? We have a situation here where our
Developers sometimes need to change the configuration of our
application every hour. Right now we don't manage those systems with
Puppet because making that many changes of the same thing over and
over is a monumental waste of our time.
I hack on Hiera a little bit to get some extra functionality from
it, mainly the ability to tier my data sources. What I plan on doing
is to have a low priority data store that's managed by Developers.
Since all our modules will (eventually) look to the data stores to
configure themselves, our Developers will be able to make their own
system configuration changes. Our Admins control the modules (we
write *how* it's done) and the higher priority data stores so we can
override whatever the Developers enter if need be (we don't want a
Developer changing the root password now). The Developers then
trigger their own Puppet run and they've reconfigured the system
using the same method (same Puppet modules) as Production so I don't
have to worry about things "being done differently in Dev".
-Luke
--
Luke Bigum
Information Systems
Ph: +44 (0) 20 3192 2520
luke....@lmax.com | http://www.lmax.com
LMAX, Yellow Building, 1A Nicholas Road, London W11 4AN
FX and CFDs are leveraged products that can result in losses exceeding
your deposit. They are not suitable for everyone so please ensure you
fully understand the risks involved. The information in this email is not
directed at residents of the United States of America or any other
jurisdiction where trading in CFDs and/or FX is restricted or prohibited
by local laws or regulations.
The information in this email and any attachment is confidential and is
intended only for the named recipient(s). The email may not be disclosed
or used by any person other than the addressee, nor may it be copied in
any way. If you are not the intended recipient please notify the sender
immediately and delete any copies of this message. Any unauthorised
copying, disclosure or distribution of the material in this e-mail is
strictly forbidden.
LMAX operates a multilateral trading facility. Authorised and regulated
by the Financial Services Authority (firm registration number 509778) and
is registered in England and Wales (number 06505809).
Our registered address is Yellow Building, 1A Nicholas Road, London, W11
4AN.