Puppet parameterized classes and hiera

hierapuppet

I'm running puppet open source 3.1.0 from the puppetlabs repos on RedHat Enterprise Linux 6 and using hiera 1.1.2. I'm running into what seems like either a bug or a fundamental misunderstanding on my part of how hiera works with parameterized classes. I've set up a parameterized subclass with a default value. I'm trying to set the value to a different one on a particular node. The node is declared in one of the main manifests without classes, and I have hiera_include('classes') in that manifest. I'm trying to change the value of the "activate" parameter in the "my_firewall" class. When my hiera node file looks like this:

---
classes:
  - puppetmaster
rel::auth_users: ['puppet']
rel::my_firewall::activate: false 

rel::my_firewall does not even load (I have notifies for the two boolean values of "activate" and don't see them). The rel::auth_users parameter gets passed fine. The rel class is defined in a parent in hiera.

When I change it to this:

---
classes:
  - puppetmaster
  - rel::my_firewall
rel::auth_users: ['puppet']
rel::my_firewall::activate: false 

It loads the rel::my_firewall class but uses the default value, not the false value.

As a sanity check, when I define things in the normal way in the node manifest, things work fine:

node 'puppet.my.domain' {
  class { 'rel::my_firewall':
    activate => false,
  }
}

properly declares the class and sets activate to false.

Am I doing things wrong? Is my syntax off? Any help would be awesome.

Best Answer

Syntax looks good. Looks like bug 17474 - the false value isn't loading correctly.

As a workaround until 3.2 is out, maybe use a string?