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.

Reply via email to