25. Presented by
class mysql::server (!
## params here!
) inherits mysql::params {!
!
include ::mysql::server::install!
include ::mysql::server::config!
include ::mysql::server::service!
!
}
26. Presented by
class mysql::server (!
## params here!
) inherits mysql::params {!
!
include ::mysql::server::install!
include ::mysql::server::config!
include ::mysql::server::service!
!
anchor { ‘mysql:start’: }!
-> Class[‘mysql::server::install’]!
-> Class[‘mysql::server::config’]!
-> Class[‘mysql::server::service’]!
-> anchor { ‘mysql:end’: }!
}
36. ‘Application tier’
• Long lived
• Data usually separate
• ‘The Data’
Presented by
!
!
!
‘Environment’
• Short lived
• Migration path to ‘production’
• ‘The Model’
!
!
!
37. Presented by
Hierarchy structure?
• How/where is data different?
• Most -> least specific
• Folders are your friends
51. Presented by
class data_in_code {!
case $::application_tier {!
'dev': {!
$java_version = '6.0.3'!
$tomcat_version = '6.0'!
}!
!
'test': {!
$java_version = '7.0.1'!
$tomcat_version = '7.0'!
}!
}!
}
52. Presented by
class profiles::tomcat {!
$java_version = hiera(’java_version’)!
$tomcat_version = hiera(’tomcat_version’)!
!
class { ’::tomcat’:!
version => $tomcat_version,!
}!
!
class { ’::java’:!
version => $java_version,!
}!
}
56. Presented by
class tomcat {!
class { ‘java’:!
version => ‘6.0’,!
}!
!
Class[‘java’]!
-> Class[‘tomcat’]!
}
57. Presented by
class profiles::tomcat {!
$java_version = hiera(’java_version’)!
$tomcat_version = hiera(’tomcat_version’)!
!
class { ‘::java’:!
version => $java_version,!
}!
class { ‘::tomcat’:!
version => $tomcat_version,!
}!
!
Class[‘::java’]!
-> Class[‘::tomcat’]!
}
58. class profiles::tomcat {!
include profiles::java!
$tomcat_version = hiera(’tomcat_version’)!
!
class { ‘::tomcat’:!
Presented by
version => $tomcat_version,!
}!
!
Class[‘profiles::java’]!
-> Class[‘::tomcat’]!
}
59. Presented by
Profiles
• Hiera for business-specific data
• Proprietary resources
• Inter-class dependencies and containment
64. class roles {!
include profiles::security::base!
include profiles::mycorp::users!
include profiles::mycorp::os_base!
}
Presented by
65. class roles::app_server inherits roles {!
include profiles::tomcat!
include profiles::our_app!
include profiles::shibboleth!
Presented by
!
Class[‘profiles::tomcat’]!
-> Class[‘profiles::our_app’]!
-> Class[‘profiles::shibboleth’]!
}
67. Presented by
class roles::app_server::pci {!
include profiles::security::base!
include profiles::mycorp::users!
include profiles::mycorp::os_base!
include profiles::pci!
include profiles::tomcat!
include profiles::our_app!
include profiles::shibboleth!
include profiles::pci!
!
Class[‘profiles::java’]!
-> Class[‘profiles::our_app’]!
-> Class[‘profiles::shibboleth’]!
}
68. Presented by
Roles
• Hostnames minus Hiera
• Technology-independent
• Inheritance makes sense (or not)
71. forge "http://forge.puppetlabs.com"!
!
# Modules from the Puppet Forge!
mod "puppetlabs/apache"!
mod "puppetlabs/ntp"!
!
# Modules from Github using various references!
mod 'notifyme',!
:git => 'git://github.com/glarizza/puppet-notifyme',!
:ref => '50c01703b2e3e352520a9a2271ea4947fe17a51f'!
!
mod 'profiles',!
:git => 'git://github.com/glarizza/puppet-profiles',!
:ref => '3611ae4253ff01762f9bda1d93620edf8f9a3b22'
Presented by
72. R10k - Bad name, good robot
1. Ensuring modules based on a Puppetfile
2. Dynamically creating Puppet environments
Presented by
77. Presented by
Summary
• Simple, generic component modules
• Extract company-specific data with Hiera
• Layer implementation with Profiles
• Classification with Profiles