| OLD | NEW | 
|---|
| 1 class discourse( | 1 class discourse( | 
| 2     $domain, | 2     $domain, | 
| 3     $certificate, | 3     $certificate, | 
| 4     $private_key, | 4     $private_key, | 
| 5     $is_default = false | 5     $site_settings, | 
| 6   ) inherits private::discourse { | 6     $is_default = false, | 
|  | 7     $admins = hiera('discourse::admins', []) | 
|  | 8   ) { | 
| 7 | 9 | 
| 8   class { 'postgresql::globals': | 10   apt::source {'docker': | 
| 9     manage_package_repo => true, | 11     location => 'https://apt.dockerproject.org/repo', | 
| 10     version => '9.3', | 12     release => 'ubuntu-precise', | 
| 11   }-> | 13     repos => 'main', | 
| 12   class {"postgresql::server":} | 14     key => '58118E89F3A912897C070ADBF76221572C52609D', | 
| 13 | 15     key_content => template('discourse/dockersource.gpg.key'), | 
| 14   class {"postgresql::server::contrib": | 16     include_src => false, | 
| 15     package_ensure => 'present', |  | 
| 16   } | 17   } | 
| 17 | 18 | 
| 18   postgresql::server::database {'discourse':} | 19   package {'docker-engine': | 
| 19 | 20     ensure => '1.11.0-0~precise', | 
| 20   postgresql::server::role {'discourse': | 21     require => Apt::Source['docker'], | 
| 21     password_hash => postgresql_password('discourse', $database_password), |  | 
| 22     db => 'discourse', |  | 
| 23     login => true, |  | 
| 24     superuser => true, |  | 
| 25     require => Postgresql::Server::Database['discourse'] |  | 
| 26   } | 22   } | 
| 27 | 23 | 
| 28   $rvm_dependencies = ['curl', 'git-core', 'patch', 'build-essential', 'bison', | 24   package {'git': | 
| 29       'zlib1g-dev', 'libssl-dev', 'libxml2-dev', 'sqlite3', 'libsqlite3-dev', | 25     ensure => present, | 
| 30       'autotools-dev', 'libxslt1-dev', 'libyaml-0-2', 'autoconf', 'automake', |  | 
| 31       'libreadline6-dev', 'libyaml-dev', 'libtool', 'libgdbm-dev', |  | 
| 32       'libncurses5-dev', 'libffi-dev', 'pkg-config', 'gawk'] |  | 
| 33   $discourse_dependencies = ['redis-server', 'libjemalloc1'] |  | 
| 34   $gem_dependencies = ['libpq-dev'] |  | 
| 35   $image_optim_dependencies = ['advancecomp', 'gifsicle', 'jhead', 'jpegoptim', |  | 
| 36       'libjpeg-progs', 'optipng', 'pngcrush'] |  | 
| 37   $image_sorcery_dependencies = 'imagemagick' |  | 
| 38 |  | 
| 39   package {[$rvm_dependencies, $discourse_dependencies, $gem_dependencies, $imag
     e_optim_dependencies, $image_sorcery_dependencies]: |  | 
| 40     ensure => present |  | 
| 41   } | 26   } | 
| 42 | 27 | 
| 43   Exec <| tag == 'rvm' |> { | 28   service {'docker': | 
| 44     path => '/bin:/usr/bin:/usr/sbin:/usr/local/bin:/home/discourse/.rvm/bin', | 29     ensure => running, | 
| 45     user => discourse, | 30     require => Package['docker-engine'], | 
| 46     group => www-data, |  | 
| 47     environment => ['HOME=/home/discourse'], |  | 
| 48   } | 31   } | 
| 49 | 32 | 
| 50   exec {'install-rvm-key': | 33   file {'/var/discourse': | 
| 51     command => 'gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C2754
     62A1703113804BB82D39DC0E3', | 34     ensure => directory, | 
| 52     tag => 'rvm', | 35     mode => 755, | 
| 53     unless => 'gpg --list-keys | grep D39DC0E3', | 36     owner => root, | 
|  | 37     group => root | 
| 54   } | 38   } | 
| 55 | 39 | 
| 56   exec {'install-ruby': | 40   exec {'fetch-discourse-docker': | 
| 57     command => 'curl -sSL https://get.rvm.io | bash -s stable --ruby=2.1.2', | 41     command => "git clone https://github.com/discourse/discourse_docker.git /var
     /discourse", | 
| 58     tag => 'rvm', | 42     path => ["/usr/bin/", "/bin/"], | 
| 59     creates => '/home/discourse/.rvm', | 43     user => root, | 
| 60     timeout => 0, | 44     timeout => 0, | 
| 61     logoutput => true, | 45     require => [Package['git'], File['/var/discourse']], | 
| 62     require => [Exec['install-rvm-key'], Package[$rvm_dependencies]], | 46     unless => "test -d /var/discourse/.git" | 
| 63   } | 47   } | 
| 64 | 48 | 
| 65   exec {'install-bundler': | 49   file {'/var/discourse/containers/app.yml': | 
| 66     command => 'rvm default do gem install bundler', | 50     ensure => file, | 
| 67     tag => 'rvm', | 51     mode => 600, | 
| 68     unless => 'rvm default do gem list | grep "^bundler ")', | 52     owner => root, | 
| 69     require => Exec['install-ruby'], | 53     group => root, | 
|  | 54     content => template('discourse/app.yml.erb'), | 
|  | 55     require => Exec['fetch-discourse-docker'], | 
| 70   } | 56   } | 
| 71 | 57 | 
| 72   file {'/opt/discourse': | 58   exec {'rebuild': | 
| 73     ensure => directory, | 59     command => '/var/discourse/launcher rebuild app --skip-prereqs', | 
| 74     mode => 755, | 60     user => root, | 
| 75     owner => discourse, | 61     subscribe => File['/var/discourse/containers/app.yml'], | 
| 76     group => www-data | 62     refreshonly => true, | 
|  | 63     logoutput => 'on_failure', | 
|  | 64     timeout => 0, | 
|  | 65     require => [Exec['fetch-discourse-docker'], | 
|  | 66                 Service['docker'], | 
|  | 67                 Package['git']], | 
| 77   } | 68   } | 
| 78 | 69 | 
| 79   file {['/opt/discourse/tmp', '/opt/discourse/tmp/pids']: | 70   exec {'start': | 
| 80     ensure => directory, | 71     command => '/var/discourse/launcher start app --skip-prereqs', | 
| 81     mode => 755, | 72     user => root, | 
| 82     owner => discourse, | 73     logoutput => 'on_failure', | 
| 83     group => www-data, | 74     require => Exec['rebuild'], | 
| 84     require => Exec['fetch-discourse'] |  | 
| 85   } |  | 
| 86 |  | 
| 87   file {'/opt/discourse/config/discourse.conf': |  | 
| 88     mode => 600, |  | 
| 89     owner => discourse, |  | 
| 90     group => www-data, |  | 
| 91     content => template('discourse/discourse.conf.erb'), |  | 
| 92     notify => Service['discourse'], |  | 
| 93     require => Exec['fetch-discourse'] |  | 
| 94   } |  | 
| 95 |  | 
| 96   file {'/usr/local/bin/init-discourse': |  | 
| 97     mode => 0755, |  | 
| 98     owner => root, |  | 
| 99     group => root, |  | 
| 100     source => 'puppet:///modules/discourse/init-discourse' |  | 
| 101   } |  | 
| 102 |  | 
| 103   user {'discourse': |  | 
| 104     ensure => present, |  | 
| 105     comment => 'Discourse user', |  | 
| 106     home => '/home/discourse', |  | 
| 107     gid => www-data, |  | 
| 108     password => '*', |  | 
| 109     managehome => true |  | 
| 110   } |  | 
| 111 |  | 
| 112   file {'/etc/sudoers.d/discourse': |  | 
| 113     ensure => present, |  | 
| 114     owner => root, |  | 
| 115     group => root, |  | 
| 116     mode => 0440, |  | 
| 117     source => 'puppet:///modules/discourse/sudoers', |  | 
| 118     require => User['discourse'] |  | 
| 119   } |  | 
| 120 |  | 
| 121   exec {'fetch-discourse': |  | 
| 122     command => "hg clone https://hg.adblockplus.org/discourse /opt/discourse", |  | 
| 123     path => ["/usr/bin/", "/bin/"], |  | 
| 124     user => discourse, |  | 
| 125     group => www-data, |  | 
| 126     timeout => 0, |  | 
| 127     require => [Package['mercurial'], File['/opt/discourse']], |  | 
| 128     notify => Exec['init-discourse'], |  | 
| 129     onlyif => "test ! -d /opt/discourse/.hg" |  | 
| 130   } |  | 
| 131 |  | 
| 132   file {'/opt/discourse/config/initializers/airbrake.rb': |  | 
| 133     ensure => absent, |  | 
| 134     before => Exec['init-discourse'], |  | 
| 135   } |  | 
| 136 |  | 
| 137   file {'/opt/discourse/config/version.rb': |  | 
| 138     ensure => present, |  | 
| 139     owner => discourse, |  | 
| 140     group => www-data, |  | 
| 141 |  | 
| 142     # This is hardcoded here so that Discourse doesn't try to extract it from |  | 
| 143     # the repository. Ideally, we should update it when updating Discourse. |  | 
| 144     content => '$git_version = "a324c71869cad20a40f7979354cd731041878276"', |  | 
| 145     require => Exec['fetch-discourse'], |  | 
| 146     before => Exec['init-discourse'], |  | 
| 147   } |  | 
| 148 |  | 
| 149   exec {'init-discourse': |  | 
| 150     command => 'rvm default do /usr/local/bin/init-discourse', |  | 
| 151     tag => 'rvm', |  | 
| 152     subscribe => File['/usr/local/bin/init-discourse'], |  | 
| 153     refreshonly => true, |  | 
| 154     timeout => 0, |  | 
| 155     logoutput => true, |  | 
| 156     require => [Exec['install-bundler'], |  | 
| 157                 Package[$discourse_dependencies, $gem_dependencies], |  | 
| 158                 User['discourse'], File['/etc/sudoers.d/discourse'], |  | 
| 159                 Exec['fetch-discourse'], |  | 
| 160                 File['/opt/discourse/config/discourse.conf'], |  | 
| 161                 Postgresql::Server::Role['discourse']] |  | 
| 162   } |  | 
| 163 |  | 
| 164   Discourse::Sitesetting <| |> { |  | 
| 165     require => Exec['init-discourse'] |  | 
| 166   } |  | 
| 167 |  | 
| 168   discourse::sitesetting {'title': |  | 
| 169     ensure => present, |  | 
| 170     type => 1, |  | 
| 171     value => 'Adblock Plus internal discussions' |  | 
| 172   } |  | 
| 173 |  | 
| 174   discourse::sitesetting {'notification_email': |  | 
| 175     ensure => present, |  | 
| 176     type => 1, |  | 
| 177     value => 'donotreply@adblockplus.org' |  | 
| 178   } |  | 
| 179 |  | 
| 180   discourse::sitesetting {'contact_email': |  | 
| 181     ensure => present, |  | 
| 182     type => 1, |  | 
| 183     value => 'admins@adblockplus.org' |  | 
| 184   } |  | 
| 185 |  | 
| 186   discourse::sitesetting {'site_contact_username': |  | 
| 187     ensure => present, |  | 
| 188     type => 1, |  | 
| 189     value => 'system' |  | 
| 190   } |  | 
| 191 |  | 
| 192   discourse::sitesetting {'must_approve_users': |  | 
| 193     ensure => present, |  | 
| 194     type => 5, |  | 
| 195     value => 'f' |  | 
| 196   } |  | 
| 197 |  | 
| 198   discourse::sitesetting {'login_required': |  | 
| 199     ensure => present, |  | 
| 200     type => 5, |  | 
| 201     value => 't' |  | 
| 202   } |  | 
| 203 |  | 
| 204   discourse::sitesetting {'email_domains_blacklist': |  | 
| 205     ensure => present, |  | 
| 206     type => 1, |  | 
| 207     value => '' |  | 
| 208   } |  | 
| 209 |  | 
| 210   discourse::sitesetting {'email_domains_whitelist': |  | 
| 211     ensure => present, |  | 
| 212     type => 1, |  | 
| 213     value => 'adblockplus.org|eyeo.com' |  | 
| 214   } |  | 
| 215 |  | 
| 216   discourse::sitesetting {'use_https': |  | 
| 217     ensure => present, |  | 
| 218     type => 5, |  | 
| 219     value => 't' |  | 
| 220   } |  | 
| 221 |  | 
| 222   discourse::sitesetting {'company_full_name': |  | 
| 223     ensure => present, |  | 
| 224     type => 1, |  | 
| 225     value => 'Eyeo GmbH' |  | 
| 226   } |  | 
| 227 |  | 
| 228   discourse::sitesetting {'company_short_name': |  | 
| 229     ensure => present, |  | 
| 230     type => 1, |  | 
| 231     value => 'Eyeo' |  | 
| 232   } |  | 
| 233 |  | 
| 234   discourse::sitesetting {'company_domain': |  | 
| 235     ensure => present, |  | 
| 236     type => 1, |  | 
| 237     value => 'eyeo.com' |  | 
| 238   } |  | 
| 239 |  | 
| 240   discourse::sitesetting {'enable_local_logins': |  | 
| 241     ensure => present, |  | 
| 242     type => 5, |  | 
| 243     value => 'f' |  | 
| 244   } |  | 
| 245 |  | 
| 246   discourse::sitesetting {'enable_local_account_create': |  | 
| 247     ensure => present, |  | 
| 248     type => 5, |  | 
| 249     value => 'f' |  | 
| 250   } |  | 
| 251 |  | 
| 252   discourse::sitesetting {'enable_google_logins': |  | 
| 253     ensure => present, |  | 
| 254     type => 5, |  | 
| 255     value => 'f' |  | 
| 256   } |  | 
| 257 |  | 
| 258   discourse::sitesetting {'enable_google_oauth2_logins': |  | 
| 259     ensure => present, |  | 
| 260     type => 5, |  | 
| 261     value => 't' |  | 
| 262   } |  | 
| 263 |  | 
| 264   discourse::sitesetting {'google_oauth2_client_id': |  | 
| 265     ensure => present, |  | 
| 266     type => 1, |  | 
| 267     value => $google_client_id |  | 
| 268   } |  | 
| 269 |  | 
| 270   discourse::sitesetting {'google_oauth2_client_secret': |  | 
| 271     ensure => present, |  | 
| 272     type => 1, |  | 
| 273     value => $google_client_secret |  | 
| 274   } |  | 
| 275 |  | 
| 276   discourse::sitesetting {'enable_facebook_logins': |  | 
| 277     ensure => present, |  | 
| 278     type => 5, |  | 
| 279     value => 'f' |  | 
| 280   } |  | 
| 281 |  | 
| 282   discourse::sitesetting {'enable_twitter_logins': |  | 
| 283     ensure => present, |  | 
| 284     type => 5, |  | 
| 285     value => 'f' |  | 
| 286   } |  | 
| 287 |  | 
| 288   discourse::sitesetting {'enable_github_logins': |  | 
| 289     ensure => present, |  | 
| 290     type => 5, |  | 
| 291     value => 'f' |  | 
| 292   } |  | 
| 293 |  | 
| 294   discourse::sitesetting {'enable_yahoo_logins': |  | 
| 295     ensure => present, |  | 
| 296     type => 5, |  | 
| 297     value => 'f' |  | 
| 298   } |  | 
| 299 |  | 
| 300   discourse::sitesetting {'enforce_global_nicknames': |  | 
| 301     ensure => present, |  | 
| 302     type => 5, |  | 
| 303     value => 'f' |  | 
| 304   } |  | 
| 305 |  | 
| 306   discourse::sitesetting {'allow_user_locale': |  | 
| 307     ensure => present, |  | 
| 308     type => 5, |  | 
| 309     value => 't' |  | 
| 310   } |  | 
| 311 |  | 
| 312   discourse::sitesetting {'white_listed_spam_host_domains': |  | 
| 313     ensure => present, |  | 
| 314     type => 1, |  | 
| 315     value => 'adblockplus.org,eyeo.com' |  | 
| 316   } |  | 
| 317 |  | 
| 318   discourse::sitesetting {'max_mentions_per_post': |  | 
| 319     ensure => present, |  | 
| 320     type => 3, |  | 
| 321     value => '50', |  | 
| 322   } |  | 
| 323 |  | 
| 324   Customservice { |  | 
| 325     user => 'discourse', |  | 
| 326     workdir => '/opt/discourse', |  | 
| 327     env => ['RAILS_ENV=production', 'RUBY_GC_MALLOC_LIMIT=90000000', |  | 
| 328       'UNICORN_WORKERS=2', 'LD_PRELOAD=/usr/lib/libjemalloc.so.1'], |  | 
| 329     require => Exec['init-discourse'] |  | 
| 330   } |  | 
| 331 |  | 
| 332   customservice {'discourse': |  | 
| 333     command => '/home/discourse/.rvm/bin/rvm default do bundle exec config/unico
     rn_launcher -c config/unicorn.conf.rb', |  | 
| 334     require => File['/opt/discourse/tmp/pids'], |  | 
| 335   } |  | 
| 336 |  | 
| 337   customservice {'sidekiq': |  | 
| 338     command => '/home/discourse/.rvm/bin/rvm default do bundle exec sidekiq' |  | 
| 339   } | 75   } | 
| 340 | 76 | 
| 341   class {'nginx': | 77   class {'nginx': | 
| 342     worker_connections => 500 | 78     worker_connections => 500 | 
| 343   } | 79   } | 
| 344 | 80 | 
| 345   nginx::hostconfig{$domain: | 81   nginx::hostconfig {$domain: | 
| 346     source => 'puppet:///modules/discourse/site.conf', | 82     source => 'puppet:///modules/discourse/site.conf', | 
| 347     global_config => ' |  | 
| 348       upstream discourse { |  | 
| 349         server localhost:3000; |  | 
| 350       }', |  | 
| 351     is_default => $is_default, | 83     is_default => $is_default, | 
| 352     certificate => $certificate, | 84     certificate => $certificate, | 
| 353     private_key => $private_key, | 85     private_key => $private_key, | 
| 354     log => 'access_log_intraforum' | 86     log => 'access_log_intraforum' | 
| 355   } | 87   } | 
| 356 } | 88 } | 
| OLD | NEW | 
|---|