From 530337dd4e159bc2566385049312e5241b894520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Thu, 18 Aug 2022 16:19:35 -1000 Subject: [PATCH] Allow to set log_format's "escape" parameter --- manifests/init.pp | 2 +- spec/classes/nginx_spec.rb | 2 +- templates/conf.d/nginx.conf.erb | 6 +++++- types/logformat.pp | 7 +++++++ 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 types/logformat.pp diff --git a/manifests/init.pp b/manifests/init.pp index 1ef336af5..8767f78e1 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -122,7 +122,7 @@ Enum['on', 'off'] $http_tcp_nopush = 'off', $keepalive_timeout = '65s', $keepalive_requests = '100', - $log_format = {}, + Hash[String[1], Nginx::LogFormat] $log_format = {}, Boolean $mail = false, Variant[String, Boolean] $mime_types_path = 'mime.types', Boolean $stream = false, diff --git a/spec/classes/nginx_spec.rb b/spec/classes/nginx_spec.rb index 112e044ab..f71f084a6 100644 --- a/spec/classes/nginx_spec.rb +++ b/spec/classes/nginx_spec.rb @@ -557,7 +557,7 @@ ' log_format format1 \'FORMAT1\';', ' log_format format2 \'FORMAT2\';', ' log_format format3 \'FORMAT3\';', - ' log_format format4 \'escape=json\' \'{"response": $status, "verb": "$request_method"}\';' + ' log_format format4 escape=json \'{"response": $status, "verb": "$request_method"}\';' ] }, { diff --git a/templates/conf.d/nginx.conf.erb b/templates/conf.d/nginx.conf.erb index c19557ed3..0c5184912 100644 --- a/templates/conf.d/nginx.conf.erb +++ b/templates/conf.d/nginx.conf.erb @@ -74,7 +74,11 @@ http { default_type application/octet-stream; <% if @log_format -%> <% @log_format.sort_by{|k,v| k}.each do |key,value| -%> - log_format <%= key %> '<%= value %>'; + <%- if value.is_a?(String) -%> + log_format <%= key %> <%= Puppet::Pops::Types::StringConverter.convert(value, '%p') %>; + <%- else -%> + log_format <%= key %> <%= "escape=#{value['escape']} " if value['escape'] %><%= Puppet::Pops::Types::StringConverter.convert(value['format'], '%p') %>; + <%- end -%> <% end -%> <% end -%> diff --git a/types/logformat.pp b/types/logformat.pp new file mode 100644 index 000000000..fcd6d5930 --- /dev/null +++ b/types/logformat.pp @@ -0,0 +1,7 @@ +type Nginx::LogFormat = Variant[ + String[1], + Struct[{ + Optional[escape] => Enum['default', 'json', 'none'], + format => String[1], + }], +]