ОШИБКА: неинициализированная константа # ‹Класс: 0x00000005f9fe70› :: ApplicationCookbook

Запуск chef-client с набором кулинарных книг, включая compat_resource 12.10.4, в качестве автономного или зависимого от другой кулинарной книги. Я получаю фатальную ошибку при запуске chef-client и вижу следующую трассировку стека.

Версия поваренной книги

12.10.4

Версия Chef-client

12.10.24

Детали платформы

OS X локальная; Сервер CentOS 6.5

Chef client fatal error: 
[2016-06-02T16:22:13-04:00] WARN: Chef::Provider::AptRepository already exists!  Cannot create deprecation class for LWRP provider apt_repository from cookbook apt
[2016-06-02T16:22:13-04:00] WARN: AptRepository already exists!  Deprecation class overwrites Custom resource apt_repository from cookbook apt

================================================================================
Recipe Compile Error in /var/chef/cache/cookbooks/tomcat/resources/default.rb
================================================================================

NameError
---------
uninitialized constant #<Class:0x00000005f9fe70>::ApplicationCookbook

Cookbook Trace:
---------------
  /var/chef/cache/cookbooks/tomcat/resources/default.rb:20:in `class_from_file'
  /var/chef/cache/cookbooks/compat_resource/files/lib/chef_compat/monkeypatches/chef/resource/lwrp_base.rb:50:in `build_from_file'

Relevant File Content:
----------------------
/var/chef/cache/cookbooks/tomcat/resources/default.rb:

 13:  #
 14:  # Unless required by applicable law or agreed to in writing, software
 15:  # distributed under the License is distributed on an "AS IS" BASIS,
 16:  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 17:  # See the License for the specific language governing permissions and
 18:  # limitations under the License.
 19:  
 20>> include ApplicationCookbook::ResourceBase
 21:  
 22:  actions :install, :remove, :restart, :start
 23:  
 24:  attr_accessor :service_name, :clustered 
 25:  attr_accessor :http_port, :ajp_port, :ssl_port, :shutdown_port, :host_name, :session_timeout
 26:  attr_accessor :unpack_wars, :auto_deploy, :jvm_opts, :jmx_opts, :webapp_opts, :resources, :env, :roles, :users
 27:  attr_accessor :jmx_access, :jmx_access_file, :jmx_password_file, :jmx_password
 28:  attr_accessor :more_opts, :user, :context_dir, :log_dir, :tmp_dir, :work_dir, :manage_config_file
 29:  attr_accessor :webapp_dir, :base, :pid_file, :use_security_manager, :group, :shutdown_wait

Platform:
---------
x86_64-linux


Running handlers:
[2016-06-02T16:22:14-04:00] ERROR: Running exception handlers
Running handlers complete
[2016-06-02T16:22:14-04:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 04 seconds
[2016-06-02T16:22:14-04:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2016-06-02T16:22:14-04:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2016-06-02T16:22:14-04:00] ERROR: uninitialized constant #<Class:0x00000005f9fe70>::ApplicationCookbook
[2016-06-02T16:22:14-04:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

Первый файл / строка в stacktrace (/var/chef/cache/cookbooks/tomcat/resources/default.rb:20) следующий:

включить ApplicationCookbook :: ResourceBase

И вторая строка в stacktrace (/var/chef/cache/cookbooks/compat_resource/files/lib/chef_compat/monkeypatches/chef/resource/lwrp_base.rb:50) следующая:

# Call the actual build_from_file
super

Вот полный файл:

require 'chef_compat/resource/lwrp_base'
require 'chef/resource/lwrp_base'

module ChefCompat
  module Monkeypatches
    #
    # NOTE: LOTS OF METAPROGRAMMING HERE. NOT FOR FAINT OF HEART.
    #

    # Add an empty module to Class so we can temporarily override it in build_from_file
    module Class
    end
    class<<::Class
      prepend(ChefCompat::Monkeypatches::Class)
    end

    module Chef
      module Resource
        module LWRPBase
          def build_from_file(cookbook_name, filename, run_context)
            # If the cookbook this LWRP is from depends on compat_resource, fix its LWRPs up real good
            if run_context.cookbook_collection[cookbook_name].metadata.dependencies.has_key?('compat_resource')
              # All cookbooks do Class.new(Chef::Resource::LWRPBase). Change Class.new
              # temporarily to translate Chef::Resource::LWRPBase to ChefCompat::Resource
              ChefCompat::Monkeypatches::Class.module_eval do
                def new(*args, &block)
                  # Trick it! Use ChefCompat::Resource instead of Chef::Resource::LWRPBase
                  if args == [ ::Chef::Resource::LWRPBase ]
                    ChefCompat::Monkeypatches::Class.module_eval do
                      remove_method(:new) if method_defined?(:new)
                    end
                    args = [ ChefCompat::Resource::LWRPBase ]
                  end
                  super(*args, &block)
                end
              end

              begin

                # Call the actual build_from_file
                super # **LINE 50 AS MENTIONED IN STACKTRACE**

              ensure
                class<<ChefCompat::Monkeypatches::Class
                  remove_method(:new) if method_defined?(:new)
                end
              end
            else
              # Call the actual build_from_file
              super
            end
          end
        end
        class <<::Chef::Resource::LWRPBase
          prepend(LWRPBase)
        end
      end
    end
  end
end

person Davek804    schedule 03.06.2016    source источник


Ответы (1)


Поваренная книга application_java не поддерживается в Chef 12. Ее необходимо перенести до нового кода, который я написал на кикстартере, но у меня не было времени и опыта в Java, чтобы знать, как это лучше всего сделать.

person coderanger    schedule 03.06.2016