John,

Many thanks for your long reply, it is much appreciated. You have assured 
me in teh conclusions and course of action and i am glad that my 
appreciation of teh problem I have was not so far from the reality. 

Thanks again.

Guillem 

On Wednesday, 26 September 2012 16:52:19 UTC+1, Guillem Liarte wrote:
>
> This is the situation I have:
>
> All my hosts are the* same OS.*
> All my host are in the* same puppet environment,* so I cannot use 
> %{environment}
>
> I have a module that sets all the *basic* functionality for the OS, 
> resolution, authentication, security, packages, etc
> I have a module for each application hosted.
>
> At the moment all the 'data' is in Puppet, mostly in parametrised classes 
> in site.pp.
>
> What I want to get is a hiera set-up that allows me to use this structure:
>
> :hierarchy:
>   - global     # source of application names (classes? modules?) and 
> environments list
>   - basic     # data for the basic class
>   - prod/%{application}/%{hostname}        # hostname files for specific 
> data
>   - prod/%{application}/%{env}                 # environmental data for 
> each application (module)
>   - prod/%{application}/default                 # default data for an 
> application
>   - nonprod/%{sysclass}/%{hostname}
>   - nonprod/%{sysclass}/%{env}
>   - nonprod/%{sysclass}/default             
>   
>
> Then to have something like this under the datadir:
>
>
> #├── global.yaml
> #├── basic.yaml
> #├── nonprod
> #│   ├── app1
> #│   │   ├── common-integration.yaml           << Alfresco common 
> integration
> #│   │   ├── continuous-integration.yaml       
> #│   │   ├── dev.yaml
> #│   │   ├── default.yaml
> #│   │   ├── host1.yaml                       
> #│   │   ├── host2.yaml
> #│   │   ├── performance.yaml
> #│   │   ├── qa.yaml
> #│   │   ├── test.yaml
> #│   │   └── uat.yaml
> #│   └── app2
> #└── prod
> #    ├── app1
> #    └── app2
> # 
> # etc.
>
> In global.yaml
>
> ---
> :classes:
>   basic:
>   app1:
>   app2:
>   app3:
>   app4:
> :env:
>   test:
>   dev:
>   commonint:
>   continuousint:
>   dev:
>   performance:
>   qa:
>   test:
>   uat:
>
>
> in app1 default.yaml:
>
> ---
> classes:
>   app1:
>
> app1_version:  'latest'
>
>
>
> in app1 dev.yaml:
> ---
> app1_version:  '3.0'
>
> If I wanted host1 and host2 to be part of dev for app1:
>
>
> host1.yaml:
> ---
> classes:
>   basic:
>   app1:
> env:
>   dev:
>
> maybe in host2 I want to override version too:
>
> host2.yaml
> ---
> classes:
>   basic:
>   app1:
> env:
>   dev:
> app1_version: '3.1'
>
>
> So in short, I would like hiera to be a source of facts, where I can get 
> information that feeds Puppet in order to classify the nodes and to feed 
> the parametrised classes.
>
> I recently found this blog entry:
>
> http://garyhetzel.com/2012/04/12/hiera_as_a_puppet_enc
>
> Gary has been very helpful and I have got an idea of what needs doing. I 
> can query all the data the way I want using the hiera command. Something 
> like these:
>
> hiera app1_version sysclass=app1 env=dev
>
> Returns the expected '3.0' and if I query by adding teh host:
>
> hiera app1_version sysclass=app1 env=dev hostname=host1
>
> I get 3.1. Cool!
>
>
> Example using Gary's approach:
>
> /opt/puppet-data/nonprod/hieratest/default.yaml 
> ---
> classes: hieratest
> env: hieratest_default
>
> /opt/puppet-data/nonprod/hieratest/host1.yaml 
> ---
> classes: 
>   hieratest:
> env: 'hieratest_performance'
>
>
> # hiera env sysclass=hieratest --debug
> DEBUG: Wed Sep 26 16:40:46 +0100 2012: Hiera YAML backend starting
> DEBUG: Wed Sep 26 16:40:46 +0100 2012: Looking up type in YAML backend
> DEBUG: Wed Sep 26 16:40:46 +0100 2012: Looking for data source global
> DEBUG: Wed Sep 26 16:40:46 +0100 2012: Looking for data source basic
> DEBUG: Wed Sep 26 16:40:46 +0100 2012: Looking for data source 
> nonprod/hieratest/default
> DEBUG: Wed Sep 26 16:40:46 +0100 2012: Found env in 
> nonprod/hieratest/default
> hieratest_default
>
> # hiera type sysclass=hieratest hostname=host1 --debug
> DEBUG: Wed Sep 26 16:40:57 +0100 2012: Hiera YAML backend starting
> DEBUG: Wed Sep 26 16:40:57 +0100 2012: Looking up type in YAML backend
> DEBUG: Wed Sep 26 16:40:57 +0100 2012: Looking for data source global
> DEBUG: Wed Sep 26 16:40:57 +0100 2012: Looking for data source basic
> DEBUG: Wed Sep 26 16:40:57 +0100 2012: Looking for data source 
> nonprod/hieratest/host1
> DEBUG: Wed Sep 26 16:40:57 +0100 2012: Found env in nonprod/hieratest/host1
> hieratest_performance
>
>
> But when it comes to use this in Puppet the results are not as I expect, 
> nothing happens, it just does a run no classes are used. I see that the 
> basic class custom facts are loaded, but nothing gets executed, as if the 
> catalogue for host1 would not include it.
>
>
> In Puppet  I expect to just have:
>
> in site.pp:
> node default {}
>
> And then in each application’s init.pp:
>
> $env = hiera("env")  << this allows me to get the right config  files 
> (with are maintained in a git repo)
> $app1_version = hiera("app1_version") << this allows me to set the right 
> RPM version (from satellite/spacewalk/RHN)
>
> As per Gary's post, I can use hiera as node terminus, and so it is set in 
> puppet.conf.
>
> I would like to make emphasis  in this: Gary's hiera as an ENC works, but 
> for a more simple scenario than the one I am proposing, if I only wanted to 
> classify Classes and Hosts, it does work fine. Where I have not been able 
> to succeed is in adding an 'env' layer after the application (classes, 
> organised in modules).
>
> I can get to organise things solely by host-name too (I could have a huge 
> list of hundreds of hosts and manage that), but what I need is to be able 
> to split them into directories as these are managed by each team 
> responsible for the applications. 
>
> I a a beginner in ruby, and I am willing to help as much as I can to get 
> the use of hiera as an ENC as much as possible.
>
> Do I have the right approach given the requirements? 
> Is there a better approach to this one?
>
>
> Kind regards,
>
> Guillem
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/puppet-users/-/QhOEBYWgOCcJ.
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