Hi everyone,I currently have a giant file with default variables I use in a lot of my modules and I override those at the node level if I need to.I thought I would give porting that data into a hiera setup.I worked out how to specify my data sources and started to make a go at moving some of my variables in the default data file.I thought heira would be smart and set a variable to undef if it couldn't find it but that doesn't seem to be the case. (unless I missed something in the rather sparse documentation)Is there a way of telling it to do this?I was also trying to work out how I automagically get my parametized classed to pull in vars from hiera. (The docs on that don't tell me much either.)Can anyone tall me how that works? Or do I have to use the hiera functions which isn't automagical in my book.
My current variables are set with a default value in my main file and then I override those at the node level if I need to (so kind of the same way hiera does it anyway)
So given all of that I can't see any reason to switch to using heira because my current setup works as-is (my variable file is getting pretty huge anyway but that isn't going to change with heira if it won't set a var to undef).What are the benefits or using an external source for variables instead of sticking them in my node definitions (which seems like it would be faster because it doesn't have to use an external source)?
Thanks in advance.Pete.
Hi Pete,It depends on what version of puppet you use. If you use 3.x, then it has hiera built-in. So it's very simple to write classes which are compatible with v2.7 or v3.x versions.
I normally write something like this:class foo($parameter = undef,) {...}
What that means is that puppet will automatically call hiera('foo::parameter') and tries to find a value for $parameter in the hierarchy if it cannot find it, then the value of $parameter will be equal to undef.
On Monday, 3 December 2012 03:42:08 UTC, Pete wrote:Hi everyone,I currently have a giant file with default variables I use in a lot of my modules and I override those at the node level if I need to.I thought I would give porting that data into a hiera setup.I worked out how to specify my data sources and started to make a go at moving some of my variables in the default data file.I thought heira would be smart and set a variable to undef if it couldn't find it but that doesn't seem to be the case. (unless I missed something in the rather sparse documentation)Is there a way of telling it to do this?I was also trying to work out how I automagically get my parametized classed to pull in vars from hiera. (The docs on that don't tell me much either.)Can anyone tall me how that works? Or do I have to use the hiera functions which isn't automagical in my book.My current variables are set with a default value in my main file and then I override those at the node level if I need to (so kind of the same way hiera does it anyway)
So given all of that I can't see any reason to switch to using heira because my current setup works as-is (my variable file is getting pretty huge anyway but that isn't going to change with heira if it won't set a var to undef).What are the benefits or using an external source for variables instead of sticking them in my node definitions (which seems like it would be faster because it doesn't have to use an external source)?Thanks in advance.Pete.
--
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/-/PreiZnQjKIcJ.
To post to this group, send email to puppet...@googlegroups.com.
To unsubscribe from this group, send email to puppet-users...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
Yes, it is that simple.
The other way of doing (some people prefer this way actually) is to put your variables inside the actual class (not as parameters of the class), for example:class foo {$my_parameter = hiera('foo::my_parameter', 'default_value')
$another_parameter = hiera('foo::another_parameter', 'some default value')<...>}
As you can see I didn't use any class parameters, I just put my variable inside the class and used hiera() funciton to fetch the values from hiera data. There are couple of things to understand here:1. syntax of hiera() is: hiera('parameter_to_look_for', 'default_value_if_not_found')2. the "parameter_to_look_for" can be anything you like, but the best practice is to keep it consistent, so for example you have a class 'foo' and a variable 'myvar' inside the class, then you should have it as 'foo::myvar' in hiera data files.
Hope this helps.
To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/ygahW1cKSLoJ.
To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/dni9mA0j2nwJ.
--
Chad M. Huneycutt
--
You received this message because you are subscribed to the Google Groups "Puppet Users" group.
One last question.I use a node level variable to specify the location of a node.I use this for setting variables specific to that location like different puppet master ip and nagios ip for the office and such.I want to use that variable in hiera for the same purpose.I have this in my hiera.yaml file.---:hierachy:- %{::clientcert}- %{::environment}- %{location}- virtual_%{::is_virtual}- common:backends: yaml:yaml::datadir: /etc/puppet/hieradatait gets data from the common.yaml file but is seems to not get anything from any of the other files.it's definitely using the datadir because thats where the common.yaml file is as well as the rest of the data files.Am I missing something?
On Dec 7, 2012 12:08 AM, "jcbollinger" <John.Bo...@stjude.org> wrote:
>
>
>
> On Tuesday, December 4, 2012 8:10:00 PM UTC-6, Pete wrote:
>>
>>
>> One last question.
>> I use a node level variable to specify the location of a node.
>> I use this for setting variables specific to that location like different puppet master ip and nagios ip for the office and such.
>> I want to use that variable in hiera for the same purpose.
>> I have this in my hiera.yaml file.
>>
>> ---
>> :hierachy:
>> - %{::clientcert}
>> - %{::environment}
>> - %{location}
>> - virtual_%{::is_virtual}
>> - common
>> :backends: yaml
>> :yaml:
>> :datadir: /etc/puppet/hieradata
>>
>> it gets data from the common.yaml file but is seems to not get anything from any of the other files.
>> it's definitely using the datadir because thats where the common.yaml file is as well as the rest of the data files.
>> Am I missing something?
>>
>
> You are missing that node variables are not globals, and in fact don't even have qualified names. I strongly suspect that that is why Hiera is not seeing them.
That explains a why location isn't seen.
I discovered later that hiera didn't seem to be using the facts either...
Do I need to do something else to allow hiera to see facts?
I am assuming if I can use facts I will work out how to set location as a fact and just use it that way.
As an aside, are ENC variables global?
I have been tempted to use my freeipa server as an ENC using ldap.
I have also been tempted to have a go at writing an ldap backend for hiera but that's another story...
>
> There are several potential workarounds, among them:
> set the needed variable(s) at top-level, based on some sort of conditional
I was under the impression that node level variables were top level variables but I am guessing I am wrong. Time to find some docs I guess. :)
> push all the contents of your node blocks into classes, so that the variables in question become class variables
I am going to assume from that class variables are global because they have qualified names?
> instead of creating a separate hierarchy level with a data file for each value of (say) $environment,use a hash of hashes in the level below, with the $environment values as the outer hash keys
>
> Cheers,
>
> John
>
> --
> 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/-/1Ajo2OXHPC4J.
I'm actually having this exact same problem. In my hiera.yaml file I had a hierarchy including two facts and then some strings derived from facter facts.
When I run puppet agent --test the hiera vars in files named for the node's $fqdn, etc. aren't found, but if I puppet apply specifying my site.pp manifest the variables contained in yaml files like $fqdn.yaml are found and applied properly. I've gone as far as testing this with masters running 3.0 and 2.7 but haven't seen any difference. For the sake of clarity, the agent is being run on the master.
I've tried several permutations of specifying a hierarchy including quoting "%{fqdn}", using no quotes, using the syntax for a top-level variable ${::fqdn}, etc. Each time running hiera from the CLI works as expected but the master can't be coerced to behave as expected.
A bit of pastebin
puppet apply (which works): http://pastebin.com/E5iBtt2t
puppet agent --test (doesn't work): http://pastebin.com/GsA81Eyx
To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/Gjgrw66TRWkJ.