system-config/modules/openstack_project/manifests/ask.pp
Jens Harbott 1dcba08f5b Restart apache2 on logrotate on ask.o.o
When apache2 gets reloaded multiple times in quick succession, it may
crash and fail completely. Lately this has been seen very often on our
ask.openstack.org instance, so let us use the more intrusive, but also
hopefully more stable in the end result method of restarting instead.

Change-Id: I44e4561f8696415471f65b75d683c48636fb413f
2019-11-13 15:54:50 +00:00

196 lines
5.9 KiB
Puppet

# == Class: openstack_project::ask
#
# ask.openstack.org Q&A support website
#
class openstack_project::ask (
$db_password,
$redis_password,
$site_ssl_cert_file_contents,
$site_ssl_key_file_contents,
$site_ssl_chain_file_contents,
$db_name = 'askbotdb',
$db_user = 'ask',
$redis_port = '6378',
$redis_max_memory = '512m',
$redis_bind = '127.0.0.1',
$solr_version = '4.10.4',
$askbot_revision = '87086ebcefc5be29e80d3228e465e6bec4523fcf'
) {
if $::lsbdistcodename == "xenial" {
# NOTE(ianw) This is a horrible, horrible hack because puppet-solr
# has not been updated to handle Xenial where jetty split into a
# jetty8 package. This equivs deb pre-depends on jetty8, and sets
# up a few links to fool (confuse?) puppet-solr enough to install
# and run...
file { '/root/jetty_1.0_all.deb':
ensure => present,
owner => 'root',
group => 'root',
mode => '0644',
source => 'puppet:///modules/openstack_project/ask/jetty_1.0_all.deb'
}
package { 'jetty':
provider => dpkg,
ensure => present,
source => "/root/jetty_1.0_all.deb",
require => File['/root/jetty_1.0_all.deb']
}
}
file { '/srv/dist':
ensure => directory,
owner => 'root',
group => 'root',
mode => '0755',
}
# solr search engine
file { '/srv/dist/solr':
ensure => directory,
owner => 'root',
group => 'root',
mode => '0755',
require => File['/srv/dist'],
}
class { 'solr':
mirror => 'https://archive.apache.org/dist/lucene/solr',
version => $solr_version,
cores => [ 'core-default', 'core-en', 'core-zh' ],
dist_root => '/srv/dist/solr',
require => File['/srv/dist/solr'],
}
file { '/usr/share/solr/core-en/conf/schema.xml':
ensure => present,
content => template('openstack_project/askbot/schema.en.xml.erb'),
replace => true,
owner => 'jetty',
group => 'jetty',
mode => '0644',
require => File['/usr/share/solr/core-zh/conf'],
}
file { '/usr/share/solr/core-zh/conf/schema.xml':
ensure => present,
content => template('openstack_project/askbot/schema.cn.xml.erb'),
replace => true,
owner => 'jetty',
group => 'jetty',
mode => '0644',
require => File['/usr/share/solr/core-en/conf'],
}
# deploy smartcn Chinese analyzer from solr contrib/analysys-extras
file { "/usr/share/solr/WEB-INF/lib/lucene-analyzers-smartcn-${solr_version}.jar":
ensure => present,
replace => 'no',
source => "/srv/dist/solr/solr-${solr_version}/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-${solr_version}.jar",
owner => 'root',
group => 'root',
mode => '0644',
require => [ Exec['copy-solr'], File['/srv/dist/solr'] ],
}
# postgresql database
class { 'postgresql::server': }
postgresql::server::db { $db_name:
user => $db_user,
password => postgresql_password($db_user, $db_password),
}
# redis cache
class { 'redis':
redis_port => $redis_port,
redis_max_memory => $redis_max_memory,
redis_bind => $redis_bind,
redis_password => $redis_password,
version => '2.8.4',
before => Class['askbot'],
}
# askbot site
class { 'askbot':
askbot_revision => $askbot_revision,
db_provider => 'pgsql',
db_name => $db_name,
db_user => $db_user,
db_password => $db_password,
redis_enabled => true,
redis_port => $redis_port,
redis_max_memory => $redis_max_memory,
redis_bind => $redis_bind,
redis_password => $redis_password,
custom_theme_enabled => true,
custom_theme_name => 'os',
site_name => 'ask.openstack.org',
askbot_debug => false,
solr_enabled => true,
site_ssl_enabled => true,
site_ssl_cert_file => '/etc/ssl/certs/ask.openstack.org.pem',
site_ssl_key_file => '/etc/ssl/private/ask.openstack.org.key',
site_ssl_chain_file => '/etc/ssl/certs/ask.openstack.org_ca.pem',
site_ssl_cert_file_contents => $site_ssl_cert_file_contents,
site_ssl_key_file_contents => $site_ssl_key_file_contents,
site_ssl_chain_file_contents => $site_ssl_chain_file_contents,
template_settings => 'openstack_project/askbot/settings.py.erb',
}
# askbot-theme openstack theme
git { 'askbot-theme':
ensure => present,
path => '/srv/askbot-site/themes',
branch => 'master',
origin => 'https://opendev.org/opendev/askbot-theme',
latest => true,
require => [
File['/srv/askbot-site'], Package['git']
],
before => Exec['askbot-syncdb'],
notify => [
Exec['theme-bundle-install-os'],
Exec['theme-bundle-compile-os'],
Exec['askbot-static-generate'],
],
}
askbot::theme::compass { 'os':
require => Git['askbot-theme'],
before => Exec['askbot-static-generate'],
}
# site backup
pgsql_backup::backup { $db_name:
database_user => $db_user,
database_password => $db_password,
require => Postgresql::Server::Db[$db_name],
num_backups => '10',
}
include bup
bup::site { 'ord.rax':
backup_user => 'bup-ask01',
backup_server => 'backup01.ord.rax.ci.openstack.org',
}
class { '::httpd::logrotate':
options => [
'daily',
'missingok',
'rotate 7',
'compress',
'delaycompress',
'notifempty',
'create 640 root adm',
],
postrotate => [
"if service ${::httpd::params::apache_name} status > /dev/null; then \\",
" service ${::httpd::params::apache_name} restart > /dev/null; fi; \\",
],
}
}