Fixed this by setting AUGEAS_LENS_LIB in spec/spec_helper_local.rb

ENV['AUGEAS_LENS_LIB']='/opt/puppetlabs/puppet/share/augeas/lenses/dist'



On Thursday, June 27, 2019 at 11:38:05 AM UTC-4, Bill Sirinek wrote:
>
> I need some help here. I have a simple augeas resource that changes a line 
> in the /etc/sysconfig/iptables-config file. I am trying to write an rspec 
> test for this and it's not working.
>
>  
>
> RHEL7, pdk 1.10. I do not have any augeas packages installed, only using 
> what is bundled with pdk 1.10. 
>
>  
>
> If my augeas resource specifies the incl and lens attributes, the test 
> doesn't work at all, complaining that Shellvars.lns cannot be found.
>
>  
>
> If my augeas resource specifies the context attribute and does not specify 
> a lens (augeas uses Shellvars for this file by default anyway), the 
> execute.with_change fails, but verifying the changes via aug_get and 
> checking execute.idempotently both succeed.
>
>  
>
> Below I have the four combinations of the above and the output generated. 
> At the very bottom is my spec_helper.rb file.
>
>
> The IPTABLES_MODULES value is "" in the iptables-config file in the 
> spec/fixtures/augeas/etc/sysconfig directory.
>
>  
> 1. Augeas resource specifying both incl and lens in manifest. Checking if 
> resource executes with change. 
>
>  
>
> Augeas resource:
>
>   augeas { 'set_iptables_modules':
>
>     incl    => '/etc/sysconfig/iptables-config',
>
>     lens    => 'Shellvars.lns',
>
>     changes => [
>
>       "set IPTABLES_MODULES '\"iptable_nat ip_conntrack nf_nat_tftp 
> nf_conntrack_ipv4\"'"
>
>     ]
>
>   }
>
>  
>
>  
>
> Spec test:
>
>   describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
> 'etc/sysconfig/iptables-config' do
>
>     it 'specifies the kernel modules to load in the iptables configuration' do
>
>       is_expected.to <https://secure.ice/?http://is_expected.to> 
> execute.with_change
>
>       expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
> nf_nat_tftp nf_conntrack_ipv4"'
>
>       is_expected.to <https://secure.ice/?http://is_expected.to> 
> execute.idempotently
>
>     end
>
>   end
>
>  
>
>  
>
> Output:
>
> bsirinek@mydevhost $ pdk test unit
>
> pdk (INFO): Using Ruby 2.4.5
>
> pdk (INFO): Using Puppet 5.5.12
>
> [✔] Preparing to run the unit tests.
>
> [✖] Running unit tests.
>
> Run options: exclude {:bolt=>true}
>
>   Evaluated 18 tests in 9.488949739 seconds: 1 failures, 0 pending.
>
> failed: rspec: ./spec/classes/init_spec.rb:29: Augeas[set_iptables_modules] 
> fails when executing:
>
> debug: Opening augeas with root 
> /tmp/rspec-puppet-augeas20190625-14571-apd4ov, lens path , flags 64
>
> debug: Augeas version 1.8.1 is installed
>
> warning: Loading failed for one or more files, see debug for /augeas//error 
> output
>
> debug: /augeas/load/Xfm/error = Can not find lens Shellvars.lns
>
> debug: Will attempt to save and only run if files changed
>
> debug: sending command 'set' with params 
> ["/files/etc/sysconfig/iptables-config/IPTABLES_MODULES", "\"iptable_nat 
> ip_conntrack nf_nat_tftp nf_conntrack_ipv4\""]
>
> debug: Closed the augeas connection
>
> err: Could not evaluate: Saving failed, see debug
>
>   sebastion Augeas[set_iptables_modules] specifies the kernel modules to load 
> in the iptables configuration
>
>   Failure/Error:
>
>  
>
>     describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
> 'etc/sysconfig/iptables-config' do
>
>       it 'specifies the kernel modules to load in the iptables configuration' 
> do
>
>         is_expected.to <https://secure.ice/?http://is_expected.to> 
> execute.with_change
>
>         expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
> nf_nat_tftp nf_conntrack_ipv4"'
>
>  
>
> Total resources:   13
>
> Touched resources: 13
>
> Resource coverage: 100.00%
>
>  
>
>  
>
>  
>
>  
>
>  
> 2. Augeas resource specifying only context and no lens in manifest. 
> Checking if resource executes with change. 
>
>  
>
> Augeas resource:
>
>   augeas { 'set_iptables_modules':
>
>     context => '/files/etc/sysconfig/iptables-config',
>
>     changes => [
>
>       "set IPTABLES_MODULES '\"iptable_nat ip_conntrack nf_nat_tftp 
> nf_conntrack_ipv4\"'"
>
>     ]
>
>   }
>
>  
>
>  
>
> Spec test:
>
>   describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
> 'etc/sysconfig/iptables-config' do
>
>     it 'specifies the kernel modules to load in the iptables configuration' do
>
>       is_expected.to <https://secure.ice/?http://is_expected.to> 
> execute.with_change
>
>       expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
> nf_nat_tftp nf_conntrack_ipv4"'
>
>       is_expected.to <https://secure.ice/?http://is_expected.to> 
> execute.idempotently
>
>     end
>
>   end
>
>  
>
>  
>
> Output:
>
> bsirinek@mydevhost $ pdk test unit
>
> pdk (INFO): Using Ruby 2.4.5
>
> pdk (INFO): Using Puppet 5.5.12
>
> [✔] Preparing to run the unit tests.
>
> [✖] Running unit tests.
>
> Run options: exclude {:bolt=>true}
>
>   Evaluated 18 tests in 9.104591825 seconds: 1 failures, 0 pending.
>
> failed: rspec: ./spec/classes/init_spec.rb:29: Augeas[set_iptables_modules] 
> doesn't change when executed:
>
> debug: Opening augeas with root 
> /tmp/rspec-puppet-augeas20190625-16038-6r286s, lens path , flags 32
>
> debug: Augeas version 1.8.1 is installed
>
> debug: Will attempt to save and only run if files changed
>
> debug: sending command 'set' with params 
> ["/etc/sysconfig/iptables-config/IPTABLES_MODULES", "\"iptable_nat 
> ip_conntrack nf_nat_tftp nf_conntrack_ipv4\""]
>
> debug: Skipping because no files were changed
>
> debug: Closed the augeas connection
>
>   sebastion Augeas[set_iptables_modules] specifies the kernel modules to load 
> in the iptables configuration
>
>   Failure/Error:
>
>  
>
>     describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
> 'etc/sysconfig/iptables-config' do
>
>       it 'specifies the kernel modules to load in the iptables configuration' 
> do
>
>         is_expected.to <https://secure.ice/?http://is_expected.to> 
> execute.with_change
>
>         expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
> nf_nat_tftp nf_conntrack_ipv4"'
>
>  
>
> Total resources:   13
>
> Touched resources: 13
>
> Resource coverage: 100.00%
>
>  
>
>  
> 3. Augeas resource specifying both incl and lens in manifest. Not checking 
> if resource executes with change. 
>
>  
>
> Augeas resource:
>
>   augeas { 'set_iptables_modules':
>
>     incl    => '/etc/sysconfig/iptables-config',
>
>     lens    => 'Shellvars.lns',
>
>     changes => [
>
>       "set IPTABLES_MODULES '\"iptable_nat ip_conntrack nf_nat_tftp 
> nf_conntrack_ipv4\"'"
>
>     ]
>
>   }
>
>  
>
>  
>
> Spec test:
>
>   describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
> 'etc/sysconfig/iptables-config' do
>
>     it 'specifies the kernel modules to load in the iptables configuration' do
>
>       #is_expected.to <https://secure.ice/?http://is_expected.to> 
> execute.with_change
>
>       expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
> nf_nat_tftp nf_conntrack_ipv4"'
>
>       is_expected.to <https://secure.ice/?http://is_expected.to> 
> execute.idempotently
>
>     end
>
>   end
>
>  
>
>  
>
> Output:
>
> bsirinek@mydevhost $ pdk test unit
>
> pdk (INFO): Using Ruby 2.4.5
>
> pdk (INFO): Using Puppet 5.5.12
>
> [✔] Preparing to run the unit tests.
>
> [✖] Running unit tests.
>
> Run options: exclude {:bolt=>true}
>
>   Evaluated 18 tests in 8.827282266 seconds: 1 failures, 0 pending.
>
> failed: rspec: ./spec/classes/init_spec.rb:29: Augeas[set_iptables_modules] 
> fails when executing:
>
> debug: Opening augeas with root 
> /tmp/rspec-puppet-augeas20190625-18357-10z5g08, lens path , flags 64
>
> debug: Augeas version 1.8.1 is installed
>
> warning: Loading failed for one or more files, see debug for /augeas//error 
> output
>
> debug: /augeas/load/Xfm/error = Can not find lens Shellvars.lns
>
> debug: Will attempt to save and only run if files changed
>
> debug: sending command 'set' with params 
> ["/files/etc/sysconfig/iptables-config/IPTABLES_MODULES", "\"iptable_nat 
> ip_conntrack nf_nat_tftp nf_conntrack_ipv4\""]
>
> debug: Closed the augeas connection
>
> err: Could not evaluate: Saving failed, see debug
>
>   sebastion Augeas[set_iptables_modules] specifies the kernel modules to load 
> in the iptables configuration
>
>   Failure/Error:
>
>  
>
>     describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
> 'etc/sysconfig/iptables-config' do
>
>       it 'specifies the kernel modules to load in the iptables configuration' 
> do
>
>         #is_expected.to <https://secure.ice/?http://is_expected.to> 
> execute.with_change
>
>         expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
> nf_nat_tftp nf_conntrack_ipv4"'
>
>  
>
> Total resources:   13
>
> Touched resources: 13
>
> Resource coverage: 100.00%
>
>  
>
>  
> 4. Augeas resource specifying only context and no lens in manifest. Not 
> checking if resource executes with change. 
>
>  
>
> Augeas resource:
>
>   augeas { 'set_iptables_modules':
>
>     context => '/files/etc/sysconfig/iptables-config',
>
>     changes => [
>
>       "set IPTABLES_MODULES '\"iptable_nat ip_conntrack nf_nat_tftp 
> nf_conntrack_ipv4\"'"
>
>     ]
>
>   }
>
>  
>
>  
>
> Spec test:
>
>   describe_augeas 'set_iptables_modules', :lens => 'Shellvars', :target => 
> 'etc/sysconfig/iptables-config' do
>
>     it 'specifies the kernel modules to load in the iptables configuration' do
>
>       #is_expected.to <https://secure.ice/?http://is_expected.to> 
> execute.with_change
>
>       expect(aug_get('IPTABLES_MODULES')) == '"iptable_nat ip_conntrack 
> nf_nat_tftp nf_conntrack_ipv4"'
>
>       is_expected.to <https://secure.ice/?http://is_expected.to> 
> execute.idempotently
>
>     end
>
>   end
>
>  
>
>  
>
> Output:
>
> bsirinek@mydevhost $ pdk test unit
>
> pdk (INFO): Using Ruby 2.4.5
>
> pdk (INFO): Using Puppet 5.5.12
>
> [✔] Preparing to run the unit tests.
>
> [✔] Running unit tests.
>
> Run options: exclude {:bolt=>true}
>
>   Evaluated 18 tests in 9.325532779 seconds: 0 failures, 0 pending.
>
>  
>
> Total resources:   13
>
> Touched resources: 13
>
> Resource coverage: 100.00%
>
>  
> spec/spec_helper.rb 
>
>  
>
> RSpec.configure do |c|
>
>   c.mock_with :rspec
>
> end
>
>  
>
> require 'puppetlabs_spec_helper/module_spec_helper'
>
> require 'rspec-puppet-facts'
>
>  
>
> require 'spec_helper_local' if File.file?(File.join(File.dirname(__FILE__), 
> 'spec_helper_local.rb'))
>
>  
>
> include RspecPuppetFacts
>
>  
>
> default_facts = {
>
>   puppetversion: Puppet.version,
>
>   facterversion: Facter.version,
>
> }
>
>  
>
> default_fact_files = [
>
>   File.expand_path(File.join(File.dirname(__FILE__), 'default_facts.yml')),
>
>   File.expand_path(File.join(File.dirname(__FILE__), 
> 'default_module_facts.yml')),
>
> ]
>
>  
>
> default_fact_files.each do |f|
>
>   next unless File.exist?(f) && File.readable?(f) && File.size?(f)
>
>  
>
>   begin
>
>     default_facts.merge!(YAML.safe_load(File.read(f), [], [], true))
>
>   rescue => e
>
>     RSpec.configuration.reporter.message "WARNING: Unable to load #{f}: #{e}"
>
>   end
>
> end
>
>  
>
> RSpec.configure do |c|
>
>   c.default_facts = default_facts
>
>   c.hiera_config = 'spec/fixtures/hiera/hiera.yaml'
>
>   c.before :each do
>
>     # set to strictest setting for testing
>
>     # by default Puppet runs at warning level
>
>     Puppet.settings[:strict] = :warning
>
>   end
>
>   c.filter_run_excluding(bolt: true) unless ENV['GEM_BOLT']
>
>   c.after(:suite) do
>
>     RSpec::Puppet::Coverage.report!(0)
>
>   end
>
> end
>
>  
>
> def ensure_module_defined(module_name)
>
>   module_name.split('::').reduce(Object) do |last_module, next_module|
>
>     last_module.const_set(next_module, Module.new) unless 
> last_module.const_defined?(next_module, false)
>
>     last_module.const_get(next_module, false)
>
>   end
>
> end
>
>  
>
> # 'spec_overrides' from sync.yml will appear below this line
>
> require 'rspec-puppet-augeas'
>
> require 'octofacts'
>
> RSpec.configure do |c|
>
> c.default_formatter = 'doc'
>
> c.augeas_fixtures = File.join(File.dirname(File.expand_path(__FILE__)), 
> 'fixtures', 'augeas')
>
> end
>
> require 'puppetlabs_spec_helper/module_spec_helper'
>
> ENV["OCTOFACTS_FIXTURE_PATH"] ||= 
> File.expand_path("fixtures/facts/octofacts", File.dirname(__FILE__))
>
> ENV["OCTOFACTS_INDEX_PATH"]   ||= 
> File.expand_path("fixtures/facts/octofacts-index.yaml", 
> File.dirname(__FILE__))
>
>  
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/d7c413e7-aaea-4871-884a-d6565d36910b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to