| Index: modules/buildbot/manifests/init.pp | 
| diff --git a/modules/buildbot/manifests/init.pp b/modules/buildbot/manifests/init.pp | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..1e8b43cfbe649ce05714fe7f618ea60b5451f68f | 
| --- /dev/null | 
| +++ b/modules/buildbot/manifests/init.pp | 
| @@ -0,0 +1,151 @@ | 
| +# == Class: buildbot | 
| +# | 
| +# Manage Buildbot (https://buildbot.net/) master and slave setups. | 
| +# | 
| +# Class buildbot acts as the root namespace for the buildbot integration | 
| +# with Puppet, while also providing a variety of setup parameters that can | 
| +# be used to adjust the software setup. | 
| +# | 
| +# It defines a set of virtual resources titled 'buildmaster' and 'buildslave'. | 
| +# Those are realized implicitly when required by any of the various entities | 
| +# within the module, but may become realized explicitely when necessary: | 
| +# | 
| +# - Concat[]: The 'buildmaster' and 'buildslave' system daemon configuration | 
| +# - Concat::Fragment[]: The respective root or configuration head fragment | 
| +# - File[]: The anchestor of default for master and slave $basedir resources | 
| +# - Service[]: The actual services running the master and slave instances | 
| +# | 
| +# Note, however, that the respective instances are rather implementation | 
| +# specific and thus may become subject to change in the future. | 
| +# | 
| +# === Parameters: | 
| +# | 
| +# [*master_config*] | 
| +#   The path to the 'buildmaster' system configuration. | 
| +# | 
| +# [*master_directory*] | 
| +#   The anchestor of the default buildbot::master $basedir. | 
| +# | 
| +# [*master_pacakges*] | 
| +#   The packages that provide the buildbot::master dependencies. | 
| +# | 
| +# [*master_runner*] | 
| +#   The path to the runner used for buildbot::master instances. | 
| +# | 
| +# [*master_service*] | 
| +#   The status 'buildmaster' service status to ensure, if any. | 
| +# | 
| +# [*master_user*] | 
| +#   The user operating the 'buildmaster' service. | 
| +# | 
| +# [*slave_config*] | 
| +#   The path to the 'buildslave' system configuration. | 
| +# | 
| +# [*slave_directory*] | 
| +#   The anchestor of the default buildbot::slave $basedir. | 
| +# | 
| +# [*slave_pacakges*] | 
| +#   The packages that provide the buildbot::slave dependencies. | 
| +# | 
| +# [*slave_runner*] | 
| +#   The path to the runner used for buildbot::slave instances. | 
| +# | 
| +# [*slave_service*] | 
| +#   The status 'buildslave' service status to ensure, if any. | 
| +# | 
| +# [*slave_user*] | 
| +#   The user operating the 'buildslave' service. | 
| +# | 
| +# === Examples: | 
| +# | 
| +#   class {'buildbot': | 
| +#     master => 'running', | 
| +#   } | 
| +# | 
| +class buildbot ( | 
| +  $master_config = '/etc/default/buildmaster', | 
| +  $master_directory = '/var/buildmaster', | 
| +  $master_packages = ['buildbot'], | 
| +  $master_runner = '/usr/bin/buildbot', | 
| +  $master_service = undef, | 
| +  $master_user = 'buildbot', | 
| +  $slave_config = '/etc/default/buildslave', | 
| +  $slave_directory = '/var/buildslave', | 
| +  $slave_packages = ['buildbot-slave'], | 
| +  $slave_runner = '/usr/bin/buildslave', | 
| +  $slave_service = undef, | 
| +  $slave_user = 'buildbot', | 
| +) { | 
| + | 
| +  @concat { | 
| +    'buildmaster': | 
| +      owner => $master_user, | 
| +      path => $master_config, | 
| +      require => Package[$master_packages]; | 
| +    'buildslave': | 
| +      owner => $slave_user, | 
| +      path => $slave_config, | 
| +      require => Package[$slave_packages]; | 
| +  } | 
| + | 
| +  @concat::fragment { | 
| +    'buildmaster': | 
| +      content => template('buildbot/buildmaster.erb'), | 
| +      order => 0, | 
| +      target => 'buildmaster'; | 
| +    'buildslave': | 
| +      content => template('buildbot/buildslave.erb'), | 
| +      order => 0, | 
| +      target => 'buildslave'; | 
| +  } | 
| + | 
| +  @file { | 
| +    $master_directory: | 
| +      ensure => 'directory', | 
| +      owner => $master_user, | 
| +      require => Package[$master_packages]; | 
| +    $slave_directory: | 
| +      ensure => 'directory', | 
| +      owner => $slave_user, | 
| +      require => Package[$slave_packages]; | 
| +  } | 
| + | 
| +  Service { | 
| +    hasrestart => true, | 
| +    hasstatus => false, | 
| +  } | 
| + | 
| +  @service { | 
| +    'buildmaster': | 
| +      ensure => $master_service ? { | 
| +        /^(running|started|true)$/ => 'running', | 
| +        default => 'stopped', | 
| +      }, | 
| +      pattern => "^$master_user.*python.*$master_runner", | 
| +      require => Package[$master_packages]; | 
| +    'buildslave': | 
| +      ensure => $slave_service ? { | 
| +        /^(running|started|true)$/ => 'running', | 
| +        default => 'stopped', | 
| +      }, | 
| +      pattern => "^$slave_user.*python.*$slave_runner", | 
| +      require => Package[$slave_packages]; | 
| +  } | 
| + | 
| +  Service['buildmaster'] <~ Exec <|creates == $master_config|> | 
| +  Service['buildmaster'] <~ File <|path == $master_config|> | 
| +  Service['buildmaster'] ~> | 
| + | 
| +  Service['buildslave'] <~ Exec <|creates == $slave_config|> | 
| +  Service['buildslave'] <~ File <|path == $slave_config|> | 
| + | 
| +  if $master_service != undef { | 
| +    ensure_packages($master_packages) | 
| +    realize(Service['buildmaster']) | 
| +  } | 
| + | 
| +  if $slave_service != undef { | 
| +    ensure_packages($slave_packages) | 
| +    realize(Service['buildslave']) | 
| +  } | 
| +} | 
|  |