Jeremy Stanley 06bfcaa60e Run database migrations when necessary
Check the output of the `storage status` command for appearance of
"Not Applied" migrations, and run an upgrade if so. This works
around an earlier assumption that the command would exit nonzero
when there are pending migrations, but it seems to exit zero even
under those conditions.

Change-Id: I5ff8026bfaaf31c8abcd55efc217256605be9e73
2016-12-19 19:22:30 +00:00

196 lines
6.0 KiB
Puppet

# Copyright 2016 Hewlett Packard Enterprise Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# == Class: phabricator::install
#
# Installation of phabricator itself.
#
class phabricator::install (
$phabricator_dir = $phabricator::vars::phabricator_dir,
$mysql_database = $phabricator::vars::mysql_database,
$mysql_host = $phabricator::vars::mysql_host,
$mysql_port = $phabricator::vars::mysql_port,
$mysql_user = $phabricator::vars::mysql_user,
$mysql_user_password = $phabricator::vars::mysql_user_password,
$httpd_vhost = $phabricator::vars::httpd_vhost,
) {
# Dependencies
package { [
'php5',
'php5-mysql',
'php5-gd',
'php5-dev',
'php5-curl',
'php-apc',
'php5-cli',
'php5-json',
'sendmail',
'python-pygments']:
ensure => present,
}
if !defined(Package['git']) {
package { 'git':
ensure => present
}
}
if !defined(Package['libapache2-mod-auth-openid']) {
package { 'libapache2-mod-auth-openid':
ensure => present
}
}
# Set "post_max_size" in your PHP configuration to at least 32MB to support
# large file uploads.
ini_setting { 'Increase post_max_size in php.ini':
ensure => present,
path => '/etc/php5/apache2/php.ini',
section => 'PHP',
setting => 'post_max_size',
value => '32M',
notify => Service['httpd'],
}
# In production, OPcache should be configured to never revalidate code. This
# will slightly improve performance. To do this, disable
# "opcache.validate_timestamps" in your PHP configuration.
ini_setting { 'Set opcache.validate_timestamps in php.ini':
ensure => present,
path => '/etc/php5/apache2/php.ini',
section => 'opcache',
setting => 'opcache.validate_timestamps',
value => '0',
notify => Service['httpd'],
}
# PHP setting "always_populate_raw_post_data" should be set to "-1" to avoid
# deprecation warnings.
ini_setting { 'Disable PHP always_populate_raw_post_data on php.ini':
ensure => present,
path => '/etc/php5/apache2/php.ini',
section => 'PHP',
setting => 'always_populate_raw_post_data',
value => '-1',
notify => Service['httpd'],
}
file { [$phabricator_dir, "${phabricator_dir}/repo"]:
ensure => directory,
}
vcsrepo { "${phabricator_dir}/phabricator":
ensure => latest,
provider => git,
source => 'https://github.com/phacility/phabricator.git',
revision => 'stable',
require => [
File[$phabricator_dir],
Package['git'],
]
}
vcsrepo { "${phabricator_dir}/arcanist":
ensure => latest,
provider => git,
source => 'https://github.com/phacility/arcanist.git',
revision => 'stable',
require => [
File[$phabricator_dir],
Package['git'],
]
}
vcsrepo { "${phabricator_dir}/libphutil":
ensure => latest,
provider => git,
source => 'https://github.com/phacility/libphutil.git',
revision => 'stable',
require => [
File[$phabricator_dir],
Package['git'],
]
}
vcsrepo { "${phabricator_dir}/libphremoteuser":
ensure => latest,
provider => git,
source => 'https://github.com/psigen/libphremoteuser.git',
revision => 'master',
require => [
File[$phabricator_dir],
Package['git', 'libapache2-mod-auth-openid'],
]
}
exec { 'Letting Phabricator know about libphremoteuser...':
command => "${phabricator_dir}/phabricator/bin/config set load-libraries '[\"libphremoteuser/src\"]'",
subscribe => Vcsrepo["${phabricator_dir}/libphremoteuser"],
require => [
Vcsrepo["${phabricator_dir}/arcanist"],
Vcsrepo["${phabricator_dir}/libphremoteuser"],
]
}
exec {'set-auth_providerconfig':
command => "/usr/bin/mysql -u ${mysql_user} -p${mysql_user_password} < ${phabricator_dir}/set-auth_providerconfig.sql",
subscribe => File['set-auth_providerconfig.sql'],
require => [
Vcsrepo["${phabricator_dir}/phabricator"],
File['set-auth_providerconfig.sql'],
File[$phabricator_dir],
Service['Phabricator-daemons']
]
}
file {'set-auth_providerconfig.sql':
ensure => present,
path => "${phabricator_dir}/set-auth_providerconfig.sql",
content => template('phabricator/set-auth_providerconfig.sql.erb'),
}
file { 'local.json':
ensure => present,
path => "${phabricator_dir}/phabricator/conf/local/local.json",
content => template('phabricator/local.json.erb'),
require => Vcsrepo["${phabricator_dir}/phabricator"],
notify => Service['httpd'],
}
exec { 'load-initial-db':
command => "${phabricator_dir}/phabricator/bin/storage upgrade --force",
onlyif => "${phabricator_dir}/phabricator/bin/storage status | grep -q 'Not Applied'",
require => [
Vcsrepo["${phabricator_dir}/phabricator"],
Vcsrepo["${phabricator_dir}/libphutil"],
Vcsrepo["${phabricator_dir}/arcanist"],
]
}
service { 'Phabricator-daemons':
ensure => running,
provider => base,
start => "${phabricator_dir}/phabricator/bin/phd start",
stop => "${phabricator_dir}/phabricator/bin/phd stop",
restart => "${phabricator_dir}/phabricator/bin/phd restart",
status => "${phabricator_dir}/phabricator/bin/phd status",
subscribe => Vcsrepo["${phabricator_dir}/libphutil"],
require => [
File[$phabricator_dir],
Vcsrepo["${phabricator_dir}/phabricator"],
Vcsrepo["${phabricator_dir}/libphutil"],
Vcsrepo["${phabricator_dir}/arcanist"],
]
}
}