apache+mod_wsgi: Allow customizing wsgi process options

This change adds the missing capability to customize wsgi process
options, which is supported by the other modules.

Change-Id: Ia5cff022c1ad4f6402f2e9d4cd039059b176cd93
This commit is contained in:
Takashi Kajinami 2022-08-26 17:50:19 +09:00
parent 497d0a4e45
commit a945887286
3 changed files with 125 additions and 104 deletions

View File

@ -98,6 +98,14 @@
# (Optional) Sends the virtualhost error log messages to syslog.
# Defaults to undef.
#
# [*custom_wsgi_process_options*]
# (Optional) gives you the opportunity to add custom process options or to
# overwrite the default options for the WSGI main process.
# eg. to use a virtual python environment for the WSGI process
# you could set it to:
# { python-path => '/my/python/virtualenv' }
# Defaults to {}
#
# [*headers*]
# (optional) Headers for the vhost.
# Defaults to undef
@ -118,32 +126,33 @@
# class { 'placement::wsgi::apache': }
#
class placement::wsgi::apache (
$servername = $::fqdn,
$api_port = 8778,
$bind_host = undef,
$path = '/',
$ssl = false,
$workers = $::os_workers,
$priority = 10,
$threads = 1,
$wsgi_process_display_name = undef,
$ssl_cert = undef,
$ssl_key = undef,
$ssl_chain = undef,
$ssl_ca = undef,
$ssl_crl_path = undef,
$ssl_crl = undef,
$ssl_certs_dir = undef,
$access_log_file = undef,
$access_log_pipe = undef,
$access_log_syslog = undef,
$access_log_format = undef,
$error_log_file = undef,
$error_log_pipe = undef,
$error_log_syslog = undef,
$headers = undef,
$request_headers = undef,
$vhost_custom_fragment = undef,
$servername = $::fqdn,
$api_port = 8778,
$bind_host = undef,
$path = '/',
$ssl = false,
$workers = $::os_workers,
$priority = 10,
$threads = 1,
$wsgi_process_display_name = undef,
$ssl_cert = undef,
$ssl_key = undef,
$ssl_chain = undef,
$ssl_ca = undef,
$ssl_crl_path = undef,
$ssl_crl = undef,
$ssl_certs_dir = undef,
$access_log_file = undef,
$access_log_pipe = undef,
$access_log_syslog = undef,
$access_log_format = undef,
$error_log_file = undef,
$error_log_pipe = undef,
$error_log_syslog = undef,
$custom_wsgi_process_options = {},
$headers = undef,
$request_headers = undef,
$vhost_custom_fragment = undef,
) {
include placement::deps
@ -152,39 +161,40 @@ class placement::wsgi::apache (
Anchor['placement::install::end'] -> Class['apache']
::openstacklib::wsgi::apache { 'placement_wsgi':
bind_host => $bind_host,
bind_port => $api_port,
group => 'placement',
path => $path,
priority => $priority,
servername => $servername,
ssl => $ssl,
ssl_ca => $ssl_ca,
ssl_cert => $ssl_cert,
ssl_certs_dir => $ssl_certs_dir,
ssl_chain => $ssl_chain,
ssl_crl => $ssl_crl,
ssl_crl_path => $ssl_crl_path,
ssl_key => $ssl_key,
threads => $threads,
user => 'placement',
vhost_custom_fragment => $vhost_custom_fragment,
workers => $workers,
wsgi_daemon_process => 'placement-api',
wsgi_process_display_name => $wsgi_process_display_name,
wsgi_process_group => 'placement-api',
wsgi_script_dir => $::placement::params::wsgi_script_path,
wsgi_script_file => 'placement-api',
wsgi_script_source => $::placement::params::wsgi_script_source,
headers => $headers,
request_headers => $request_headers,
access_log_file => $access_log_file,
access_log_pipe => $access_log_pipe,
access_log_syslog => $access_log_syslog,
access_log_format => $access_log_format,
error_log_file => $error_log_file,
error_log_pipe => $error_log_pipe,
error_log_syslog => $error_log_syslog,
bind_host => $bind_host,
bind_port => $api_port,
group => 'placement',
path => $path,
priority => $priority,
servername => $servername,
ssl => $ssl,
ssl_ca => $ssl_ca,
ssl_cert => $ssl_cert,
ssl_certs_dir => $ssl_certs_dir,
ssl_chain => $ssl_chain,
ssl_crl => $ssl_crl,
ssl_crl_path => $ssl_crl_path,
ssl_key => $ssl_key,
threads => $threads,
user => 'placement',
vhost_custom_fragment => $vhost_custom_fragment,
workers => $workers,
wsgi_daemon_process => 'placement-api',
wsgi_process_display_name => $wsgi_process_display_name,
wsgi_process_group => 'placement-api',
wsgi_script_dir => $::placement::params::wsgi_script_path,
wsgi_script_file => 'placement-api',
wsgi_script_source => $::placement::params::wsgi_script_source,
headers => $headers,
request_headers => $request_headers,
custom_wsgi_process_options => $custom_wsgi_process_options,
access_log_file => $access_log_file,
access_log_pipe => $access_log_pipe,
access_log_syslog => $access_log_syslog,
access_log_format => $access_log_format,
error_log_file => $error_log_file,
error_log_pipe => $error_log_pipe,
error_log_syslog => $error_log_syslog,
}
}

View File

@ -0,0 +1,5 @@
---
features:
- |
The ``placement::wsgi::apache`` class now supports customizing wsgi process
options, by the new ``custom_wsgi_process_options`` parameter.

View File

@ -43,57 +43,63 @@ describe 'placement::wsgi::apache' do
context 'when overriding parameters' do
let :params do
{
:servername => 'dummy.host',
:bind_host => '10.42.51.1',
:api_port => 12345,
:path => '/custom',
:ssl => true,
:workers => 10,
:ssl_cert => '/etc/ssl/certs/placement.crt',
:ssl_key => '/etc/ssl/private/placement.key',
:ssl_chain => '/etc/ssl/certs/chain.pem',
:ssl_ca => '/etc/ssl/certs/ca.pem',
:ssl_crl_path => '/etc/ssl/crl',
:ssl_crl => '/etc/ssl/certs/crl.crt',
:ssl_certs_dir => '/etc/ssl/certs',
:vhost_custom_fragment => 'Timeout 99',
:wsgi_process_display_name => 'custom',
:threads => 5,
:priority => 25,
:headers => ['set X-XSS-Protection "1; mode=block"'],
:request_headers => ['set Content-Type "application/json"'],
:servername => 'dummy.host',
:bind_host => '10.42.51.1',
:api_port => 12345,
:path => '/custom',
:ssl => true,
:workers => 10,
:custom_wsgi_process_options => {
'python_path' => '/my/python/path',
},
:ssl_cert => '/etc/ssl/certs/placement.crt',
:ssl_key => '/etc/ssl/private/placement.key',
:ssl_chain => '/etc/ssl/certs/chain.pem',
:ssl_ca => '/etc/ssl/certs/ca.pem',
:ssl_crl_path => '/etc/ssl/crl',
:ssl_crl => '/etc/ssl/certs/crl.crt',
:ssl_certs_dir => '/etc/ssl/certs',
:vhost_custom_fragment => 'Timeout 99',
:wsgi_process_display_name => 'custom',
:threads => 5,
:priority => 25,
:headers => ['set X-XSS-Protection "1; mode=block"'],
:request_headers => ['set Content-Type "application/json"'],
}
end
it { should contain_class('placement::params') }
it { should contain_openstacklib__wsgi__apache('placement_wsgi').with(
:bind_host => params[:bind_host],
:bind_port => params[:api_port],
:group => 'placement',
:path => params[:path],
:priority => params[:priority],
:servername => params[:servername],
:ssl => params[:ssl],
:ssl_ca => params[:ssl_ca],
:ssl_cert => params[:ssl_cert],
:ssl_certs_dir => params[:ssl_certs_dir],
:ssl_chain => params[:ssl_chain],
:ssl_crl => params[:ssl_crl],
:ssl_crl_path => params[:ssl_crl_path],
:ssl_key => params[:ssl_key],
:threads => params[:threads],
:user => 'placement',
:vhost_custom_fragment => 'Timeout 99',
:workers => params[:workers],
:wsgi_daemon_process => 'placement-api',
:wsgi_process_display_name => params[:wsgi_process_display_name],
:wsgi_process_group => 'placement-api',
:wsgi_script_dir => platform_params[:wsgi_script_path],
:wsgi_script_file => 'placement-api',
:wsgi_script_source => platform_params[:wsgi_script_source],
:headers => ['set X-XSS-Protection "1; mode=block"'],
:request_headers => ['set Content-Type "application/json"'],
:bind_host => params[:bind_host],
:bind_port => params[:api_port],
:group => 'placement',
:path => params[:path],
:priority => params[:priority],
:servername => params[:servername],
:ssl => params[:ssl],
:ssl_ca => params[:ssl_ca],
:ssl_cert => params[:ssl_cert],
:ssl_certs_dir => params[:ssl_certs_dir],
:ssl_chain => params[:ssl_chain],
:ssl_crl => params[:ssl_crl],
:ssl_crl_path => params[:ssl_crl_path],
:ssl_key => params[:ssl_key],
:threads => params[:threads],
:user => 'placement',
:vhost_custom_fragment => 'Timeout 99',
:workers => params[:workers],
:wsgi_daemon_process => 'placement-api',
:wsgi_process_display_name => params[:wsgi_process_display_name],
:wsgi_process_group => 'placement-api',
:wsgi_script_dir => platform_params[:wsgi_script_path],
:wsgi_script_file => 'placement-api',
:wsgi_script_source => platform_params[:wsgi_script_source],
:headers => ['set X-XSS-Protection "1; mode=block"'],
:request_headers => ['set Content-Type "application/json"'],
:custom_wsgi_process_options => {
'python_path' => '/my/python/path',
},
)}
end