Bug 54857 - Ошибка работы puppet - Error 500 on SERVER: Server Error: undefined method `exists?' for nil:NilClass
Summary: Ошибка работы puppet - Error 500 on SERVER: Server Error: undefined method `e...
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: gem-puppet (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 major
Assignee: majioa@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-06-19 15:14 MSK by gfh1gfh1
Modified: 2025-11-06 17:16 MSK (History)
13 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description gfh1gfh1 2025-06-19 15:14:20 MSK
ALT Server 11.0

Установлены и настроены пакеты:
puppet-8.4.0-alt2.noarch
puppetserver-8.4.0-alt2.noarch

При запуске агента на клиенте выдает ошибку сервера (даже при отсутствии любых манифестов)
# puppet agent -t
Info: Using environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Notice: Requesting catalog from rpa2:8140 (10.168.72.28)
Notice: Catalog compiled by rpa2
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: undefined method `exists?' for nil:NilClass
Did you mean?  exit
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run

В логе puppetserver выдает следующее:
2025-06-19T14:41:36.721+03:00 ERROR [qtp1658927374-52] [puppetserver] Puppet Server Error: undefined method `exists?' for nil:NilClass
Did you mean?  exit
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/type/user.rb:514:in `exists?'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/file_system/file_impl.rb:165:in `replace_file'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/file_system/jruby.rb:23:in `replace_file'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/file_system.rb:419:in `replace_file'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/indirector/json.rb:19:in `save'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/indirector/indirection.rb:326:in `save'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/node/facts.rb:22:in `save'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/indirector/catalog/compiler.rb:45:in `save_facts_from_request'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/indirector/catalog/compiler.rb:54:in `find'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/indirector/indirection.rb:230:in `find'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/api/indirected_routes.rb:121:in `do_find'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/api/indirected_routes.rb:54:in `block in call'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/context.rb:64:in `override'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet.rb:287:in `override'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/api/indirected_routes.rb:53:in `call'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/api/server/v3.rb:18:in `block in wrap'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/route.rb:85:in `block in process'
org/jruby/RubyArray.java:1989:in `each'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/route.rb:84:in `process'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/route.rb:91:in `process'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/route.rb:91:in `process'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/handler.rb:88:in `block in process'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/handler.rb:71:in `block in with_request_profiling'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/util/profiler/around_profiler.rb:59:in `profile'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/util/profiler.rb:53:in `profile'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/handler.rb:67:in `with_request_profiling'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/handler.rb:87:in `block in process'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/handler.rb:94:in `respond_to_errors'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/network/http/handler.rb:86:in `process'
uri:classloader:/puppetserver-lib/puppet/server/master.rb:69:in `block in handleRequest'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/context.rb:64:in `override'
/usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet.rb:287:in `override'
uri:classloader:/puppetserver-lib/puppet/server/master.rb:68:in `handleRequest'

т.е. по идее ошибка в файле /usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/type/user.rb в районе строки 514
строки 505-515:
    # This method has been exposed for puppet to manage users and groups of
    # files in its settings and should not be considered available outside of
    # puppet.
    #
    # (see Puppet::Settings#service_user_available?)
    #
    # @return [Boolean] if the user exists on the system
    # @api private
    def exists?
      provider.exists? ###!!! строка 514 !!!###
    end

# rpm -qf /usr/lib/ruby/gemie/gems/puppet-8.4.0/lib/puppet/type/user.rb
gem-puppet-8.4.0-alt2.noarch

Посмотрел этот файл на github - вроде всё правильно.

Потом сравнил с рабочей версией puppet сервера развернутого на основе ALT Server 10.4
# rpm -qf /usr/lib/ruby/gemie/gems/puppet-7.20.0/lib/puppet/type/user.rb
gem-puppet-7.20.0-alt2.p10.0.noarch

Там этот метод описан чуток по другому:

    def exists?
      provider&.exists?
    end

После provider добавлен &

Привел к тому же виду файл на ALT Server 11.0 и после перезапуска puppetserver агент получает и выполняет манифесты без ошибок

# puppet agent -t
Info: Using environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Notice: Requesting catalog from rpa2:8140 (10.168.72.28)
Notice: Catalog compiled by rpa2
Info: Caching catalog for rpa2
Info: Applying configuration version '1750334956'
Notice: /Stage[main]/Main/Node[default]/File[/tmp/1.txt]/ensure: defined content as '{sha256}932f3c1b56257ce8539ac269d7aab42550dacf8818d075f0bdf1990562aae3ef' (corrective)
Notice: Applied catalog in 0.03 seconds

PS. Посмотрел на Debain 12 - там так же указано provider.exists? и puppet сервер и агенты работают. Не специалист по ruby, но кажется тут всплыли какие-то особенности ALT сборки.
Comment 1 Alexander Makeenkov 2025-09-09 16:36:33 MSK
Актуально для версий:

puppet-8.4.0-alt2
puppetserver-8.4.0-alt4