From e7199da707953910f86fba1c2d6003ab2860ea4b Mon Sep 17 00:00:00 2001 From: Carlo Rengo Date: Tue, 13 Feb 2018 17:00:45 +0100 Subject: [PATCH] Add support for dynamic modules. Allow nginx to load dynamic modules by specifying an absolute or a relative ("modules/") path. Modules must be installed separately and before loading the puppet nginx module. --- manifests/config.pp | 1 + manifests/init.pp | 1 + spec/classes/nginx_spec.rb | 26 ++++++++++++++++++++++++++ templates/conf.d/nginx.conf.erb | 7 +++++++ 4 files changed, 35 insertions(+) diff --git a/manifests/config.pp b/manifests/config.pp index f5e1345a9..c0725aa3a 100644 --- a/manifests/config.pp +++ b/manifests/config.pp @@ -24,6 +24,7 @@ $daemon = $nginx::daemon $daemon_user = $nginx::daemon_user $daemon_group = $nginx::daemon_group + $dynamic_modules = $nginx::dynamic_modules $global_owner = $nginx::global_owner $global_group = $nginx::global_group $global_mode = $nginx::global_mode diff --git a/manifests/init.pp b/manifests/init.pp index 67fda1d9b..66c5e1bb6 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -33,6 +33,7 @@ Optional[Enum['on', 'off']] $daemon = undef, $daemon_user = $nginx::params::daemon_user, $daemon_group = undef, + Array[String] $dynamic_modules = [], $global_owner = $nginx::params::global_owner, $global_group = $nginx::params::global_group, $global_mode = $nginx::params::global_mode, diff --git a/spec/classes/nginx_spec.rb b/spec/classes/nginx_spec.rb index 5cb318db6..8ea73703d 100644 --- a/spec/classes/nginx_spec.rb +++ b/spec/classes/nginx_spec.rb @@ -359,6 +359,12 @@ describe 'nginx.conf template content' do [ + { + title: 'should not set load_module', + attr: 'dynamic_modules', + value: :undef, + notmatch: %r{load_module} + }, { title: 'should not set user', attr: 'super_user', @@ -910,6 +916,26 @@ end end + context 'when dynamic_modules is "[\'ngx_http_geoip_module\']" ' do + let(:params) do + { + dynamic_modules: ['ngx_http_geoip_module'] + } + end + + it { is_expected.to contain_file('/etc/nginx/nginx.conf').with_content(%r{load_module "modules/ngx_http_geoip_module.so";}) } + end + + context 'when dynamic_modules is "[\'/path/to/module/ngx_http_geoip_module.so\']" ' do + let(:params) do + { + dynamic_modules: ['/path/to/module/ngx_http_geoip_module.so'] + } + end + + it { is_expected.to contain_file('/etc/nginx/nginx.conf').with_content(%r{load_module "/path/to/module/ngx_http_geoip_module.so";}) } + end + context 'when proxy_cache_path is /path/to/proxy.cache and loader_files is 1000' do let(:params) do { diff --git a/templates/conf.d/nginx.conf.erb b/templates/conf.d/nginx.conf.erb index fbd12305e..3e96f2490 100644 --- a/templates/conf.d/nginx.conf.erb +++ b/templates/conf.d/nginx.conf.erb @@ -1,4 +1,11 @@ # MANAGED BY PUPPET +<% @dynamic_modules.each do |mod_item| -%> + <%- if mod_item =~ /^\/.*/ -%> +load_module "<%= mod_item -%>"; + <%- else -%> +load_module "modules/<%= mod_item -%>.so"; + <%- end -%> +<%- end -%> <% if @daemon -%> daemon <%= @daemon %>; <% end -%>