From 351ec64f67f1b1dc3eeaa3a9bc955dfa4d1bb07c Mon Sep 17 00:00:00 2001 From: Aleksandr Didenko Date: Tue, 28 Apr 2015 16:00:25 +0300 Subject: [PATCH] Custom file source for wsgi scripts Adds possibility to: - use custom file source for wsgi scripts - use symlinks for wsgi scripts Change-Id: I941bf8804982e9081812e076f7a736f413220047 Closes-bug: #1449553 --- manifests/wsgi/apache.pp | 99 +++++++++++++---------- spec/classes/keystone_wsgi_apache_spec.rb | 29 +++++++ 2 files changed, 87 insertions(+), 41 deletions(-) diff --git a/manifests/wsgi/apache.pp b/manifests/wsgi/apache.pp index 165e399e9..66e28aacc 100644 --- a/manifests/wsgi/apache.pp +++ b/manifests/wsgi/apache.pp @@ -73,13 +73,21 @@ # apache::vhost ssl parameters. # Optional. Default to apache::vhost 'ssl_*' defaults. # -# [*priority*] -# (optional) The priority for the vhost. -# Defaults to '10' +# [*priority*] +# (optional) The priority for the vhost. +# Defaults to '10' # -# [*threads*] -# (optional) The number of threads for the vhost. -# Defaults to $::processorcount +# [*threads*] +# (optional) The number of threads for the vhost. +# Defaults to $::processorcount +# +# [*wsgi_script_ensure*] +# (optional) File ensure parameter for wsgi scripts. +# Defaults to 'file'. +# +# [*wsgi_script_source*] +# (optional) Wsgi script source. +# Defaults to undef. # # == Dependencies # @@ -105,23 +113,25 @@ # Copyright 2013 eNovance # class keystone::wsgi::apache ( - $servername = $::fqdn, - $public_port = 5000, - $admin_port = 35357, - $bind_host = undef, - $public_path = '/', - $admin_path = '/', - $ssl = true, - $workers = 1, - $ssl_cert = undef, - $ssl_key = undef, - $ssl_chain = undef, - $ssl_ca = undef, - $ssl_crl_path = undef, - $ssl_crl = undef, - $ssl_certs_dir = undef, - $threads = $::processorcount, - $priority = '10', + $servername = $::fqdn, + $public_port = 5000, + $admin_port = 35357, + $bind_host = undef, + $public_path = '/', + $admin_path = '/', + $ssl = true, + $workers = 1, + $ssl_cert = undef, + $ssl_key = undef, + $ssl_chain = undef, + $ssl_ca = undef, + $ssl_crl_path = undef, + $ssl_crl = undef, + $ssl_certs_dir = undef, + $threads = $::processorcount, + $priority = '10', + $wsgi_script_ensure = 'file', + $wsgi_script_source = undef, ) { include ::keystone::params @@ -159,28 +169,35 @@ class keystone::wsgi::apache ( require => Package['httpd'], } - file { 'keystone_wsgi_admin': - ensure => file, - path => "${::keystone::params::keystone_wsgi_script_path}/admin", - source => $::keystone::params::keystone_wsgi_script_source, - owner => 'keystone', - group => 'keystone', - mode => '0644', - # source file provided by keystone package - require => [File[$::keystone::params::keystone_wsgi_script_path], Package['keystone']], + $wsgi_files = { + 'keystone_wsgi_admin' => { + 'path' => "${::keystone::params::keystone_wsgi_script_path}/admin", + }, + 'keystone_wsgi_main' => { + 'path' => "${::keystone::params::keystone_wsgi_script_path}/main", + }, } - file { 'keystone_wsgi_main': - ensure => file, - path => "${::keystone::params::keystone_wsgi_script_path}/main", - source => $::keystone::params::keystone_wsgi_script_source, - owner => 'keystone', - group => 'keystone', - mode => '0644', - # source file provided by keystone package - require => [File[$::keystone::params::keystone_wsgi_script_path], Package['keystone']], + $wsgi_file_defaults = { + 'ensure' => $wsgi_script_ensure, + 'owner' => 'keystone', + 'group' => 'keystone', + 'mode' => '0644', + 'require' => [File[$::keystone::params::keystone_wsgi_script_path], Package['keystone']], } + $wsgi_script_source_real = $wsgi_script_source ? { + default => $wsgi_script_source, + undef => $::keystone::params::keystone_wsgi_script_source, + } + + case $wsgi_script_ensure { + 'link': { $wsgi_file_source = { 'target' => $wsgi_script_source_real } } + default: { $wsgi_file_source = { 'source' => $wsgi_script_source_real } } + } + + create_resources('file', $wsgi_files, merge($wsgi_file_defaults, $wsgi_file_source)) + $wsgi_daemon_process_options_main = { user => 'keystone', group => 'keystone', diff --git a/spec/classes/keystone_wsgi_apache_spec.rb b/spec/classes/keystone_wsgi_apache_spec.rb index 0612b9424..194239545 100644 --- a/spec/classes/keystone_wsgi_apache_spec.rb +++ b/spec/classes/keystone_wsgi_apache_spec.rb @@ -208,6 +208,35 @@ describe 'keystone::wsgi::apache' do it_raises 'a Puppet::Error', /When using the same port for public & private endpoints, public_path and admin_path should be different\./ end + + describe 'when overriding parameters using symlink and custom file source' do + let :params do + { + :wsgi_script_ensure => 'link', + :wsgi_script_source => '/opt/keystone/httpd/keystone.py', + } + end + + it { is_expected.to contain_file('keystone_wsgi_admin').with( + 'ensure' => 'link', + 'path' => "#{platform_parameters[:wsgi_script_path]}/admin", + 'target' => '/opt/keystone/httpd/keystone.py', + 'owner' => 'keystone', + 'group' => 'keystone', + 'mode' => '0644', + 'require' => ["File[#{platform_parameters[:wsgi_script_path]}]", "Package[keystone]"] + )} + + it { is_expected.to contain_file('keystone_wsgi_main').with( + 'ensure' => 'link', + 'path' => "#{platform_parameters[:wsgi_script_path]}/main", + 'target' => '/opt/keystone/httpd/keystone.py', + 'owner' => 'keystone', + 'group' => 'keystone', + 'mode' => '0644', + 'require' => ["File[#{platform_parameters[:wsgi_script_path]}]", "Package[keystone]"] + )} + end end context 'on RedHat platforms' do