Search code examples
classparameterizedpuppet

Puppet parameterized classes and changing parameters


I am trying to understand Puppet parameterized classes. I have a parameterized class defined this way:

class defaults(
  $no_samba = 'FALSE'
)
{
  if ($no_samba =~ /TRUE/) {
    notify { "will not install samba": } ;
  } else {
    # install samba here
  }

  # More server install tasks here...
}

Furthermore, I define a basenode as follows:

node basenode
{
  class {'defaults':
    no_samba => 'FALSE',
  }
}

and then I instantiate a server:

node myserver1 inherits basenode {
  Class['defaults'] { no_samba => 'TRUE' }
}

However, this does not work. The myserver1 node does not show the notify message indicating that samba will not be installed.


Solution

  • Here's my non-typo answer - I think you're running into http://projects.puppetlabs.com/issues/7890

    Here's a code sample where I tweaked your code to get the effect you're looking for, based on the rewritten example in the ticket:

    class defaults(
      $no_samba = 'FALSE'
    )
    {
    
      notify {"no_samba_hack" :
        message => "$no_samba";
      }
    
      if ($no_samba =~ /TRUE/) {
        notify { "will not install samba": }
      } else {
        # install samba here
      }
    
      # More server install tasks here...
    }
    
    class basenode($no_samba="FALSE") {
      class {defaults: no_samba => $no_samba}
    }
    
    node yourserver {
    
      class { 'basenode' : no_samba => 'TRUE'}
    
    }
    

    When I run that with 'puppet apply sample.pp' with puppet 2.7.11 on Ubuntu 12.04, I get the following output:

    notice: will not install samba
    notice: /Stage[main]/Defaults/Notify[will not install samba]/message: defined 'message' as 'will not install samba'
    notice: TRUE
    notice: /Stage[main]/Defaults/Notify[no_samba_hack]/message: defined 'message' as 'TRUE'
    notice: Finished catalog run in 0.05 seconds