From 46e3a2349e9eef4001db8be9581fae9dfbccaf14 Mon Sep 17 00:00:00 2001 From: Geoff Williams Date: Tue, 14 Mar 2017 01:24:36 +1100 Subject: (#FM-6068) allow file encoding to be specified (#726) * (#FM-6068) allow file encoding to be specified Add a new parameter `encoding` to allow non UTF-8 files to specify a file encoding. This prevents receiving the error message "invalid byte sequence in UTF-8" when special characters that are not UTF-8 encoded appear in the input stream, such as the copyright symbol. * (#FM-6068) allow file encoding to be specified Added docs and tests as requested --- lib/puppet/provider/file_line/ruby.rb | 2 +- lib/puppet/type/file_line.rb | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/puppet/provider/file_line/ruby.rb b/lib/puppet/provider/file_line/ruby.rb index beeb430..fbf7d8e 100644 --- a/lib/puppet/provider/file_line/ruby.rb +++ b/lib/puppet/provider/file_line/ruby.rb @@ -40,7 +40,7 @@ Puppet::Type.type(:file_line).provide(:ruby) do # file; for now assuming that this type is only used on # small-ish config files that can fit into memory without # too much trouble. - @lines ||= File.readlines(resource[:path]) + @lines ||= File.readlines(resource[:path], :encoding => resource[:encoding]) end def match_regex diff --git a/lib/puppet/type/file_line.rb b/lib/puppet/type/file_line.rb index 7b7d44e..e82b246 100644 --- a/lib/puppet/type/file_line.rb +++ b/lib/puppet/type/file_line.rb @@ -48,6 +48,22 @@ Puppet::Type.newtype(:file_line) do followed by HTTP_PROXY and delete it. If multiple lines match, an error will be raised unless the `multiple => true` parameter is set. + Encoding example: + + file_line { "XScreenSaver": + ensure => present, + path => '/root/XScreenSaver' + line => "*lock: 10:00:00", + match => '^*lock:', + encoding => "iso-8859-1", + } + + Files with special characters that are not valid UTF-8 will give the + error message "invalid byte sequence in UTF-8". In this case, determine + the correct file encoding and specify the correct encoding using the + encoding attribute, the value of which needs to be a valid Ruby character + encoding. + **Autorequires:** If Puppet is managing the file that will contain the line being managed, the file_line resource will autorequire that file. EOT @@ -107,6 +123,11 @@ Puppet::Type.newtype(:file_line) do defaultto true end + newparam(:encoding) do + desc 'For files that are not UTF-8 encoded, specify encoding such as iso-8859-1' + defaultto 'UTF-8' + end + # Autorequire the file resource if it's being managed autorequire(:file) do self[:path] -- cgit v1.2.3