Solved it with create_resources.

On Wednesday, October 30, 2013 4:58:44 PM UTC-6, Nathan Nobbe wrote:
>
> Hi,
>
> A bit of background, I'm trying to move from node inheritance to hiera. 
> With node inheritance I could declare defined types at several levels, for 
> example, say for all of preproduction I'd like a yum repository
>
> *manifests/pre-prod.pp*
> class preprod {
>   yumrepo { 'preprod-repo': ... }
> }
>
> Then add other repos in various sub classes where other specialized 
> yumrepo(s) are declared
> *manifests/qa.pp*
> class qa inherits preprod {
>   yumrepo { 'qa': ... }
> }
>
> *manifests/dev.pp*
> class dev inherits preprod {
>   yumrepo {'dev': ... }
> }
>
> I'm having a hard time getting this to map to hiera cleanly. I'd like to 
> have the data in the hierarchy something like this
>
> *preprod.yaml*
> yumrepo::name: preprod-repo
> ...
>
> *qa.yaml*
> yumrepo::name: qa-repo
> ...
>
> My initial thought was to use hiera_include('classes'), but that doesn't 
> work for defined types. What folks on superuser.com have 
> suggested<http://serverfault.com/questions/549720/hiera-include-equivalent-for-resource-types/549727?noredirect=1#549727>is
>  to define a wrapper class for *each* declaration of a defined type. 
> Something like
>
> class preprod_repo {
>   yumrepo { 'preprod-repo': ... }
> }
>
> class qa_repo {
>   yumrepo { 'qa-repo': ... }
> }
>
> Then in the yaml
>
> *preprod.yaml*
> classes:
>  - preprod_repo
> ...
>
> *qa.yaml*
> classes:
>  - qa_repo
> ...
>
> I really don't want to define a class for every single type instantiation. 
> What I'd prefer would be a single class that could capture a merged hash 
> from all the yaml files and write out all the type declarations, but I'm 
> having trouble with the implementation. From the yaml side, I've got what I 
> want, something like this
>
> *preprod.yaml*
> classes:
>  - yumrepo_hiera
>
> yumrepo_hiera: {
>   'preprod_repo' : {
>      # attributes for preprod yum repo
>   }
> }
>
> *qa.yaml*
> classes:
>  - yumrepo_hiera
>
> yumrepo_hiera: {
>   'qa_repo' : {
>      # attributes for qa yum repo
>   }
> }
>
> Now I'm passing an aggregate data object with all the data needed to the 
> yumrepo_hieara class. Problem is how to write out all those type 
> declarations. Since there's no looping in RDL. I know it's deprecated, but 
> the Ruby DSL seems to be my best bet, yet I can't get the hash from hiera 
> passed in.., I'm getting this error when I run the agent
>
> undefined method `merge' for :yumrepo_hiera:Symbol
>
> Here's what I've got so far, bear in mind I know nothing of Ruby, but 
> hopefully you can get the idea
>
> hostclass :yumrepo_hiera, :yumrepo_hiera do
>    @yumrepo_hiera.each do |name, repo|
>         yumrepo( :name,
>                  repo[:descr],
>                  # other parameters to yumrepo type...
>          )       
>    end
> end
>
> Can someone help me get off the ground with this Ruby DSL, or show me a 
> better way in general, one where I don't have to write a class per each 
> node declaration?
>
> thanks,
>
> -nathan
>
>

-- 
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/a05af0fe-29e2-41e0-92b3-4e293ddd17d7%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to