A quick update on this one:

With Patrick's help, we were able to re-produce the issue in AWS. The root 
cause appears to be that the Puppet::Provider class includes the 
Puppet::Util module, which also happens to have a Puppet::Util::Package 
sub-module. So, depending on the load order of puppet/util/package and 
puppet/provider/package files, providers using the new PackageTargatable 
class could trip this error as there is a window where 
Puppet::Provider::Package may actually be the Puppet::Util::Package module.

TL/DR: Including a module in Ruby brings in more than just methods.

A JIRA bug is open and a PR is up with changes to the package providers to 
ensure the right files are required before class inheritance happens:

https://tickets.puppetlabs.com/browse/PUP-9794

Thanks a bunch to everyone who reported this issue and especially to 
Patrick Whitney for working with us to troubleshoot it.

-Charlie

On Friday, June 21, 2019 at 11:10:30 AM UTC-7, Jeff Cheng wrote:
>
> We're seeing similar issues with the official v6.5.0 docker image when 
> running in circleci:
> circleci@default-d4c9fa03-e104-4e3d-bb5e-3510a1a9eed8:~/project$ docker 
> run --rm puppet/puppet-agent-ubuntu:6.5.0 resource --types
> Error: Could not autoload puppet/provider/package/gem: superclass must be 
> a Class (Module given)
> Error: Could not autoload puppet/type/package: Could not autoload puppet/
> provider/package/gem: superclass must be a Class (Module given)
> Error: Could not parse application options: Could not autoload puppet/type
> /package: Could not autoload puppet/provider/package/gem: superclass must 
> be a Class (Module given)
>
> Running with v6.4.2 works fine on the same box:
> circleci@default-d4c9fa03-e104-4e3d-bb5e-3510a1a9eed8:~/project$ docker 
> run --rm puppet/puppet-agent-ubuntu:6.4.2 resource --types
> augeas
> cron
> exec
> file
> filebucket
> group
> host
> mount
> notify
> package
> resources
> schedule
> scheduled_task
> selboolean
> selmodule
> service
> ssh_authorized_key
> sshkey
> stage
> tidy
> user
> whit
> yumrepo
> zfs
> zone
> zpool
>
>
> On Thursday, June 20, 2019 at 4:53:34 PM UTC-4, Patrick Whitney wrote:
>>
>> Hello Everyone,
>>
>> I hope you can help.
>>
>> Our puppet agent was updated to version 6.5.0 on our servers last night.  
>> Things are working fine, except for two servers are throwing the error 
>> below (SNIP #1).    A little digging found I could reproduce the error by 
>> running 'facter -p' or 'puppet facts'  (SNIP #2).  Trying to identify 
>> exactly what is going on, I got as far as running the offending ruby script 
>> (package_provider.rb) and it also returns the error, but, at least with a 
>> stack trace (SNIP #3).  
>>
>> Does anyone have any idea what we've encountered?  
>>
>> Any help would be greatly appreciated. 
>>
>> Thanks!
>> -Pat
>>
>>
>>
>> SNIP #1
>>
>> # puppet agent -t
>> Info: Using configured environment 'production'
>> Info: Retrieving pluginfacts
>> Info: Retrieving plugin
>> Info: Retrieving locales
>> Info: Loading facts
>> Error: Could not autoload puppet/provider/package/gem: superclass must 
>> be a Class (Module given)
>> Error: Facter: error while resolving custom facts in /opt/puppetlabs/
>> puppet/cache/lib/facter/package_provider.rb: Could not autoload puppet/
>> provider/package/gem: superclass must be a Class (Module given)
>> Info: Caching catalog for eu-assist.aws-eu.int.luminoso.com
>> Info: Applying configuration version '1561063233'
>> Notice: Applied catalog in 15.24 seconds
>>
>>
>> SNIP #2
>> # puppet facts > /dev/null
>> Error: Could not autoload puppet/provider/package/gem: superclass must 
>> be a Class (Module given)
>> Error: Facter: error while resolving custom facts in /opt/puppetlabs/
>> puppet/cache/lib/facter/package_provider.rb: Could not autoload puppet/
>> provider/package/gem: superclass must be a Class (Module given)
>> # facter -p > /dev/null
>> 2019-06-20 20:42:36.539351 ERROR puppetlabs.facter - error while 
>> resolving custom facts in /opt/puppetlabs/puppet/cache/lib/facter/
>> package_provider.rb: Could not autoload puppet/provider/package/gem: 
>> superclass must be a Class (Module given)
>>
>> SNIP #3
>> # /opt/puppetlabs/puppet/bin/ruby 
>> /opt/puppetlabs/puppet/cache/lib/facter/package_provider.rb
>> Traceback (most recent call last):
>>  15: from /opt/puppetlabs/puppet/cache/lib/facter/package_provider.rb:11:
>> in `<main>'
>>  14: from 
>> /opt/puppetlabs/puppet/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in
>>  
>> `require'
>>  13: from 
>> /opt/puppetlabs/puppet/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in
>>  
>> `require'
>>  12: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/type/package
>> .rb:9:in `<top (required)>'
>>  11: from 
>> /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/type/package.rb:10:in `
>> <module:Puppet>'
>>  10: from 
>> /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/metatype/manager.rb:127:in
>>  
>> `newtype'
>>  9: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/autoload
>> .rb:215:in `loadall'
>>  8: from 
>> /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/autoload.rb:79:in `
>> loadall'
>>  7: from 
>> /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/autoload.rb:79:in 
>> `each'
>>  6: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/autoload
>> .rb:81:in `block in loadall'
>>  5: from 
>> /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/autoload.rb:66:in `
>> load_file'
>>  4: from 
>> /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/autoload.rb:66:in 
>> `load'
>>  3: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/provider/
>> package/gem.rb:1:in `<top (required)>'
>>  2: from 
>> /opt/puppetlabs/puppet/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in
>>  
>> `require'
>>  1: from 
>> /opt/puppetlabs/puppet/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in
>>  
>> `require'
>> /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/provider/
>> package_targetable.rb:23:in `<top (required)>': Could not autoload 
>> puppet/provider/package/gem: superclass must be a Class (Module given) 
>> (Puppet::Error)
>>
>>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/833963f9-d84c-47ca-a486-80f499ca52ab%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to