Bug #11232

Puppet cannot "require 'md5'" on MRI Ruby 1.9.3

Added by Remi Broemeling 6 months ago. Updated 2 months ago.

Status:In Topic Branch Pending Review Start date:12/06/2011
Priority:Normal Due date:
Assignee:- % Done:

0%

Category:ruby19
Target version:3.X
Affected Puppet version:2.7.6 Branch:https://github.com/puppetlabs/puppet/pull/575
Keywords:md5 ruby19
Votes: 1

Description

We are attempting to migrate from REE to MRI Ruby 1.9.3, but our puppet installation (puppet v2.7.6, facter v1.6.1) is immediately erroring out whenever I try and execute it, with a number of warnings about confinetest ‘operatingsystem’ and finally erroring out when it cannot require ‘md5’.

Complete text of an attempted execution follows

$ sudo -E puppet apply --modulepath="$(pwd)/puppet/modules" --templatedir="$(pwd)/puppet/templates" --verbose "$(pwd)/puppet/manifests/site.pp" --debug
/usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/facter-1.6.1/lib/facter/util/config.rb:7: Use RbConfig instead of obsolete and deprecated Config.
/usr/local/stow/ruby-1.9.3-p0/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': iconv will be deprecated in the future, use String#encode instead.
info: Loading facts in block_devices
debug: importing '/home/foo/infrastructure/current/puppet/manifests/line.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/node_templates/database.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/node_templates/delayed_jobs.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/node_templates/app_server.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/nodes/333980-db02.rs.goclio.com.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/nodes/cron.rs.goclio.com.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/nodes/333939-web01.rs.goclio.com.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/nodes/dj02.rs.goclio.com.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/nodes/monitor.rs.goclio.com.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/nodes/333963-web02.rs.goclio.com.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/nodes/ci.rs.goclio.com.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/nodes/333965-db01.rs.goclio.com.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/nodes/dj03.rs.goclio.com.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/manifests/nodes/dj01.rs.goclio.com.pp' in environment production
debug: Failed to load library 'selinux' for feature 'selinux'
debug: importing '/home/foo/infrastructure/current/puppet/modules/networking/manifests/init.pp' in environment production
debug: Automatically imported networking from networking into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/networking/manifests/denyhosts.pp' in environment production
debug: Automatically imported networking::denyhosts from networking/denyhosts into production
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
debug: Puppet::Type::Package::ProviderRpm: Executing '/bin/rpm --version'
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
debug: Puppet::Type::Package::ProviderYum: Executing '/bin/rpm --version'
debug: Puppet::Type::Package::ProviderAptrpm: Executing '/bin/rpm -ql rpm'
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
debug: Puppet::Type::Package::ProviderUrpmi: Executing '/bin/rpm -ql rpm'
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
/usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/provider/service/freebsd.rb:8: warning: class variable access from toplevel
/usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/provider/service/freebsd.rb:9: warning: class variable access from toplevel
/usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/provider/service/freebsd.rb:10: warning: class variable access from toplevel
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
/usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/provider/service/bsd.rb:11: warning: class variable access from toplevel
debug: importing '/home/foo/infrastructure/current/puppet/modules/networking/manifests/iptables.pp' in environment production
debug: Automatically imported networking::iptables from networking/iptables into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/networking/manifests/utilities.pp' in environment production
debug: Automatically imported networking::utilities from networking/utilities into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/clock/manifests/init.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/modules/clock/manifests/ntp.pp' in environment production
debug: Automatically imported clock::ntp from clock/ntp into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/clock/manifests/system.pp' in environment production
debug: Automatically imported clock::system from clock/system into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/dsh/manifests/init.pp' in environment production
debug: Automatically imported dsh from dsh into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/nagios/manifests/init.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/modules/nagios/manifests/send_nsca.pp' in environment production
debug: Automatically imported nagios::send_nsca from nagios/send_nsca into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/postfix/manifests/init.pp' in environment production
debug: Automatically imported postfix from postfix into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/python/manifests/init.pp' in environment production
debug: Automatically imported python from python into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/shell/manifests/init.pp' in environment production
debug: importing '/home/foo/infrastructure/current/puppet/modules/shell/manifests/environment.pp' in environment production
debug: Automatically imported shell::environment from shell/environment into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/snmpd/manifests/init.pp' in environment production
debug: Automatically imported snmpd from snmpd into production
debug: Scope(Class[Snmpd]): Retrieving template snmpd/etc/snmp/snmpd.conf.erb
debug: template[/home/foo/infrastructure/current/puppet/modules/snmpd/templates/etc/snmp/snmpd.conf.erb]: Bound template variables for /home/foo/infrastructure/current/puppet/modules/snmpd/templates/etc/snmp/snmpd.conf.erb in 0.00 seconds
debug: template[/home/foo/infrastructure/current/puppet/modules/snmpd/templates/etc/snmp/snmpd.conf.erb]: Interpolated template /home/foo/infrastructure/current/puppet/modules/snmpd/templates/etc/snmp/snmpd.conf.erb in 0.00 seconds
debug: importing '/home/foo/infrastructure/current/puppet/modules/ssh/manifests/init.pp' in environment production
debug: Automatically imported ssh from ssh into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/sudo/manifests/init.pp' in environment production
debug: Automatically imported sudo from sudo into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/system/manifests/init.pp' in environment production
debug: Automatically imported system from system into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/system/manifests/development.pp' in environment production
debug: Automatically imported system::development from system/development into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/system/manifests/log4r.pp' in environment production
debug: Automatically imported system::log4r from system/log4r into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/system/manifests/logwatch.pp' in environment production
debug: Automatically imported system::logwatch from system/logwatch into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/system/manifests/syslog.pp' in environment production
debug: Automatically imported system::syslog from system/syslog into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/system/manifests/utilities.pp' in environment production
debug: Automatically imported system::utilities from system/utilities into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/user/manifests/init.pp' in environment production
debug: Automatically imported user from user into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/user/manifests/clio.pp' in environment production
debug: Automatically imported user::clio from user/clio into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/user/manifests/virtual.pp' in environment production
debug: Automatically imported user::virtual from user/virtual into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/user/manifests/consultants.pp' in environment production
debug: Automatically imported user::consultants from user/consultants into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/user/manifests/graphite.pp' in environment production
debug: Automatically imported user::graphite from user/graphite into production
debug: Failed to load library 'ldap' for feature 'ldap'
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
Could not load confine test 'operatingsystem': cannot load such file -- puppet/provider/confine/operatingsystem
debug: importing '/home/foo/infrastructure/current/puppet/modules/user/manifests/nginx.pp' in environment production
debug: Automatically imported user::nginx from user/nginx into production
debug: importing '/home/foo/infrastructure/current/puppet/modules/user/manifests/puppet.pp' in environment production
debug: Automatically imported user::puppet from user/puppet into production
/usr/local/stow/ruby-1.9.3-p0/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- md5 (LoadError)
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/functions/md5.rb:2:in `block in '
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/ast/function.rb:33:in `evaluate'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/ast.rb:76:in `safeevaluate'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/ast/vardef.rb:16:in `evaluate'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/ast.rb:76:in `safeevaluate'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/ast/astarray.rb:25:in `block in evaluate'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/ast/astarray.rb:20:in `each'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/ast/astarray.rb:20:in `evaluate'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/ast.rb:76:in `safeevaluate'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/resource/type.rb:74:in `evaluate_code'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/resource.rb:85:in `evaluate'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/compiler.rb:260:in `block (2 levels) in evaluate_definitions'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/compiler.rb:260:in `each'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/compiler.rb:260:in `block in evaluate_definitions'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/util/errors.rb:35:in `exceptwrap'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/compiler.rb:259:in `evaluate_definitions'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/compiler.rb:275:in `block in evaluate_generators'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/compiler.rb:270:in `loop'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/compiler.rb:270:in `evaluate_generators'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/compiler.rb:105:in `compile'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/compiler.rb:24:in `compile'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/indirector/catalog/compiler.rb:77:in `block in compile'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/util.rb:185:in `benchmark'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/indirector/catalog/compiler.rb:75:in `compile'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/indirector/catalog/compiler.rb:35:in `find'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/indirector/indirection.rb:189:in `find'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/application/apply.rb:204:in `main'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/application/apply.rb:135:in `run_command'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/application.rb:306:in `block (2 levels) in run'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/application.rb:410:in `hook'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/application.rb:306:in `block in run'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/application.rb:401:in `exit_on_fail'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/application.rb:306:in `run'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/util/command_line.rb:69:in `execute'
    from /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/bin/puppet:4:in `'
    from /usr/local/bin/puppet:19:in `load'
    from /usr/local/bin/puppet:19:in `
'

Looking at the file involved, it looks like it has not yet been updated for the new ‘md5’ module required on Ruby 1.9.x:

$ cat /usr/local/stow/ruby-1.9.3-p0/lib/ruby/gems/1.9.1/gems/puppet-2.7.6/lib/puppet/parser/functions/md5.rb
Puppet::Parser::Functions::newfunction(:md5, :type => :rvalue, :doc => "Returns a MD5 hash value from a provided string.") do |args|
      require 'md5'

      Digest::MD5.hexdigest(args[0])
end

… I believe that should be “require ‘digest/md5’”, not “require ‘md5’”.

History

Updated by Josh Cooper 6 months ago

  • Description updated (diff)
  • Status changed from Unreviewed to Accepted
  • Target version set to 2.7.x

Although Digest::MD5 is used in a number of places, the only place we require it is in lib/puppet/parser/functions/md5.rb According to the source:

# just for compatibility; requiring "md5" is obsoleted
#
# $RoughId: md5.rb,v 1.4 2001/07/13 15:38:27 knu Exp $
# $Id: md5.rb 12007 2007-03-06 10:09:51Z knu $

Changing that to require 'digest/md5' seems to work back to and including 1.8.5

Updated by Daniel Pittman 2 months ago

  • Target version changed from 2.7.x to 3.X

Updated by Daniel Pittman 2 months ago

  • Status changed from Accepted to In Topic Branch Pending Review
  • Branch set to https://github.com/puppetlabs/puppet/pull/575

https://github.com/puppetlabs/puppet/pull/575 should resolve this for master / Telly.

Also available in: Atom PDF