Ouch, looks like it was just erroneous ' characters in the required value.
e.g.
{ required => "File['/etc/blah']" }
instead of
{ required => "File[/etc/blah]" }
now I see create_resources is working fine without any of the ordering
logic I was talking about.
Had fun poking around the internals though :)
-nathan
On Friday, November 1, 2013 6:10:42 PM UTC-6, Nathan Nobbe wrote:
>
> Hi,
>
> I'm trying to implement a new feature of sorts and looking for some
> direction from folks who understand the puppet code. What I'm trying to do
> is create an ability to specify derived types via hiera much like
> hiera_include() works for classes. A quick aside, and the reason I'm
> interested in this to begin with, is most people I've asked suggest
> wrapping all node declarations in classes, however then you end up writing
> a bunch of classes that aren't really 'modules' in the practical sense of
> the term, they're really node definitions packaged as modules for the sake
> of declaration via hiera.
>
> The idea here is in hiera, you can declare derived types for a node as such
>
> # This will declare 2 file types for the node
> hiera_file:
> /var/yum:
> ensure: directory
> owner: jenkins
> recurse: true
> /var/yum/custom-repo:
> ensure : directory
> owner : jenkins
> group : jenkins
> require : "File['/var/yum']"
>
> So thinking it would be cool to simply enumerate derived types in hiera I
> set off to write a module to implement the feature. I started with a class
> which basically looks like this
>
> class type_mapper()
> {
> $augeas = hiera_hash('hiera_augeas')
> if(!empty($augeas)) {
> create_resources(augeas, $augeas)
> }
>
> # similar block for each built-in derived type
> }
>
> But immediately realized dependency problems with type declarations that
> have 'require' et al. At first I thought I could write a function in ruby
> to deal with this, but then realized the complexity of the problem and I
> know there's code in puppet that handles this sort of dependency resolution
> already. I'm just looking around the source some and haven't found it yet.
> The function I'm trying to write would look something like this
>
> module Puppet::Parser::Functions
> newfunction(:hiera_declare_types) do |args|
> # Raw type definitions provided by hiera
> # For now the hiera_hash() call is in RDL,
> # but that should move here too
> types = args[0]
>
> * #------------------------------------------------------------*
> * # XXX What is the real puppet function for*
> * # some_magic_puppet_dependency_reconciliation*
> * #------------------------------------------------------------*
> * ordered_types = some_magic_puppet_dependency_reconciliation(types)*
>
> Puppet::Parser::Functions.function('create_resources')
>
> # Loop over all the type declarations
> ordered_types.each do |type, hash|
>
> # Loop over the declarations for a specific type
> hash.each do |title, real_hash|
>
> create_resources(type, hash)
>
> end
> end
>
> end
> end
>
> Is there such a function? I imagine there has to be because ultimately the
> type declarations are made one at a time, in some linear order. Generally
> speaking, do you see what I'm going for? Does it look like a cool addition
> for puppet? I feel like without something like this, using hiera causes you
> to move node definitions over to modules which isn't very attractive.
>
> thanks,
>
> -nathan
>
--
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-dev/8514e45b-3386-45df-91c9-4641c0886195%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.