puppet-hiera used with Parameterised class

275 views
Skip to first unread message

Peter

unread,
Jul 1, 2012, 3:04:36 AM7/1/12
to puppet...@googlegroups.com
Hi Puppet Users,

For some bizzare reason I am unable to use hiera-puppet with a parameterised class.

The output is:

----------------------------
root@hiera hieratest/manifests# puppet apply -e "include hieratest"
Error: undefined method `catalog' for #<Hash:0xb6c53d00> at line 1 on node hiera.localdomain
Wrapped exception:
undefined method `catalog' for #<Hash:0xb6c53d00>
Error: undefined method `catalog' for #<Hash:0xb6c53d00> at line 1 on node hiera.localdomain
----------------------------

These are the versions that I am using (taken from the Puppetlabs Debian/Devel):

hiera (1.0.0-0.1rc3)

hiera-puppet (1.0.0-0.1rc1-1-g3e68ff0)

puppet-common (3.0.0-0.1rc3puppetlabs1)

puppet (3.0.0-0.1rc3puppetlabs1)


Relevant Files:

init.pp file

--------------------

root@hiera hieratest/manifests# cat init.pp

class hieratest (

                  $bar = hiera("foo"),

                  $zoo = hiera("service_default_loc")

                 ) {

  notice ("Working ...")

  notice ("Bar == ${bar}")

  notice ("Module_user == ${zoo}")

}

------------------

and data.pp file


-------------------

root@hiera hieratest/manifests# cat data.pp

class hieratest::data {

  $foo = "Its Working!!!"


  ### - Server default values

  ###   -------------------

  case $::operatingsystem {

        /(Ubuntu|Debian)/: {

        $service_default_loc = '/etc/puppet/modules'

    }

  }

}

-------------------


Can anyone see what I have done wrong?

I have looked at the hiera-puppet example and cannot for the life of me see anything different.

Thanks,

Peter

jcbollinger

unread,
Jul 2, 2012, 9:35:10 AM7/2/12
to puppet...@googlegroups.com


On Sunday, July 1, 2012 2:04:36 AM UTC-5, Peter wrote:
Hi Puppet Users,

For some bizzare reason I am unable to use hiera-puppet with a parameterised class.

The output is:

----------------------------
root@hiera hieratest/manifests# puppet apply -e "include hieratest"
Error: undefined method `catalog' for #<Hash:0xb6c53d00> at line 1 on node hiera.localdomain
Wrapped exception:
undefined method `catalog' for #<Hash:0xb6c53d00>
Error: undefined method `catalog' for #<Hash:0xb6c53d00> at line 1 on node hiera.localdomain
----------------------------

These are the versions that I am using (taken from the Puppetlabs Debian/Devel):

hiera (1.0.0-0.1rc3)

hiera-puppet (1.0.0-0.1rc1-1-g3e68ff0)

puppet-common (3.0.0-0.1rc3puppetlabs1)

puppet (3.0.0-0.1rc3puppetlabs1)


Puppet 3 has hiera built in.  The above may be the correct stack, but you should verify -- it may be that one or both of the hiera pieces are for Puppet 2, not Puppet 3.
 

Relevant Files:

init.pp file

--------------------

root@hiera hieratest/manifests# cat init.pp

class hieratest (

                  $bar = hiera("foo"),

                  $zoo = hiera("service_default_loc")

                 ) {

  notice ("Working ...")

  notice ("Bar == ${bar}")

  notice ("Module_user == ${zoo}")

}


Although it's not clear that that is wrong, it's definitely a strange way of doing things in Puppet 3.  Part of Puppet 3's integration with Hiera is to automatically look up class parameters by name, via hiera, when you declare classes using the 'include' function (or, I presume, the 'require' function).  And you should embrace that usage, because it overcomes some serious limitations attending parametrized in Puppet 2.

What you're doing duplicates that, sort of.  I'm not sure whether that's the problem, but I suggest you start by arranging your data and/or your parameter names to be consistent with Puppet 3's expectations for automatic parameter lookup.  Then remove the (mostly-)redundant default values from your class parameter definitions.  That should be a better setup anyway, and if the problem persists at that point then at least you will have a simpler system to debug.


John

Reply all
Reply to author
Forward
0 new messages