I just did a 2.6.11 -> 2.7.12 migration with Puppet updating Puppet. The only real hitch I ran into was my puppet masters would update themselves but somehow Apache/Passenger didn't get restarted, so I had to do that by hand. Since I didn't start putting any 2.7 features into my manifests until *after* the 2.7 upgrade, the clients basically just upgraded themselves. And while I do have puppet running as a daemon, it's with no-schedule, and the "real" run happens out of cron. I think I'm actually going to kill off the daemon as it offers no benefit to me (and frequently wedged when I let it schedule updates). Doing it in cron allows me to meet externally imposed scheduling restrictions (no changes while production is running).
On Thu, Mar 29, 2012 at 10:42 PM, Ken Barber <k...@puppetlabs.com> wrote: > Hi Amos - its been a long long long time mate :-). > > > example for (1): Our vagrant (http://vagrantup.com/) dev base boxes > > still come with Puppet 2.6.3 while the manifest depends on Puppet 2.7 > > features. I can manually upgrade puppet manually (and that's what I do > > on dev), but when the time to deploy to production comes it > > practically means that I have to manually upgrade Puppet to 2.7 on all > > hosts before I push the change. > > You know - I've generally just used mcollective with the puppetral > plugin to do the Puppet agent RPM/deb upgrade in the case where the > client is the wrong version, and can now no longer interact with my > master: > > > http://projects.puppetlabs.com/projects/mcollective-plugins/wiki/AgentPackage > https://github.com/puppetlabs/mcollective-plugins/tree/master/agent/package > > At the end of the day, it uses the Puppet resource abstraction layer > anyway behind the scenes, only difference is that it is making the > change directly without the Puppet master interaction. But I can see > why you would want Puppet to just deal with this on its own. > > > 1. Provider exists but has to be updated. > > I could be mistaken about what I'm about to say, as I haven't > experimented with this new behaviour all that much. I wouldn't take my > word for it - so experiment and see :-). > > Surely the lazy evaluate solves this, I could be wrong - but if you > build up a relationship between the action that does the update - and > the provider that users that update then the update should occur > first. Then when the provider is evaluated lazily - all is well - it > has a new updated command/library/whatever? > > So: > > package { "daemontools": > ensure => "1.2.3", > } > Service { > require => Package["daemontools"] > } > > Is a rough way of doing it, but the default _is_ of course generic > here, and run stages may be a better solution - as its easier to have > your 'require's changed/overridden later on. (because defaults don't > stack with overrides). > > > 2. Puppet version update. > > Updating Puppet can be tricky, from an agent perspective if you run it > as a daemon there was a problem when updating to the recent Facter > 1.6.6 for example - as parts of Facter are loaded/evaluated > dynamically each (ie. the facts) - while others are loaded and cached > and never re-evaluated. This created a problem with I believe the ec2 > fact from memory - which started to use a library in facter/util/ec2 > (yes my fault). In that edge case you need to probably force a restart > of an agent after the package update really. Its crap I agree ... and > I'm all ears for a better solution/policy generally. > > From the master perspective - you can run into similar scenarios as > well. Generally speaking, the 'puppet managing puppet' case is always > hard mate. I always spend the most amount of time helping clients > 'manage' their puppetmaster with Puppet. And their are lots of > strategies here :-). > > What are you hitting that is problematic at the moment? Or what in > particular do you see? > > > 3. Configuration files - missing or have to be updated. > > Again, build up the dependencies using relationships in Puppet - as > per 1. Should work in a similar manner (from the description of the > new feature that is). > > > 4. Other types of configurations which have to take place, e.g. add a > > network link (e.g. VPN, proxy), > > Same again. > > > or make any other arbitrary change which can > > affect the rest of the puppet run (or future puppet runs). > > You might be getting into the 'manage the puppet case', again - > anything specific you expect? > > > What I'm thinking about is a generic way to say "OK, now I'm finished > doing > > all sorts of tweaks to the system, please start puppet and take these > tweaks > > into consideration". > > > > Is that possible? > > To be absolutely honest with you - up until now, this has been done > with pre-puppet stuff. That is - done with kickstart, jumpstart or > whatever you use to build the system. Of course, this then becomes > non-idempotent which makes Puppet less useful overall. > > Dude - try the lazy evaluate with the edge cases you've been seeing > and see how far you get - and lets discuss anything that still won't > work. We're really interested in solving this kind of chicken & egg > problems for good if we can. > > ken. > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Users" group. > To post to this group, send email to puppet-users@googlegroups.com. > To unsubscribe from this group, send email to > puppet-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/puppet-users?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.