puppet-openstack_health/manifests/api.pp

105 lines
3.0 KiB
Puppet

# Install and maintain OpenStack Health.
# params:
# source_dir:
# The directory where the application will be running
# serveradmin:
# Used in the Apache virtual host, eg., openstack-health@openstack.org
# vhost_name:
# Used in the Apache virtual host, eg., health.openstack.org
# vhost_port:
# Used in the Apache virtual host, eg., 5000
class openstack_health::api(
$db_uri = undef,
$source_dir = '/opt/openstack-health',
$server_admin = "webmaster@${::fqdn}",
$vhost_name = 'localhost',
$vhost_port = 5000,
$ignored_run_metadata_keys = undef,
) {
include ::httpd::mod::wsgi
$default_ignored_run_metadata_keys = ['build_change', 'build_node',
'build_patchset', 'build_ref',
'build_short_uuid', 'build_uuid',
'build_zuul_url', 'filename']
if $ignored_run_metadata_keys {
# In case it was defined, ensure the value provided is an array
if is_array($ignored_run_metadata_keys) {
$ignored_keys = $ignored_run_metadata_keys
} else {
fail('$ignored_run_metadata_keys parameter should be an array of strings')
}
} else {
# In case it was not defined, use the default value
$ignored_keys = $default_ignored_run_metadata_keys
}
$api_dir = "${source_dir}/openstack_health"
$virtualenv_dir = "${source_dir}/.venv"
class { '::python':
dev => true,
pip => true,
virtualenv => true,
version => 'system',
}
::python::virtualenv { $virtualenv_dir:
ensure => present,
require => Class['::python'],
}
exec { 'requirements':
command => "${virtualenv_dir}/bin/pip install -U -r ${source_dir}/requirements.txt",
require => Python::Virtualenv[$virtualenv_dir],
subscribe => Vcsrepo[$source_dir],
refreshonly => true,
timeout => 1800,
}
exec { 'package-application':
command => "${virtualenv_dir}/bin/pip install -e ${source_dir}",
refreshonly => true,
subscribe => Exec['requirements'],
}
file { '/etc/openstack-health.conf':
ensure => present,
content => template('openstack_health/openstack-health.conf.erb'),
owner => 'openstack_health',
group => 'openstack_health',
mode => '0644',
subscribe => Vcsrepo[$source_dir],
}
::httpd::vhost { "${vhost_name}-api":
docroot => 'MEANINGLESS ARGUMENT',
port => $vhost_port,
priority => '50',
ssl => false,
template => 'openstack_health/openstack-health-api.vhost.erb',
require => [
File['/etc/openstack-health.conf'],
Exec['package-application'],
],
}
if ! defined(Httpd::Mod['cache']) {
httpd::mod { 'cache':
ensure => present,
}
}
if $::operatingsystem == 'Ubuntu' and $::operatingsystemrelease == '12.04' {
$cache_disk_module = 'disk_cache'
} else {
$cache_disk_module = 'cache_disk'
}
if ! defined(Httpd::Mod[$cache_disk_module]) {
httpd::mod { $cache_disk_module:
ensure => present,
}
}
}