From 17fa4eac3e6c1b2bc6678121ed06fa828f71fab5 Mon Sep 17 00:00:00 2001
From: kazukifujii <32835806+kazukifujii@users.noreply.github.com>
Date: Thu, 12 Dec 2019 23:46:32 +0900
Subject: [PATCH] feat(appswerver): Add new appserver config params for
passenger (#227)
* chore: add new webserver_config_params
* style: Fixed failing rubocop lints.
* chore: add PassengerMaxPreloaderIdleTime params to webserver_config
* fix(appserver): fixed constants and error document values where the syntax violates the convention
* test: added webserver_config_params test
---
docs/source/attributes.rst | 25 +++++++++++++++
libraries/drivers_appserver_passenger.rb | 13 ++++++--
spec/unit/recipes/configure_spec.rb | 18 +++++++++++
.../appserver.apache2.passenger.conf.erb | 32 +++++++++++++++++++
4 files changed, 86 insertions(+), 2 deletions(-)
diff --git a/docs/source/attributes.rst b/docs/source/attributes.rst
index 60c846b3..41b1a747 100644
--- a/docs/source/attributes.rst
+++ b/docs/source/attributes.rst
@@ -564,6 +564,31 @@ passenger
made to your web server. Useful for certain hybrid static/dynamic
web sites.
+- ``app['appserver']['pool_idle_time']``
+
+ - **Type:** Integer
+ - **Default:** 300
+ - Sets the ``PoolIdleTime`` parameter
+
+- ``app['appserver']['max_request_queue_size']``
+
+ - **Type:** Integer
+ - **Default:** 100
+ - Sets the ``MaxRequestQueueSize`` parameter
+
+- ``app['appserver']['error_document']``
+
+ - **Type:** Hash
+ - **Default:** off
+ - Sets the { "status": "file" } parameter
+ e.g. { "500": "500.html", "503": "503.html" }
+
+- ``app['appserver']['passenger_max_preloader_idle_time']``
+
+ - **Type:** Integer
+ - **Default:** 300
+ - Sets the ``PassengerMaxPreloaderIdleTime`` parameter
+
webserver
~~~~~~~~~
diff --git a/libraries/drivers_appserver_passenger.rb b/libraries/drivers_appserver_passenger.rb
index dd0159f8..e8dc331c 100644
--- a/libraries/drivers_appserver_passenger.rb
+++ b/libraries/drivers_appserver_passenger.rb
@@ -5,7 +5,16 @@ module Appserver
class Passenger < Drivers::Appserver::Base
adapter :passenger
allowed_engines :passenger
- output filter: %i[max_pool_size min_instances mount_point]
+ WEBSERVER_CONFIG_PARAMS = %i[
+ max_pool_size
+ min_instances
+ mount_point
+ pool_idle_time
+ max_request_queue_size
+ error_document
+ passenger_max_preloader_idle_time
+ ].freeze
+ output filter: WEBSERVER_CONFIG_PARAMS
def manual_action(action); end
@@ -17,7 +26,7 @@ def add_appserver_service_context; end
def webserver_config_params
o = out
- Hash[%i[max_pool_size min_instances mount_point].map { |k| [k, o[k]] }].reject { |_k, v| v.nil? }
+ Hash[WEBSERVER_CONFIG_PARAMS.map { |k| [k, o[k]] }].reject { |_k, v| v.nil? }
end
end
end
diff --git a/spec/unit/recipes/configure_spec.rb b/spec/unit/recipes/configure_spec.rb
index a19e8a52..40823a0b 100644
--- a/spec/unit/recipes/configure_spec.rb
+++ b/spec/unit/recipes/configure_spec.rb
@@ -879,6 +879,10 @@
deploy['dummy_project']['appserver']['max_pool_size'] = 10
deploy['dummy_project']['appserver']['min_instances'] = 5
deploy['dummy_project']['appserver']['mount_point'] = '/some/mount/point'
+ deploy['dummy_project']['appserver']['pool_idle_time'] = 300
+ deploy['dummy_project']['appserver']['max_request_queue_size'] = 100
+ deploy['dummy_project']['appserver']['error_document'] = { "503": '503.html', "504": '504.html' }
+ deploy['dummy_project']['appserver']['passenger_max_preloader_idle_time'] = 300
deploy['dummy_project']['webserver']['adapter'] = 'apache2'
deploy['dummy_project']['global']['environment'] = 'production'
solo_node.set['deploy'] = deploy
@@ -927,6 +931,20 @@
expect(chef_run)
.to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf")
.with_content('PassengerMinInstances 5')
+ expect(chef_run)
+ .to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf")
+ .with_content('PoolIdleTime 300')
+ expect(chef_run)
+ .to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf")
+ .with_content('MaxRequestQueueSize 100')
+ expect(chef_run)
+ .to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf")
+ .with_content('PassengerErrorOverride on')
+ .with_content('ErrorDocument 503 /503.html')
+ .with_content('ErrorDocument 504 /504.html')
+ expect(chef_run)
+ .to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf")
+ .with_content('PassengerMaxPreloaderIdleTime 300')
expect(chef_run)
.to render_file("/etc/apache2/sites-available/#{aws_opsworks_app['shortname']}.conf")
expect(chef_run)
diff --git a/templates/default/appserver.apache2.passenger.conf.erb b/templates/default/appserver.apache2.passenger.conf.erb
index f199af6f..d8b1a840 100644
--- a/templates/default/appserver.apache2.passenger.conf.erb
+++ b/templates/default/appserver.apache2.passenger.conf.erb
@@ -55,6 +55,15 @@ Header always unset "X-Powered-By"
<% if @appserver_config[:min_instances] -%>
PassengerMinInstances <%= @appserver_config[:min_instances] %>
<% end %>
+<% if @appserver_config[:pool_idle_time] -%>
+ PassengerPoolIdleTime <%= @appserver_config[:pool_idle_time] %>
+<% end %>
+<% if @appserver_config[:max_request_queue_size] -%>
+ PassengerMaxRequestQueueSize <%= @appserver_config[:max_request_queue_size] %>
+<% end %>
+<% if @appserver_config[:passenger_max_preloader_idle_time] -%>
+ PassengerMaxPreloaderIdleTime <%= @appserver_config[:passenger_max_preloader_idle_time] %>
+<% end %>
>
PassengerAppEnv <%= @deploy_env %>
@@ -63,6 +72,13 @@ Header always unset "X-Powered-By"
RewriteEngine on
+
+ <% if @appserver_config[:error_document] -%>
+ PassengerErrorOverride on
+ <% @appserver_config[:error_document].each do | status, file | %>
+ ErrorDocument <%= status %> /<%= file %>
+ <% end %>
+ <% end %>
<% end %>
<%= @out[:extra_config] %>
@@ -138,6 +154,15 @@ SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
<% if @appserver_config[:min_instances] -%>
PassengerMinInstances <%= @appserver_config[:min_instances] %>
<% end %>
+<% if @appserver_config[:pool_idle_time] -%>
+ PassengerPoolIdleTime <%= @appserver_config[:pool_idle_time] %>
+<% end %>
+<% if @appserver_config[:max_request_queue_size] -%>
+ PassengerMaxRequestQueueSize <%= @appserver_config[:max_request_queue_size] %>
+<% end %>
+<% if @appserver_config[:passenger_max_preloader_idle_time] -%>
+ PassengerMaxPreloaderIdleTime <%= @appserver_config[:passenger_max_preloader_idle_time] %>
+<% end %>
>
PassengerAppEnv <%= @deploy_env %>
@@ -149,6 +174,13 @@ SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
RewriteEngine on
+ <% if @appserver_config[:error_document] -%>
+ PassengerErrorOverride on
+ <% @appserver_config[:error_document].each do | status, file | %>
+ ErrorDocument <%= status %> /<%= file %>
+ <% end %>
+ <% end %>
+
<%= @out[:extra_config_ssl] %>