Hi all,
I''ve just published the long-awaited new release of Puppet. Yes, I
accidentally skipped 0.21.0; oops.
Important features in this new release are:
- Graphing
Puppet now uses the GRATR[1] library to do all of the internals of
managing relationships between resources. This gives Puppet a lot of
functionality internally, but it also makes it possible to produce
simple graphs of the various parts of your configurations (see the
documentation of the --graph parameter).
- Resource Purging
Puppet now includes a ''resources'' type[2] that can manage all
resources of a given type. At this point, the type is very limited,
but I expect we''ll add functionality over time. Currently, you can
use it to purge unmanaged resources:
resources { user: purge => true }
Internally, purging works like this: Puppet calls ''list'' on
the
resource class being managed (which means it won''t work for
unlistable resource types like ''exec''). It then checks
whether each
of the resulting resources is managed (where "managed" is defined by
whether any ''should'' values have been specified for any states
--
practically, if you mention a resource in your configuration it''s
considered to be managed). If the resource is unmanaged, then Puppet
sets "ensure" to "absent" -- this means you can only purge
resource
types that accept ''ensure'' and whose
''ensure'' attribute accepts
''absent''.
Users are currently somewhat special-cased: Users with a uid below
500 will never get purged. You can set ''unless_system_user''
to false
to purge any unmanaged user, or set it to a different number to
change the UID floor.
- Export/Collect and Rails Integration
Blake Bennet has completely reworked the Puppet/Rails integration,
paving the way for a much more supportable feature set. The
functionality is still experimental, but as far as we can tell it
actually works, which is a refreshing change. Anyone who has an
existing Rails database will need to either migrate manually or get
rid of the old database (which is usually safe since it''s just a
cache).
We''ll be working heavily on PuppetShow in the near future, and
hopefully it will quickly become a stable part of Puppet.
- External Node Sources
If you have node information in a separate application or a database
or something, you can set ''external_nodes''[3] to a command
that can
tell Puppet how a node should be configured. This should make it
easy to hook Puppet into your existing systems.
- Other stuff
There are a few things I threw in either in 0.20 or 0.22 that I never
documented. There are now functions available in the language for
each log level, e.g., info and notice. You can call these to log
things on the server; for instance, I have the following line in my
''default'' node configuration:
notice "Using default node for $hostname"
Also, Puppet now supports namespaces. You can define classes like this:
class os::debian { ... }
If you define one class inside of another:
class os { class debian { ... } }
the namespace gets set as you''d expect (os::debian, in this case). I
don''t know how useful it is, but it kinda happened accidentally when
I did the parser rewrite for 0.20.
- Bug fixes
There are also lots of bug fixes in this release, most of which
should have been released as part of a point-release in 0.20.
I hope to be able to stick to more, smaller releases for a while, and
keep larger development to branches. So, if you find problems, get a
bug submitted (however, please, as a favor to my sanity, do not
submit any bugs until Monday :).
- LinuxConf Australia
I''m heading to Sydney, Australia on Thursday the 11th to give a talk
on Puppet. If anyone on the list is planning on being there, let me
know and we can set up a meetup or something.
Lastly...
This means I''m finished with my most recent custom development
contract, so I''m currently available for consulting and custom
development. If you can get your companies to sponsor development of
functionality you consider critical, then you''ll get that
functionality that much faster. The more custom development work I
get, the faster Puppet develops.
Have a great weekend everyone.
1 - http://gratr.rubyforge.org/
2 - http://reductivelabs.com/projects/puppet/documentation/reference/
typedocs.html#resources
3 - http://reductivelabs.com/projects/puppet/documentation/reference/
configref.html#external_nodes
--
I don''t always know what I''m talking about, but I''m
always pretty much
convinced that I''m right.
-- musician Mojo Nixon
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com