On Monday, September 22, 2014 2:05:42 PM UTC-5, Vladimir Brik wrote:
Here's roughly what I am thinking of doing (but I am wondering if there
is a better way).
site.pp:
# this is in global area of site.pp. so that all nodes, whether
they
# use statlog or not include this code
class { statlog::autocleanup:}
node foo {
statlog { bar:}
}
statlog module:
class statlog::autocleanup()
{
# real implementation is a bit more complicated to handle
# resource ordering, non-existent services, etc.
if !defined(Service[statlog.baz]) {
service{ statlog.baz:
ensure = stopped,
enable = false,
}
}
if !defined(Service[statlog.foo]) {
...
}
}
Is there a better way to do this?
You have used the defined() function. There is *always* a better way than
that.
It is unclear to me why, if you want to purge undeclared Statlog resources,
what you actually do is manage Service resources. If you want to be able
to remove Statlogs, then that type should have an 'ensure' parameter that
you can set to 'absent' to cause that resource to be removed. Supposing
you have that, a better way to proceed would be more like this:
class statlogs::none($all_statlogs) {
statlogs::statlog { $all_statlogs: ensure = 'absent' }
}
node foo {
include 'statlogs::none'
Statlogs::Statlog | title == 'bar' | { ensure = 'present' }
}
If you wished, it might be a bit nicer to wrap the resource override in its
own defined type, maybe something like statlogs::enabled. As I wrote it,
class parameter $statlogs::none::all_statlogs is designed to be bound to an
Hiera array containing all the possible statlogs. It would be possible to
instead populate it with all the statlogs actually present on the target
node, as provided by a custom fact.
Alternatively, if you wrote the Statlog type as a Ruby plugin type, made it
Ensurable, and made it perform prefetching, then you could do the purging
part very simply via an instance of the Resources type.
Or if you were willing to put all wanted Services under Puppet management,
then you could use a Resources to purge unmanaged Service resources, which
would be along the lines of what you were thinking of doing.
John
--
You received this message because you are subscribed to the Google Groups
Puppet Users group.
To unsubscribe from this group and stop receiving emails from it, send an email
to puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/99d46bac-47d2-45d9-a954-bad6f0ec81b4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.