From cbc55084c8b5df507fe9ac5effe08d744355bb15 Mon Sep 17 00:00:00 2001 From: Hunter Haugen Date: Mon, 10 Nov 2014 11:31:26 -0800 Subject: [PATCH 1/6] Release 4.4.0 Summary This release has an overhauled readme, new private manifest function, and fixes many future parser bugs. Features - All new shiny README - New `private()` function for making private manifests (yay!) Bugfixes - Code reuse in `bool2num()` and `zip()` - Fix many functions to handle `generate()` no longer returning a string on new puppets - `concat()` no longer modifies the first argument (whoops) - strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()` - `to_bytes()` handles PB and EB now - Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()` - Fix `validate_cmd()` for windows - Correct `validate_string()` docs to reflect non-handling of `undef` - Fix `file_line` matching on older rubies --- CHANGELOG.md | 20 ++++++++++++++++++++ metadata.json | 6 +++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb5fd7f4a..2fb73db01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +##2014-11-10 - Supported Release 4.4.0 +###Summary +This release has an overhauled readme, new private manifest function, and fixes many future parser bugs. + +####Features +- All new shiny README +- New `private()` function for making private manifests (yay!) + +####Bugfixes +- Code reuse in `bool2num()` and `zip()` +- Fix many functions to handle `generate()` no longer returning a string on new puppets +- `concat()` no longer modifies the first argument (whoops) +- strict variable support for `getvar()`, `member()`, `values_at`, and `has_interface_with()` +- `to_bytes()` handles PB and EB now +- Fix `tempfile` ruby requirement for `validate_augeas()` and `validate_cmd()` +- Fix `validate_cmd()` for windows +- Correct `validate_string()` docs to reflect non-handling of `undef` +- Fix `file_line` matching on older rubies + + ##2014-07-15 - Supported Release 4.3.2 ###Summary diff --git a/metadata.json b/metadata.json index 26167b6f0..186166d04 100644 --- a/metadata.json +++ b/metadata.json @@ -1,12 +1,12 @@ { "name": "puppetlabs-stdlib", - "version": "4.3.2", + "version": "4.4.0", "author": "puppetlabs", "summary": "Puppet Module Standard Library", "license": "Apache 2.0", "source": "git://github.com/puppetlabs/puppetlabs-stdlib", "project_page": "https://github.com/puppetlabs/puppetlabs-stdlib", - "issues_url": "https://github.com/puppetlabs/puppetlabs-stdlib/issues", + "issues_url": "https://tickets.puppetlabs.com/browse/MODULES", "operatingsystem_support": [ { "operatingsystem": "RedHat", @@ -97,7 +97,7 @@ "requirements": [ { "name": "pe", - "version_requirement": "3.3.x" + "version_requirement": "3.x" }, { "name": "puppet", From c52e262a17d9defbd59bfed4761ab887d9e7840d Mon Sep 17 00:00:00 2001 From: Travis Fields Date: Thu, 30 Oct 2014 23:37:00 -0700 Subject: [PATCH 2/6] Catch :undefined_variable thrown when Future Parser is enabled with 3.7.x --- .../parser/functions/has_interface_with.rb | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/puppet/parser/functions/has_interface_with.rb b/lib/puppet/parser/functions/has_interface_with.rb index 00e405d13..1e91026ba 100644 --- a/lib/puppet/parser/functions/has_interface_with.rb +++ b/lib/puppet/parser/functions/has_interface_with.rb @@ -16,11 +16,11 @@ module Puppet::Parser::Functions If no "kind" is given, then the presence of the interface is checked: has_interface_with("lo") => true - EOS + EOS ) do |args| raise(Puppet::ParseError, "has_interface_with(): Wrong number of arguments " + - "given (#{args.size} for 1 or 2)") if args.size < 1 or args.size > 2 + "given (#{args.size} for 1 or 2)") if args.size < 1 or args.size > 2 interfaces = lookupvar('interfaces') @@ -35,7 +35,13 @@ module Puppet::Parser::Functions kind, value = args - if lookupvar(kind) == value + # Bug with 3.7.1 - 3.7.3 when using future parser throws :undefined_variable + # https://tickets.puppetlabs.com/browse/PUP-3597 + factval = nil + catch :undefined_variable do + factval = lookupvar(kind) + end + if factval == value return true end @@ -44,15 +50,17 @@ module Puppet::Parser::Functions iface.downcase! factval = nil begin - factval = lookupvar("#{kind}_#{iface}") + # Bug with 3.7.1 - 3.7.3 when using future parser throws :undefined_variable + # https://tickets.puppetlabs.com/browse/PUP-3597 + catch :undefined_variable do + factval = lookupvar("#{kind}_#{iface}") + end + if value == factval + result = true + end rescue Puppet::ParseError # Eat the exception if strict_variables = true is set end - if value == factval - result = true - break - end end - result end end From 992ed8ffa8a716463be6a3520eb908cd12ca2048 Mon Sep 17 00:00:00 2001 From: Travis Fields Date: Mon, 3 Nov 2014 09:30:34 -0800 Subject: [PATCH 3/6] Remove windows from ensure_package and ensure_resource testing --- spec/acceptance/ensure_packages_spec.rb | 2 +- spec/acceptance/ensure_resource_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/acceptance/ensure_packages_spec.rb b/spec/acceptance/ensure_packages_spec.rb index 3651f292e..ca4b24902 100755 --- a/spec/acceptance/ensure_packages_spec.rb +++ b/spec/acceptance/ensure_packages_spec.rb @@ -1,7 +1,7 @@ #! /usr/bin/env ruby -S rspec require 'spec_helper_acceptance' -describe 'ensure_packages function', :unless => (UNSUPPORTED_PLATFORMS.include?(fact('operatingsystem')) || fact('osfamily') == 'windows') do +describe 'ensure_packages function', :unless => (UNSUPPORTED_PLATFORMS.include?(fact('operatingsystem')) && fact('osfamily') != 'windows') do describe 'success' do it 'ensure_packages a package' do apply_manifest('package { "rake": ensure => absent, provider => "gem", }') diff --git a/spec/acceptance/ensure_resource_spec.rb b/spec/acceptance/ensure_resource_spec.rb index f1bfa5450..c3d72fc87 100755 --- a/spec/acceptance/ensure_resource_spec.rb +++ b/spec/acceptance/ensure_resource_spec.rb @@ -1,7 +1,7 @@ #! /usr/bin/env ruby -S rspec require 'spec_helper_acceptance' -describe 'ensure_resource function', :unless => (UNSUPPORTED_PLATFORMS.include?(fact('operatingsystem')) || fact('osfamily') == 'windows') do +describe 'ensure_resource function', :unless => (UNSUPPORTED_PLATFORMS.include?(fact('operatingsystem')) && fact('osfamily') != 'windows') do describe 'success' do it 'ensure_resource a package' do apply_manifest('package { "rake": ensure => absent, provider => "gem", }') From 4949cfd21cb97b17006d82f2f192ec9d01b0d1ee Mon Sep 17 00:00:00 2001 From: Hunter Haugen Date: Mon, 10 Nov 2014 16:37:53 -0800 Subject: [PATCH 4/6] Fix breaking out of .each loop And some other small formatting fixes that don't belong in this patch. --- lib/puppet/parser/functions/has_interface_with.rb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/puppet/parser/functions/has_interface_with.rb b/lib/puppet/parser/functions/has_interface_with.rb index 1e91026ba..36915246d 100644 --- a/lib/puppet/parser/functions/has_interface_with.rb +++ b/lib/puppet/parser/functions/has_interface_with.rb @@ -16,11 +16,11 @@ module Puppet::Parser::Functions If no "kind" is given, then the presence of the interface is checked: has_interface_with("lo") => true - EOS + EOS ) do |args| raise(Puppet::ParseError, "has_interface_with(): Wrong number of arguments " + - "given (#{args.size} for 1 or 2)") if args.size < 1 or args.size > 2 + "given (#{args.size} for 1 or 2)") if args.size < 1 or args.size > 2 interfaces = lookupvar('interfaces') @@ -55,12 +55,14 @@ module Puppet::Parser::Functions catch :undefined_variable do factval = lookupvar("#{kind}_#{iface}") end - if value == factval - result = true - end rescue Puppet::ParseError # Eat the exception if strict_variables = true is set end + if value == factval + result = true + break + end end + result end end From 970141e36aa454bc557d44c1962129afef39d4f2 Mon Sep 17 00:00:00 2001 From: Hunter Haugen Date: Tue, 11 Nov 2014 10:46:01 -0800 Subject: [PATCH 5/6] Correct type() logic It should NOT run if the future parser is enabled --- spec/acceptance/type_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/acceptance/type_spec.rb b/spec/acceptance/type_spec.rb index 15fa217da..67e324803 100755 --- a/spec/acceptance/type_spec.rb +++ b/spec/acceptance/type_spec.rb @@ -1,7 +1,7 @@ #! /usr/bin/env ruby -S rspec require 'spec_helper_acceptance' -describe 'type function', :unless => (UNSUPPORTED_PLATFORMS.include?(fact('operatingsystem')) || !(is_future_parser_enabled?)) do +describe 'type function', :unless => (UNSUPPORTED_PLATFORMS.include?(fact('operatingsystem')) || is_future_parser_enabled?) do describe 'success' do it 'types arrays' do pp = <<-EOS From 3584485902c83bbfbc7417b122fe73f80bcd1630 Mon Sep 17 00:00:00 2001 From: Travis Fields Date: Tue, 11 Nov 2014 15:33:43 -0800 Subject: [PATCH 6/6] Fix exclude windows test on ensure_package Update to fix ensure_resource as well --- spec/acceptance/ensure_packages_spec.rb | 2 +- spec/acceptance/ensure_resource_spec.rb | 2 +- spec/spec_helper_acceptance.rb | 29 ++++++++++++------------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/spec/acceptance/ensure_packages_spec.rb b/spec/acceptance/ensure_packages_spec.rb index ca4b24902..aedcfb55d 100755 --- a/spec/acceptance/ensure_packages_spec.rb +++ b/spec/acceptance/ensure_packages_spec.rb @@ -1,7 +1,7 @@ #! /usr/bin/env ruby -S rspec require 'spec_helper_acceptance' -describe 'ensure_packages function', :unless => (UNSUPPORTED_PLATFORMS.include?(fact('operatingsystem')) && fact('osfamily') != 'windows') do +describe 'ensure_packages function', :unless => fact('osfamily') =~ /windows/i do describe 'success' do it 'ensure_packages a package' do apply_manifest('package { "rake": ensure => absent, provider => "gem", }') diff --git a/spec/acceptance/ensure_resource_spec.rb b/spec/acceptance/ensure_resource_spec.rb index c3d72fc87..1cee53db9 100755 --- a/spec/acceptance/ensure_resource_spec.rb +++ b/spec/acceptance/ensure_resource_spec.rb @@ -1,7 +1,7 @@ #! /usr/bin/env ruby -S rspec require 'spec_helper_acceptance' -describe 'ensure_resource function', :unless => (UNSUPPORTED_PLATFORMS.include?(fact('operatingsystem')) && fact('osfamily') != 'windows') do +describe 'ensure_resource function', :unless => fact('osfamily') =~ /windows/i do describe 'success' do it 'ensure_resource a package' do apply_manifest('package { "rake": ensure => absent, provider => "gem", }') diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index ef9972371..3203ce9fb 100755 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -4,15 +4,23 @@ UNSUPPORTED_PLATFORMS = [] unless ENV['RS_PROVISION'] == 'no' or ENV['BEAKER_provision'] == 'no' - # This will install the latest available package on el and deb based - # systems fail on windows and osx, and install via gem on other *nixes - foss_opts = { :default_action => 'gem_install' } + foss_opts = { + :default_action => 'gem_install', + :version => (ENV['PUPPET_VERSION'] ? ENV['PUPPET_VERSION'] : '3.7.2'), + } if default.is_pe?; then install_pe; else install_puppet( foss_opts ); end hosts.each do |host| - on host, "mkdir -p #{host['distmoduledir']}" - on host, "/bin/touch #{host['puppetpath']}/hiera.yaml" + if host['platform'] !~ /windows/i + if host.is_pe? + on host, 'mkdir -p /etc/puppetlabs/facter/facts.d' + else + on host, "/bin/touch #{host['puppetpath']}/hiera.yaml" + on host, "mkdir -p #{host['distmoduledir']}" + on host, 'mkdir -p /etc/facter/facts.d' + end + end end end @@ -29,17 +37,8 @@ default[:default_apply_opts] ||= {} default[:default_apply_opts].merge!({:parser => 'future'}) end - hosts.each do |host| - if host['platform'] !~ /windows/i - copy_root_module_to(host, :source => proj_root, :module_name => 'stdlib') - end - end - hosts.each do |host| - if host['platform'] =~ /windows/i - on host, puppet('plugin download') - end - end + copy_root_module_to(default, :source => proj_root, :module_name => 'stdlib') end end