I'm trying to figure out Puppet (3.0) and how it relates to built-in Hiera. So this is what I tried, an extremely simple example (I'll make a more complex hierarchy when I manage to get the simple one working):

# /etc/puppet/hiera.yaml
  - yaml
  - common
  :datadir: /etc/puppet/hieradata

# /etc/puppet/hieradata/common.yaml
test::param: value

# /etc/puppet/modules/test/manifests/init.pp
class test ($param) { notice($param) }

# /etc/puppet/manifests/site.pp
include test

If I directly apply it, it's fine:

$ puppet apply /etc/puppet/manifests/site.pp
Scope(Class[Test]): value

If I go through puppet master, it's not fine:

$ puppet agent --test
Could not retrieve catalog from remote server: Error 400 on SERVER: Must pass param to Class[Test] at /etc/puppet/manifests/site.pp:1 on node <nodename>

What am I missing?


I just left the office but a thought struck me: I should probably restart puppet master so it can see the new hiera.conf. I'll try that on Monday; in the meantime, if anyone figures out some not-it problem, I'd appreciate it :)


I am an idiot, and the edit in the question was correct: after restarting puppet master, everything worked fine.


For Hiera ( /etc/puppet/environments/local/hieradata/hostgroups/base/yourhostname/all.yaml )

mySuperVariable: lalala

For Init ( /etc/puppet/environments/local/manifests/yourhostname/manifest )

class mimir::init { $myvariable = hiera('mySuperVariable', 'fallbackValue') }

For Template ( /etc/puppet/environments/local/manifests/yourhostname/templates )

whatever ... <%= myvariable%> blahblah

  • If it wasn't clear, I was trying to figure out the implicit lookup, without using the hiera function. Also, the title explicitly mentions classes, and implicitly modules. – Amadan Nov 10 '12 at 6:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.