From 2743fef6226e563571bec1eae429493c5c7e9e46 Mon Sep 17 00:00:00 2001 From: John Warburton Date: Wed, 12 Jul 2023 15:01:21 +1000 Subject: [PATCH 1/2] quote slash (/) as a key separator when communicating with augeas --- lib/puppet/provider/sysctl/augeas.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/puppet/provider/sysctl/augeas.rb b/lib/puppet/provider/sysctl/augeas.rb index be00a4b..e50e8b4 100644 --- a/lib/puppet/provider/sysctl/augeas.rb +++ b/lib/puppet/provider/sysctl/augeas.rb @@ -14,7 +14,7 @@ optional_commands :sysctl => 'sysctl' resource_path do |resource| - "$target/#{resource[:name]}" + "$target/#{resource[:name].gsub('/', '\/')}" end def self.sysctl_set(key, value, silent=false) @@ -46,7 +46,7 @@ def self.collect_augeas_resources(res, entries, target='/etc/sysctl.conf', resou entries.each do |entry| next if resources.find{|x| x[:name] == entry} - value = aug.get("$target/#{entry}") + value = aug.get("$target/#{entry.gsub('/', '\/')}") if value resource = { @@ -59,11 +59,11 @@ def self.collect_augeas_resources(res, entries, target='/etc/sysctl.conf', resou # Only match comments immediately before the entry and prefixed with # the sysctl name - cmtnode = aug.match("$target/#comment[following-sibling::*[1][self::#{entry}]]") + cmtnode = aug.match("$target/#comment[following-sibling::*[1][self::#{entry.gsub('/', '\/')}]]") unless cmtnode.empty? comment = aug.get(cmtnode[0]) - if comment.match(/#{resource[:name]}:/) - resource[:comment] = comment.sub(/^#{resource[:name]}:\s*/, "") + if comment.match(/#{resource[:name].gsub('/', '\/')}:/) + resource[:comment] = comment.sub(/^#{resource[:name].gsub('/', '\/')}:\s*/, "") end end @@ -268,7 +268,7 @@ def live_value if aug.match(cmtnode).empty? aug.insert('$resource', "#comment", true) end - aug.set("$target/#comment[following-sibling::*[1][self::#{resource[:name]}]]", + aug.set("$target/#comment[following-sibling::*[1][self::#{resource[:name].gsub('/', '\/')}]]", "#{resource[:name]}: #{resource[:comment]}") end end From 068222e5d642fd3da7f70b60d2cbcc37c5f22188 Mon Sep 17 00:00:00 2001 From: John Warburton Date: Wed, 12 Jul 2023 16:17:15 +1000 Subject: [PATCH 2/2] pass tests on nil entries --- lib/puppet/provider/sysctl/augeas.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/puppet/provider/sysctl/augeas.rb b/lib/puppet/provider/sysctl/augeas.rb index e50e8b4..d96c39a 100644 --- a/lib/puppet/provider/sysctl/augeas.rb +++ b/lib/puppet/provider/sysctl/augeas.rb @@ -14,7 +14,7 @@ optional_commands :sysctl => 'sysctl' resource_path do |resource| - "$target/#{resource[:name].gsub('/', '\/')}" + "$target/#{resource[:name]&.gsub('/', '\/')}" end def self.sysctl_set(key, value, silent=false) @@ -62,8 +62,8 @@ def self.collect_augeas_resources(res, entries, target='/etc/sysctl.conf', resou cmtnode = aug.match("$target/#comment[following-sibling::*[1][self::#{entry.gsub('/', '\/')}]]") unless cmtnode.empty? comment = aug.get(cmtnode[0]) - if comment.match(/#{resource[:name].gsub('/', '\/')}:/) - resource[:comment] = comment.sub(/^#{resource[:name].gsub('/', '\/')}:\s*/, "") + if comment.match(/#{resource[:name]&.gsub('/', '\/')}:/) + resource[:comment] = comment.sub(/^#{resource[:name]&.gsub('/', '\/')}:\s*/, "") end end @@ -268,7 +268,7 @@ def live_value if aug.match(cmtnode).empty? aug.insert('$resource', "#comment", true) end - aug.set("$target/#comment[following-sibling::*[1][self::#{resource[:name].gsub('/', '\/')}]]", + aug.set("$target/#comment[following-sibling::*[1][self::#{resource[:name]&.gsub('/', '\/')}]]", "#{resource[:name]}: #{resource[:comment]}") end end