17 require => Package["puppet"]
20 @service { "puppetmaster":
23 require => Package["puppet-server"]
27 "/etc/puppet/puppet.conf",
28 "/etc/sysconfig/puppet"
33 notify => Service["puppet"],
34 require => Package["puppet"]
37 @file { "/usr/local/sbin/run_puppet":
42 "puppet://$server/private/$environment/puppet/run_puppet",
43 "puppet://$server/modules/files/puppet/run_puppet",
44 "puppet://$server/modules/puppet/run_puppet"
48 # Ensure that the manifest directory for default environment production
49 # is defined. This will be realized in puppet::server.
51 # Do the same for the modules directory.
54 "/var/lib/puppet/modules/",
55 "/var/lib/puppet/modules/production/"
62 class centos inherits puppet {
65 class debian inherits puppet {
66 File["/etc/sysconfig/puppet"] {
67 path => "/etc/default/puppet"
70 # Debian and derivatives have no "wheel" group :/
71 File["/usr/local/sbin/run_puppet"] {
75 Package["puppet-server"] {
76 name => "puppetmaster"
84 class fedora inherits puppet {
87 class opensuse inherits puppet {
90 class ubuntu inherits debian {
93 class redhat inherits puppet {
96 class suse inherits puppet {
99 class client inherits puppet {
101 File["/usr/local/sbin/run_puppet"],
106 cron { "puppet_service":
107 command => "/usr/bin/pgrep -x puppetd > /dev/null || /sbin/service puppet restart > /dev/null 2>&1",
110 hour => [ 0,4,8,12,16,20 ]
113 $puppet_type = "client"
114 $puppet_storeconfigs = "none"
116 debug("Current value of puppet_storeconfigs_mysql_password = $puppet_storeconfigs_mysql_password")
118 # We may need this to ensure proper downwards inheritance towards subclasses
119 $real_puppet_extra_output = $puppet_extra_output ? {
121 default => $puppet_extra_output
124 File["/etc/puppet/puppet.conf"] {
125 content => template('puppet/puppet.conf.erb')
128 File["/etc/sysconfig/puppet"] {
129 content => template('puppet/puppet.sysconfig.erb')
133 File["/etc/puppet/puppet.conf"],
134 File["/etc/sysconfig/puppet"]
138 class server inherits client {
143 File["/var/lib/puppet/modules/"],
144 File["/var/lib/puppet/modules/production/"],
145 Package["puppet-server"],
146 Package["ruby-RRDtool"],
147 Package["rubygem-mongrel"],
148 Service["puppetmaster"]
151 webserver::module::enable { [
156 webserver::virtualhost { "$fqdn":
160 $puppet_type = "server"
161 $puppet_storeconfigs = "none"
163 $real_environments = $environments ? {
164 '' => [ "production", "testing", "development" ],
165 default => $environments
168 debug("Current value of puppet_storeconfigs_mysql_password = $puppet_storeconfigs_mysql_password")
170 # We may need this to ensure proper downwards inheritance towards subclasses
171 $real_puppet_extra_output = $puppet_extra_output ? {
173 default => $puppet_extra_output
176 File["/etc/puppet/puppet.conf"] {
177 content => template('puppet/puppet.conf.erb'),
178 notify +> Service["puppetmaster"],
179 require +> Package["puppet-server"]
183 File["/etc/puppet/puppet.conf"]
186 environment_manifests { [
193 define environment_manifests() {
195 if defined(File["/var/lib/puppet/manifests/"]) {
196 realize(File["/var/lib/puppet/manifests/"])
198 @file { "/var/lib/puppet/manifests/":
201 realize(File["/var/lib/puppet/manifests/"])
204 file { "/var/lib/puppet/manifests/$name/site.pp":
209 "puppet://$server/private/$name/puppet/site.pp",
210 "puppet://$server/modules/$name/puppet/files/site.pp"
212 require => File["/var/lib/puppet/manifests/$name/"],
213 notify => Service["puppetmaster"]
216 file { "/var/lib/puppet/manifests/$name/":
220 "puppet://$server/private/$name/puppet/manifests/"
227 define environment_modules() {
229 if defined(File["/var/lib/puppet/modules/"]) {
230 realize(File["/var/lib/puppet/modules/"])
232 @file { "/var/lib/puppet/modules/":
235 realize(File["/var/lib/puppet/modules/"])
238 file { "/var/lib/puppet/modules/$name/":
247 file { "/etc/puppet/fileserver.conf":
252 "puppet://$server/private/$environment/puppet/fileserver.conf",
253 "puppet://$server/modules/files/puppet/fileserver.conf",
254 "puppet://$server/modules/puppet/fileserver.conf"
256 notify => Service["puppetmaster"],
257 require => File["/var/lib/puppet/private"]
260 file { "/etc/puppet/tagmail.conf":
265 "puppet://$server/private/$environment/puppet/tagmail.conf.$hostname",
266 "puppet://$server/private/$environment/puppet/tagmail.conf",
267 "puppet://$server/modules/files/puppet/tagmail.conf.$hostname",
268 "puppet://$server/modules/files/puppet/tagmail.conf",
269 "puppet://$server/modules/puppet/tagmail.conf.$hostname",
270 "puppet://$server/modules/puppet/tagmail.conf"
272 notify => Service["puppetmaster"]
275 file { "/etc/sysconfig/puppetmaster":
280 "puppet://$server/private/$environment/puppet/puppetmaster.sysconfig.$hostname",
281 "puppet://$server/private/$environment/puppet/puppetmaster.sysconfig",
282 "puppet://$server/modules/files/puppet/puppetmaster.sysconfig.$hostname",
283 "puppet://$server/modules/files/puppet/puppetmaster.sysconfig",
284 "puppet://$server/modules/puppet/puppetmaster.sysconfig.$hostname",
285 "puppet://$server/modules/puppet/puppetmaster.sysconfig"
287 notify => Service["puppetmaster"]
291 "/usr/share/puppet/rack/",
292 "/usr/share/puppet/rack/puppetmasterd/",
293 "/usr/share/puppet/rack/puppetmasterd/public/",
294 "/usr/share/puppet/rack/puppetmasterd/tmp/"
301 "/usr/share/puppet/rack/puppetmasterd/config.ru"
303 source => "/usr/share/puppet/ext/rack/files/config.ru",
308 file { "/var/lib/puppet/private/":
312 class passenger inherits server {
313 Service["puppetmaster"] {
318 file { "/usr/share/puppet/rack/puppetmasterd/config.ru":
319 source => "/usr/share/puppet/ext/rack/files/config.ru",
320 notify => Service["httpd"]
325 class storeconfigs_mysql inherits server {
326 include mysql::client
328 $puppet_type = "server"
329 $puppet_storeconfigs = "mysql"
331 debug("Current value of puppet_storeconfigs_mysql_password = $puppet_storeconfigs_mysql_password")
333 # We may need this to ensure proper downwards inheritance towards subclasses
334 $real_puppet_extra_output = $puppet_extra_output ? {
336 default => $puppet_extra_output
339 $real_puppet_storeconfigs_mysql_database = $puppet_storeconfigs_mysql_database ? {
341 default => $puppet_storeconfigs_mysql_database
344 $real_puppet_storeconfigs_mysql_username = $puppet_storeconfigs_mysql_username ? {
346 default => $puppet_storeconfigs_mysql_username
349 $real_puppet_storeconfigs_mysql_password = $puppet_storeconfigs_mysql_password ? {
351 default => $puppet_storeconfigs_mysql_password
354 $real_puppet_storeconfigs_mysql_hostname = $puppet_storeconfigs_mysql_hostname ? {
356 default => $puppet_storeconfigs_mysql_hostname
359 case $real_puppet_storeconfigs_mysql_hostname {
360 "127.0.0.1", "localhost", "localhost.localdomain": {
361 include mysql::server
363 exec { "${puppet_type}-storeconfigs_mysql_create_db":
364 command => "/usr/bin/mysqladmin create $real_puppet_storeconfigs_mysql_database",
365 unless => "/usr/bin/mysqlcheck -u $real_puppet_storeconfigs_mysql_username --password=$real_puppet_storeconfigs_mysql_password -s puppet",
366 notify => Exec["$puppet_type-storeconfigs_mysql_create_user"],
367 creates => "/var/lib/mysql/$real_puppet_storeconfigs_mysql_database/"
370 exec { "${puppet_type}-storeconfigs_mysql_create_user":
371 command => "/usr/bin/mysql -e 'grant all privileges on puppet.* to $real_puppet_storeconfigs_mysql_username@$fqdn identified by \"$real_puppet_storeconfigs_mysql_password\"'",
377 File["/etc/puppet/puppet.conf"] {
378 content => template('puppet/puppet.conf.erb')
381 realize(File["/etc/puppet/puppet.conf"])
386 class satelite inherits satellite {}
388 class satellite inherits server {
390 $puppet_type = "satellite"
392 debug("Current value of puppet_storeconfigs_mysql_password = $puppet_storeconfigs_mysql_password")
394 class storeconfigs_mysql inherits satellite {
395 include mysql::client
397 $puppet_type = "satellite"
398 $puppet_storeconfigs = "mysql"
400 debug("Current value of puppet_storeconfigs_mysql_password = $puppet_storeconfigs_mysql_password")
402 # We may need this to ensure proper downwards inheritance towards subclasses
403 $real_puppet_extra_output = $puppet_extra_output ? {
405 default => $puppet_extra_output
408 $real_puppet_storeconfigs_mysql_database = $puppet_storeconfigs_mysql_database ? {
410 default => $puppet_storeconfigs_mysql_database
413 $real_puppet_storeconfigs_mysql_username = $puppet_storeconfigs_mysql_username ? {
415 default => $puppet_storeconfigs_mysql_username
418 $real_puppet_storeconfigs_mysql_password = $puppet_storeconfigs_mysql_password ? {
420 default => $puppet_storeconfigs_mysql_password
423 $real_puppet_storeconfigs_mysql_hostname = $puppet_storeconfigs_mysql_hostname ? {
425 default => $puppet_storeconfigs_mysql_hostname
428 case $real_puppet_storeconfigs_mysql_hostname {
429 "127.0.0.1", "localhost", "localhost.localdomain": {
430 include mysql::server
434 debug("The value of puppet_extra_output in puppet::satellite::storeconfigs_mysql is: ${real_puppet_extra_output}")
435 debug("The value of real_puppet_storeconfigs_mysql_hostname in puppet::satellite::storeconfigs_mysql is: ${real_puppet_storeconfigs_mysql_hostname}")
436 debug("The value of real_puppet_storeconfigs_mysql_database in puppet::satellite::storeconfigs_mysql is: ${real_puppet_storeconfigs_mysql_database}")
437 debug("The value of real_puppet_storeconfigs_mysql_username in puppet::satellite::storeconfigs_mysql is: ${real_puppet_storeconfigs_mysql_username}")
438 debug("The value of real_puppet_storeconfigs_mysql_password in puppet::satellite::storeconfigs_mysql is: ${real_puppet_storeconfigs_mysql_password}")
440 File["/etc/puppet/puppet.conf"] {
441 content => template('puppet/puppet.conf.erb')
444 realize(File["/etc/puppet/puppet.conf"])
446 exec { "${puppet_type}-storeconfigs_mysql_create_db":
447 command => "/usr/bin/mysqladmin create $real_puppet_storeconfigs_mysql_database",
448 unless => "/usr/bin/mysqlcheck -u $real_puppet_storeconfigs_mysql_username --password=$real_puppet_storeconfigs_mysql_password -s puppet 2>/dev/null",
449 notify => Exec["$puppet_type-storeconfigs_mysql_create_user"],
450 creates => "/var/lib/mysql/$real_puppet_storeconfigs_mysql_database/"
453 exec { "${puppet_type}-storeconfigs_mysql_create_user":
454 command => "/usr/bin/mysql -e 'grant all privileges on puppet.* to $real_puppet_storeconfigs_mysql_username@localhost identified by \"$real_puppet_storeconfigs_mysql_password\"'",
460 if $puppet_storeconfigs == '' {
461 $puppet_storeconfigs = "none"
464 # Rebind the virtual resource File["/etc/puppet/puppet.conf"]
465 # This needs to be as late as possible, because at this moment the environment (ie variable values) is fixed in place for the template
466 # Currently not working: variables appear to be fixed at the time of rebinding, thus the (now removed) define above is not changing the variables.
467 File["/etc/puppet/puppet.conf"] {
468 content => template('puppet/puppet.conf.erb')
471 realize(File["/etc/puppet/puppet.conf"])
475 define server::module::development( $base_url = false,
476 $module_prefix = false,
477 $branch = 'development') {
479 # Shortcut to Puppet::Server::Module with branch master
481 # You can only include/define Puppet::Server::Module["foo"] once, so this is
482 # work-around to enable you to have Puppet::Server::Module::Development["foo"]
483 # and Puppet::Server::Module::Production["foo"]
485 # Since the Puppet::Server::Module resource does everything by $name normally,
486 # this shortcut supplies the "module_name" attribute to it's call.
489 module { "development_$name":
490 base_url => $base_url,
491 module_prefix => $module_prefix,
492 module_name => $name,
497 define server::module::testing( $base_url = false,
498 $module_prefix = false,
499 $branch = 'testing') {
501 # Shortcut to Puppet::Server::Module with branch master
503 # You can only include/define Puppet::Server::Module["foo"] once, so this is
504 # work-around to enable you to have Puppet::Server::Module::Development["foo"]
505 # and Puppet::Server::Module::Production["foo"]
507 # Since the Puppet::Server::Module resource does everything by $name normally,
508 # this shortcut supplies the "module_name" attribute to it's call.
511 module { "testing_$name":
512 base_url => $base_url,
513 module_prefix => $module_prefix,
514 module_name => $name,
519 define server::module::production( $base_url = false,
520 $module_prefix = false,
521 $branch = 'production') {
522 # Shortcut to module with branch production
523 module { "production_$name":
524 base_url => $base_url,
525 module_prefix => $module_prefix,
526 module_name => $name,
531 define server::module( $module_name = false,
532 $module_prefix = false,
535 $branch = 'production') {
538 # This resource makes the puppet master pull in the modules
539 # from puppetmanaged.org, to /var/lib/puppet/modules/$branch/$name
542 $real_name = $module_name ? {
544 default => $module_name
547 git::clone { "modules/$branch/$real_name":
549 false => $base_url ? {
551 default => $module_prefix ? {
552 false => $module_name ? {
553 false => "$base_url/$name",
554 default => "$base_url/$module_name"
556 default => $module_name ? {
557 false => "$base_url/$module_prefix-$name",
558 default => "$base_url/$module_prefix-$module_name"
564 localtree => "/var/lib/puppet/modules/$branch/",
565 real_name => "$real_name",
569 git::pull { "modules/$branch/$real_name":
570 localtree => "/var/lib/puppet/modules/$branch/",
571 real_name => $real_name,
572 require => Git::Clone["modules/$branch/$real_name"]
577 define server::domain::development( $public = true,
582 server::domain { "development_$name":
583 branch => "development",
585 base_url => $base_url,
587 real_name => $real_name ? {
589 default => $real_name
595 define server::domain::testing( $public = true,
600 server::domain { "testing_$name":
603 base_url => $base_url,
605 real_name => $real_name ? {
607 default => $real_name
613 define server::domain::production( $public = true,
618 server::domain { "production_$name":
619 branch => "production",
621 base_url => $base_url,
623 real_name => $real_name ? {
625 default => $real_name
631 define server::domain( $public = true,
636 $branch = 'development') {
639 # This resource makes the puppet masterpull in the
640 # /var/lib/puppet/private/$environment/$environment tree from an upstream
641 # SCM, and "copies" the puppet/manifests/nodes/ to it's final location
642 # /var/lib/puppet/manifests/$environment/domains/$domain/nodes/
645 if defined(File["/var/lib/puppet/private/$name/"]) {
646 realize(File["/var/lib/puppet/private/$name/"])
648 @file { "/var/lib/puppet/private/$name/":
650 path => $real_name ? {
651 false => "/var/lib/puppet/private/$name",
652 default => "/var/lib/puppet/private/$real_name"
655 realize(File["/var/lib/puppet/private/$real_name/"])
658 git::clone { "private/$name/$branch":
661 false => $real_name ? {
662 false => "$base_url/$name",
663 default => "$base_url/$real_name"
665 default => $real_name ? {
666 false => "$base_url/$prefix-$name",
667 default => "$base_url/$prefix-$real_name"
672 localtree => $real_name ? {
673 false => "/var/lib/puppet/private/$name/",
674 default => "/var/lib/puppet/private/$real_name/"
679 git::pull { "private/$name/$branch":
680 localtree => $real_name ? {
681 false => "/var/lib/puppet/private/$name/",
682 default => "/var/lib/puppet/private/$real_name/"
684 real_name => $branch,
685 require => Git::Clone["private/$name/$branch"]
688 file { "/var/lib/puppet/manifests/$branch/domains/$name":
690 path => $real_name ? {
691 false => "/var/lib/puppet/manifests/$branch/domains/$name",
692 default => "/var/lib/puppet/manifests/$branch/domains/$real_name"
694 source => $real_name ? {
695 false => "/var/lib/puppet/private/$name/$branch/puppet/manifests/",
696 default => "/var/lib/puppet/private/$real_name/$branch/puppet/manifests/"
702 Git::Pull["private/$name/$branch"]
706 file { "/var/lib/puppet/manifests/$branch/domains/$name.pp":
707 path => $real_name ? {
708 false => "/var/lib/puppet/manifests/$branch/domains/$name.pp",
709 default => "/var/lib/puppet/manifests/$branch/domains/$real_name.pp"
711 source => $real_name ? {
713 "/var/lib/puppet/private/$name/$branch/puppet/$name.pp",
714 "/var/lib/puppet/private/$name/$branch/puppet/site.pp"
717 "/var/lib/puppet/private/$real_name/$branch/puppet/$real_name.pp",
718 "/var/lib/puppet/private/$real_name/$branch/puppet/site.pp"
722 Git::Pull["private/$name/$branch"]