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. # (Optional) Sends the virtualhost error log messages to syslog.
# Defaults to undef. # 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*] # [*headers*]
# (optional) Headers for the vhost. # (optional) Headers for the vhost.
# Defaults to undef # Defaults to undef
@ -118,32 +126,33 @@
# class { 'placement::wsgi::apache': } # class { 'placement::wsgi::apache': }
# #
class placement::wsgi::apache ( class placement::wsgi::apache (
$servername = $::fqdn, $servername = $::fqdn,
$api_port = 8778, $api_port = 8778,
$bind_host = undef, $bind_host = undef,
$path = '/', $path = '/',
$ssl = false, $ssl = false,
$workers = $::os_workers, $workers = $::os_workers,
$priority = 10, $priority = 10,
$threads = 1, $threads = 1,
$wsgi_process_display_name = undef, $wsgi_process_display_name = undef,
$ssl_cert = undef, $ssl_cert = undef,
$ssl_key = undef, $ssl_key = undef,
$ssl_chain = undef, $ssl_chain = undef,
$ssl_ca = undef, $ssl_ca = undef,
$ssl_crl_path = undef, $ssl_crl_path = undef,
$ssl_crl = undef, $ssl_crl = undef,
$ssl_certs_dir = undef, $ssl_certs_dir = undef,
$access_log_file = undef, $access_log_file = undef,
$access_log_pipe = undef, $access_log_pipe = undef,
$access_log_syslog = undef, $access_log_syslog = undef,
$access_log_format = undef, $access_log_format = undef,
$error_log_file = undef, $error_log_file = undef,
$error_log_pipe = undef, $error_log_pipe = undef,
$error_log_syslog = undef, $error_log_syslog = undef,
$headers = undef, $custom_wsgi_process_options = {},
$request_headers = undef, $headers = undef,
$vhost_custom_fragment = undef, $request_headers = undef,
$vhost_custom_fragment = undef,
) { ) {
include placement::deps include placement::deps
@ -152,39 +161,40 @@ class placement::wsgi::apache (
Anchor['placement::install::end'] -> Class['apache'] Anchor['placement::install::end'] -> Class['apache']
::openstacklib::wsgi::apache { 'placement_wsgi': ::openstacklib::wsgi::apache { 'placement_wsgi':
bind_host => $bind_host, bind_host => $bind_host,
bind_port => $api_port, bind_port => $api_port,
group => 'placement', group => 'placement',
path => $path, path => $path,
priority => $priority, priority => $priority,
servername => $servername, servername => $servername,
ssl => $ssl, ssl => $ssl,
ssl_ca => $ssl_ca, ssl_ca => $ssl_ca,
ssl_cert => $ssl_cert, ssl_cert => $ssl_cert,
ssl_certs_dir => $ssl_certs_dir, ssl_certs_dir => $ssl_certs_dir,
ssl_chain => $ssl_chain, ssl_chain => $ssl_chain,
ssl_crl => $ssl_crl, ssl_crl => $ssl_crl,
ssl_crl_path => $ssl_crl_path, ssl_crl_path => $ssl_crl_path,
ssl_key => $ssl_key, ssl_key => $ssl_key,
threads => $threads, threads => $threads,
user => 'placement', user => 'placement',
vhost_custom_fragment => $vhost_custom_fragment, vhost_custom_fragment => $vhost_custom_fragment,
workers => $workers, workers => $workers,
wsgi_daemon_process => 'placement-api', wsgi_daemon_process => 'placement-api',
wsgi_process_display_name => $wsgi_process_display_name, wsgi_process_display_name => $wsgi_process_display_name,
wsgi_process_group => 'placement-api', wsgi_process_group => 'placement-api',
wsgi_script_dir => $::placement::params::wsgi_script_path, wsgi_script_dir => $::placement::params::wsgi_script_path,
wsgi_script_file => 'placement-api', wsgi_script_file => 'placement-api',
wsgi_script_source => $::placement::params::wsgi_script_source, wsgi_script_source => $::placement::params::wsgi_script_source,
headers => $headers, headers => $headers,
request_headers => $request_headers, request_headers => $request_headers,
access_log_file => $access_log_file, custom_wsgi_process_options => $custom_wsgi_process_options,
access_log_pipe => $access_log_pipe, access_log_file => $access_log_file,
access_log_syslog => $access_log_syslog, access_log_pipe => $access_log_pipe,
access_log_format => $access_log_format, access_log_syslog => $access_log_syslog,
error_log_file => $error_log_file, access_log_format => $access_log_format,
error_log_pipe => $error_log_pipe, error_log_file => $error_log_file,
error_log_syslog => $error_log_syslog, 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 context 'when overriding parameters' do
let :params do let :params do
{ {
:servername => 'dummy.host', :servername => 'dummy.host',
:bind_host => '10.42.51.1', :bind_host => '10.42.51.1',
:api_port => 12345, :api_port => 12345,
:path => '/custom', :path => '/custom',
:ssl => true, :ssl => true,
:workers => 10, :workers => 10,
:ssl_cert => '/etc/ssl/certs/placement.crt', :custom_wsgi_process_options => {
:ssl_key => '/etc/ssl/private/placement.key', 'python_path' => '/my/python/path',
:ssl_chain => '/etc/ssl/certs/chain.pem', },
:ssl_ca => '/etc/ssl/certs/ca.pem', :ssl_cert => '/etc/ssl/certs/placement.crt',
:ssl_crl_path => '/etc/ssl/crl', :ssl_key => '/etc/ssl/private/placement.key',
:ssl_crl => '/etc/ssl/certs/crl.crt', :ssl_chain => '/etc/ssl/certs/chain.pem',
:ssl_certs_dir => '/etc/ssl/certs', :ssl_ca => '/etc/ssl/certs/ca.pem',
:vhost_custom_fragment => 'Timeout 99', :ssl_crl_path => '/etc/ssl/crl',
:wsgi_process_display_name => 'custom', :ssl_crl => '/etc/ssl/certs/crl.crt',
:threads => 5, :ssl_certs_dir => '/etc/ssl/certs',
:priority => 25, :vhost_custom_fragment => 'Timeout 99',
:headers => ['set X-XSS-Protection "1; mode=block"'], :wsgi_process_display_name => 'custom',
:request_headers => ['set Content-Type "application/json"'], :threads => 5,
:priority => 25,
:headers => ['set X-XSS-Protection "1; mode=block"'],
:request_headers => ['set Content-Type "application/json"'],
} }
end end
it { should contain_class('placement::params') } it { should contain_class('placement::params') }
it { should contain_openstacklib__wsgi__apache('placement_wsgi').with( it { should contain_openstacklib__wsgi__apache('placement_wsgi').with(
:bind_host => params[:bind_host], :bind_host => params[:bind_host],
:bind_port => params[:api_port], :bind_port => params[:api_port],
:group => 'placement', :group => 'placement',
:path => params[:path], :path => params[:path],
:priority => params[:priority], :priority => params[:priority],
:servername => params[:servername], :servername => params[:servername],
:ssl => params[:ssl], :ssl => params[:ssl],
:ssl_ca => params[:ssl_ca], :ssl_ca => params[:ssl_ca],
:ssl_cert => params[:ssl_cert], :ssl_cert => params[:ssl_cert],
:ssl_certs_dir => params[:ssl_certs_dir], :ssl_certs_dir => params[:ssl_certs_dir],
:ssl_chain => params[:ssl_chain], :ssl_chain => params[:ssl_chain],
:ssl_crl => params[:ssl_crl], :ssl_crl => params[:ssl_crl],
:ssl_crl_path => params[:ssl_crl_path], :ssl_crl_path => params[:ssl_crl_path],
:ssl_key => params[:ssl_key], :ssl_key => params[:ssl_key],
:threads => params[:threads], :threads => params[:threads],
:user => 'placement', :user => 'placement',
:vhost_custom_fragment => 'Timeout 99', :vhost_custom_fragment => 'Timeout 99',
:workers => params[:workers], :workers => params[:workers],
:wsgi_daemon_process => 'placement-api', :wsgi_daemon_process => 'placement-api',
:wsgi_process_display_name => params[:wsgi_process_display_name], :wsgi_process_display_name => params[:wsgi_process_display_name],
:wsgi_process_group => 'placement-api', :wsgi_process_group => 'placement-api',
:wsgi_script_dir => platform_params[:wsgi_script_path], :wsgi_script_dir => platform_params[:wsgi_script_path],
:wsgi_script_file => 'placement-api', :wsgi_script_file => 'placement-api',
:wsgi_script_source => platform_params[:wsgi_script_source], :wsgi_script_source => platform_params[:wsgi_script_source],
:headers => ['set X-XSS-Protection "1; mode=block"'], :headers => ['set X-XSS-Protection "1; mode=block"'],
:request_headers => ['set Content-Type "application/json"'], :request_headers => ['set Content-Type "application/json"'],
:custom_wsgi_process_options => {
'python_path' => '/my/python/path',
},
)} )}
end end