From 99d66352ad7bd5e92a3a3f7a59051ecd680d88fe Mon Sep 17 00:00:00 2001 From: Matt Dainty Date: Mon, 3 Feb 2014 16:40:13 +0000 Subject: [PATCH 1/2] Add WSGIApplicationGroup and WSGIImportScript directives --- README.md | 4 ++++ manifests/vhost.pp | 8 ++++++++ templates/vhost/_wsgi.erb | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/README.md b/README.md index 97fb7b963c..b36d7d2224 100644 --- a/README.md +++ b/README.md @@ -155,9 +155,13 @@ To set up a virtual host with WSGI apache::vhost { 'wsgi.example.com': port => '80', docroot => '/var/www/pythonapp', + wsgi_application_group => '%{GLOBAL}', wsgi_daemon_process => 'wsgi', wsgi_daemon_process_options => { processes => '2', threads => '15', display-name => '%{GROUP}' }, + wsgi_import_script => '/var/www/demo.wsgi', + wsgi_import_script_options => + { process-group => 'wsgi', application-group => '%{GLOBAL}' }, wsgi_process_group => 'wsgi', wsgi_script_aliases => { '/' => '/var/www/demo.wsgi' }, } diff --git a/manifests/vhost.pp b/manifests/vhost.pp index cac091dee9..0742c80b41 100644 --- a/manifests/vhost.pp +++ b/manifests/vhost.pp @@ -159,8 +159,11 @@ $setenvif = [], $block = [], $ensure = 'present', + $wsgi_application_group = undef, $wsgi_daemon_process = undef, $wsgi_daemon_process_options = undef, + $wsgi_import_script = undef, + $wsgi_import_script_options = undef, $wsgi_process_group = undef, $wsgi_script_aliases = undef, $custom_fragment = undef, @@ -209,6 +212,9 @@ if $wsgi_daemon_process_options { validate_hash($wsgi_daemon_process_options) } + if $wsgi_import_script_options { + validate_hash($wsgi_import_script_options) + } if $itk { validate_hash($itk) } @@ -495,7 +501,9 @@ # - $suphp_engine # - $suphp_configpath # wsgi fragment: + # - $wsgi_application_group # - $wsgi_daemon_process + # - $wsgi_import_script # - $wsgi_process_group # - $wsgi_script_aliases file { "${priority_real}-${filename}.conf": diff --git a/templates/vhost/_wsgi.erb b/templates/vhost/_wsgi.erb index 4a68eed8d6..474c30ff19 100644 --- a/templates/vhost/_wsgi.erb +++ b/templates/vhost/_wsgi.erb @@ -1,8 +1,14 @@ +<% if @wsgi_application_group -%> + WSGIApplicationGroup <%= @wsgi_application_group %> +<% end -%> <% if @wsgi_daemon_process and @wsgi_daemon_process_options -%> WSGIDaemonProcess <%= @wsgi_daemon_process %> <%= @wsgi_daemon_process_options.collect { |k,v| "#{k}=#{v}"}.sort.join(' ') %> <% elsif @wsgi_daemon_process and !@wsgi_daemon_process_options -%> WSGIDaemonProcess <%= @wsgi_daemon_process %> <% end -%> +<% if @wsgi_import_script and @wsgi_import_script_options -%> + WSGIImportScript <%= @wsgi_import_script %> <%= @wsgi_import_script_options.collect { |k,v| "#{k}=#{v}"}.sort.join(' ') %> +<% end -%> <% if @wsgi_process_group -%> WSGIProcessGroup <%= @wsgi_process_group %> <% end -%> From 32791446c7264a1a5187dddfa18a546c47854907 Mon Sep 17 00:00:00 2001 From: Matt Dainty Date: Wed, 5 Feb 2014 14:15:17 +0000 Subject: [PATCH 2/2] Add WSGIApplicationGroup & WSGIImportScript tests. --- spec/acceptance/vhost_spec.rb | 5 +++++ spec/defines/vhost_spec.rb | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/spec/acceptance/vhost_spec.rb b/spec/acceptance/vhost_spec.rb index 7d066241f7..205496a944 100644 --- a/spec/acceptance/vhost_spec.rb +++ b/spec/acceptance/vhost_spec.rb @@ -871,8 +871,11 @@ class { 'apache::mod::wsgi': } host { 'test.server': ip => '127.0.0.1' } apache::vhost { 'test.server': docroot => '/tmp', + wsgi_application_group => '%{GLOBAL}', wsgi_daemon_process => 'wsgi', wsgi_daemon_process_options => {processes => '2'}, + wsgi_import_script => '/test1', + wsgi_import_script_options => { application-group => '%{GLOBAL}', process-group => 'wsgi' }, wsgi_process_group => 'vagrant', wsgi_script_aliases => { '/test' => '/test1' }, } @@ -882,7 +885,9 @@ class { 'apache::mod::wsgi': } describe file("#{$vhost_dir}/25-test.server.conf") do it { should be_file } + it { should contain 'WSGIApplicationGroup %{GLOBAL}' } it { should contain 'WSGIDaemonProcess wsgi processes=2' } + it { should contain 'WSGIImportScript /test1 application-group=%{GLOBAL} process-group=wsgi' } it { should contain 'WSGIProcessGroup vagrant' } it { should contain 'WSGIScriptAlias /test "/test1"' } end diff --git a/spec/defines/vhost_spec.rb b/spec/defines/vhost_spec.rb index 150e20833f..2cd2bb29d7 100644 --- a/spec/defines/vhost_spec.rb +++ b/spec/defines/vhost_spec.rb @@ -601,6 +601,12 @@ /^ WSGIScriptAlias \/ "\/usr\/local\/wsgi\/scripts\/myapp.wsgi"$/, ], }, + { + :title => 'should accept a wsgi application group', + :attr => 'wsgi_application_group', + :value => '%{GLOBAL}', + :match => [/^ WSGIApplicationGroup %{GLOBAL}$/], + }, { :title => 'should contain environment variables', :attr => 'access_log_env_var', @@ -1116,6 +1122,18 @@ end end + describe 'when wsgi_import_script and wsgi_import_script_options are specified' do + let :params do default_params.merge({ + :wsgi_import_script => '/var/www/demo.wsgi', + :wsgi_import_script_options => { 'application-group' => '%{GLOBAL}', 'process-group' => 'wsgi' }, + }) end + it 'should set wsgi_import_script_options' do + should contain_file("25-#{title}.conf").with_content( + /^ WSGIImportScript \/var\/www\/demo.wsgi application-group=%{GLOBAL} process-group=wsgi$/ + ) + end + end + describe 'when rewrites are specified' do let :params do default_params.merge({ :rewrites => [