Mike Reed
2014-Sep-19 23:01 UTC
[Puppet Users] class/subclass relationship ordering and containment
Hello all,
I have a question about class and subclass relationships and what is/isn't
the ideal way to go about such a thing. Please bear with me as I'm still
refining my understanding of containment. Let's say I have a puppet module
which manages the install of puppet and has the following pieces (currently
using puppet v.3.4.3):
*init.pp*
class puppet {
# evaluate supporting classes
include puppet::params
include puppet::config
include puppet::service
anchor { 'puppet::begin' : } ->
class { '::puppet::params' : } ->
class { '::puppet::config' : } ~>
class { '::puppet::service' : } ->
anchor { 'puppet::end' : }
}
*params.pp*
class puppet::params {
# puppet general params
$puppet_path = '/etc/puppet'
$puppet_config_template = 'puppet/puppet.conf.erb'
$puppet_package = 'puppet'
$puppet_common_package = 'puppet-common'
$puppet_service_ensure = 'running'
$puppet_service_enable = true
$puppet_prod_version = '3.6.2-1puppetlabs1'
$puppet_dev_version = '3.6.2-1puppetlabs1'
validate_string($puppet_path)
validate_string($puppet_config_template)
validate_string($puppet_package)
validate_string($puppet_common_package)
validate_string($puppet_service_ensure)
validate_bool($puppet_service_enable)
validate_string($puppet_prod_version)
validate_string($puppet_dev_version)
}
*config.pp*
class puppet::config (
$puppet_config_path = $::puppet::params::puppet_config_path,
$puppet_config_template = $::puppet::params::puppet_config_template,
$puppet_service = $::puppet::params::puppet_service,
) inherits puppet::params {
file { 'puppet.conf' :
ensure => present,
path => "${puppet_config_path}/",
content => template("${puppet_config_template}"),
notify => Service["${puppet_service}"],
}
}
*service.pp*
class puppet::service (
$puppet_package = $::puppet::params::puppet_package,
***truncated variables for sake of a long post***
) inherits puppet::config {
package { "${puppet_package}":
ensure => "${puppet_prod_version}",
}
package { "${puppet_common_package}":
ensure => "${puppet_prod_version}",
}
service { "${puppet_service}":
ensure => "${puppet_service_ensure}",
name => "${puppet_service}",
enable => "${puppet_service_enable}",
hasrestart => true,
hasstatus => true,
subscribe => Package["${puppet_config_template}"],
}
}
Based on the above, I've left a few things which I feel don't belong but
for the sake of my questions, they're included.
Per the above init.pp, I've added an anchor to force ordering. My
understanding is that this has nothing to do with application-order and
more to do with parse-order. With that said, I have a few questions:
1. By adding the 'include' in init.pp, my understanding is that simply
says to 'evaluate' the subclasses but does not indicate an order to
which
subclasses are to be applied. Is that correct?
2. I think the 'inherits' function is depreciated but should each
instance
be replaced with a 'contain' (based on the order I want) throughout my
subclass manifests? My understanding is that I should never 'contain'
more
than one subclass within the same module as puppet will be confused on
ordering.
3. I rather like the idea of the anchor in the init.pp because I only have
one place to go to, in order to see the relationship of the subclasses.
With the introduction of the 'contain' feature, I feel like the anchor
is
no longer needed; however, is there a preferred way of ordering these
subclasses without using the anchor pattern?
As always, thanks in advance for your help.
Cheers,
Mike
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to puppet-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/daeb1827-7d94-4921-ae09-31f2ea480e9b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.