2

I am having trouble getting parameterised classes working in puppet 2.6.4 (client and master)

######## from /etc/puppet/manifests/nodes.pp 
# defining one node to use certain version
#######################################################
node 'dev-internal-000008.domain.com' {
         include software($version="dev-2011.02.11")
}
# from /etc/puppet/modules/software/manifests/init.pp

I am setting the version here as the "default"

#
class software($version="dev-2011.02.04b") {
  File {
    links => follow
  }

  file { "/opt/software_AIR":
    ensure => directory
  }

  file { "/opt/software_AIR/share":
    source => "puppet://puppet/software/air/$version",
    recurse => "true",
  }
}
#

errors from puppet master

#
err: Could not parse for environment production: Syntax error at '='; expected ')' at /etc/puppet/manifests/nodes.pp:10 on node dev-internal-domain.com
#

found a fix for this

try

node 'dev-internal-000008.domain.com' {
  class { customsoftware:version => "dev-2011.02.04b" }
}
  • My syntax was wrong in the nodes.pp.. node 'dev-internal-000008.domain.com' { class { customsoftware:version => "dev-2011.02.04b" } } – Joey BagODonuts Feb 25 '11 at 20:40
7

Parameterized classes don't work with include, unfortunately. You have to use the new alternate class declaration syntax that was introduced at the same time as parameterized classes:

node 'dev-internal-000008.domain.com' {
    # include software($version="dev-2011.02.11") # (doesn't work)
    class {'software':
        version => "dev-2011.02.11",
    } # works
}

Things:

  • Note that it looks like a resource (file, service, etc.) declaration.
  • The fact that the definition and the declaration both start with the word class is confusing, but be careful and you'll be fine.
  • You can't declare a class this way more than once, the way you can with include. This is expected to change in 2.7, and some friendlier syntax will likely be introduced.
0

You could also use a selector based on hostname:

class {'software':
    version         => $::hostname ? {
      /hostname1/   => 'dev-2011.02.11',
      default       => 'dev-2011.02.04b',
    },
}

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.