From e8b5f84e584fbff317f91e4307efaa5aabd93e19 Mon Sep 17 00:00:00 2001 From: Ben Ford Date: Mon, 29 Oct 2018 10:18:46 -0700 Subject: [PATCH 1/3] (FM-7547) move function definitions out of Puppet function In Puppet 5.5.7, legacy functions that had ruby functions defined in the file no longer work. This puts it into a library class. --- .../parser/functions/mysql_deepmerge.rb | 22 ++-------------- lib/puppet_x/puppetlabs/mysql_utilities.rb | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 20 deletions(-) create mode 100644 lib/puppet_x/puppetlabs/mysql_utilities.rb diff --git a/lib/puppet/parser/functions/mysql_deepmerge.rb b/lib/puppet/parser/functions/mysql_deepmerge.rb index 766028e89..43d4e4c6f 100644 --- a/lib/puppet/parser/functions/mysql_deepmerge.rb +++ b/lib/puppet/parser/functions/mysql_deepmerge.rb @@ -1,3 +1,4 @@ +require_relative '../../../puppet_x/puppetlabs/mysql_utilities' module Puppet::Parser::Functions newfunction(:mysql_deepmerge, type: :rvalue, doc: <<-'ENDHEREDOC') do |args| @summary Recursively merges two or more hashes together and returns the resulting hash. @@ -32,27 +33,8 @@ module Puppet::Parser::Functions # Now we have to traverse our hash assigning our non-hash values # to the matching keys in our result while following our hash values # and repeating the process. - overlay(result, arg) + PuppetX::Puppetlabs::MysqlUtilities.overlay(result, arg) end return(result) end end - -def normalized?(hash, key) - return true if hash.key?(key) - return false unless key =~ %r{-|_} - other_key = key.include?('-') ? key.tr('-', '_') : key.tr('_', '-') - return false unless hash.key?(other_key) - hash[key] = hash.delete(other_key) - true -end - -def overlay(hash1, hash2) - hash2.each do |key, value| - if normalized?(hash1, key) && value.is_a?(Hash) && hash1[key].is_a?(Hash) - overlay(hash1[key], value) - else - hash1[key] = value - end - end -end diff --git a/lib/puppet_x/puppetlabs/mysql_utilities.rb b/lib/puppet_x/puppetlabs/mysql_utilities.rb new file mode 100644 index 000000000..a67673b18 --- /dev/null +++ b/lib/puppet_x/puppetlabs/mysql_utilities.rb @@ -0,0 +1,25 @@ +module PuppetX + module Puppetlabs + class MysqlUtilities + def self.normalized?(hash, key) + return true if hash.key?(key) + return false unless key =~ %r{-|_} + other_key = key.include?('-') ? key.tr('-', '_') : key.tr('_', '-') + return false unless hash.key?(other_key) + hash[key] = hash.delete(other_key) + true + end + + def self.overlay(hash1, hash2) + hash2.each do |key, value| + if self.normalized?(hash1, key) && value.is_a?(Hash) && hash1[key].is_a?(Hash) + self.overlay(hash1[key], value) + else + hash1[key] = value + end + end + end + end + end +end + From f2e7cd0ba7bddd37be03d5c40b7345daccf25efd Mon Sep 17 00:00:00 2001 From: Ben Ford Date: Wed, 31 Oct 2018 10:02:44 -0700 Subject: [PATCH 2/3] Revert "(FM-7547) move function definitions out of Puppet function" This reverts commit e8b5f84e584fbff317f91e4307efaa5aabd93e19. --- .../parser/functions/mysql_deepmerge.rb | 22 ++++++++++++++-- lib/puppet_x/puppetlabs/mysql_utilities.rb | 25 ------------------- 2 files changed, 20 insertions(+), 27 deletions(-) delete mode 100644 lib/puppet_x/puppetlabs/mysql_utilities.rb diff --git a/lib/puppet/parser/functions/mysql_deepmerge.rb b/lib/puppet/parser/functions/mysql_deepmerge.rb index 43d4e4c6f..766028e89 100644 --- a/lib/puppet/parser/functions/mysql_deepmerge.rb +++ b/lib/puppet/parser/functions/mysql_deepmerge.rb @@ -1,4 +1,3 @@ -require_relative '../../../puppet_x/puppetlabs/mysql_utilities' module Puppet::Parser::Functions newfunction(:mysql_deepmerge, type: :rvalue, doc: <<-'ENDHEREDOC') do |args| @summary Recursively merges two or more hashes together and returns the resulting hash. @@ -33,8 +32,27 @@ module Puppet::Parser::Functions # Now we have to traverse our hash assigning our non-hash values # to the matching keys in our result while following our hash values # and repeating the process. - PuppetX::Puppetlabs::MysqlUtilities.overlay(result, arg) + overlay(result, arg) end return(result) end end + +def normalized?(hash, key) + return true if hash.key?(key) + return false unless key =~ %r{-|_} + other_key = key.include?('-') ? key.tr('-', '_') : key.tr('_', '-') + return false unless hash.key?(other_key) + hash[key] = hash.delete(other_key) + true +end + +def overlay(hash1, hash2) + hash2.each do |key, value| + if normalized?(hash1, key) && value.is_a?(Hash) && hash1[key].is_a?(Hash) + overlay(hash1[key], value) + else + hash1[key] = value + end + end +end diff --git a/lib/puppet_x/puppetlabs/mysql_utilities.rb b/lib/puppet_x/puppetlabs/mysql_utilities.rb deleted file mode 100644 index a67673b18..000000000 --- a/lib/puppet_x/puppetlabs/mysql_utilities.rb +++ /dev/null @@ -1,25 +0,0 @@ -module PuppetX - module Puppetlabs - class MysqlUtilities - def self.normalized?(hash, key) - return true if hash.key?(key) - return false unless key =~ %r{-|_} - other_key = key.include?('-') ? key.tr('-', '_') : key.tr('_', '-') - return false unless hash.key?(other_key) - hash[key] = hash.delete(other_key) - true - end - - def self.overlay(hash1, hash2) - hash2.each do |key, value| - if self.normalized?(hash1, key) && value.is_a?(Hash) && hash1[key].is_a?(Hash) - self.overlay(hash1[key], value) - else - hash1[key] = value - end - end - end - end - end -end - From cf0344f393eafbd2597e0e1c4da254ab31cf6af3 Mon Sep 17 00:00:00 2001 From: Ben Ford Date: Wed, 31 Oct 2018 10:03:47 -0700 Subject: [PATCH 3/3] (FM-7547) Fail with a meaningful message This function breaks with a non-helpful error message on Puppet 5.5.7. Perhaps we should just raise an upgrade error instead. --- lib/puppet/parser/functions/mysql_deepmerge.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/puppet/parser/functions/mysql_deepmerge.rb b/lib/puppet/parser/functions/mysql_deepmerge.rb index 766028e89..b8ab7f885 100644 --- a/lib/puppet/parser/functions/mysql_deepmerge.rb +++ b/lib/puppet/parser/functions/mysql_deepmerge.rb @@ -1,3 +1,7 @@ +if Puppet::Util::Package.versioncmp(Puppet.version, '5.5.6') > 0 + raise Puppet::ParseError, "this function is not functional on #{Puppet.version}. Please port your code to use the 'mysql::deepmerge' function instead." +end + module Puppet::Parser::Functions newfunction(:mysql_deepmerge, type: :rvalue, doc: <<-'ENDHEREDOC') do |args| @summary Recursively merges two or more hashes together and returns the resulting hash.