首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chef库从Chef 12转换到Chef 14的问题

Chef库从Chef 12转换到Chef 14的问题
EN

Stack Overflow用户
提问于 2021-06-18 23:55:44
回答 1查看 31关注 0票数 1

我们公司正在从Chef 12 (12.19.36)更新到Chef 14 (14.14.25)。我有一个包含助手函数库的食谱,其中包含以下代码:

代码语言:javascript
复制
require 'chef/mixin/shell_out'

module My
  module Helpers
    include Chef::Mixin::ShellOut

     def my_method
       ...
     end
  end
end

Chef::Resource.send(:include, My::Helpers)
Chef::Recipe.send(:include, My::Helpers)

然后在同一配方中的资源中调用这些帮助器方法,但也可以从包含该配方的其他配方(及其资源)中调用。因此,正如我所理解的那样,为什么我会想要发送给所有Chef::Resource和Chef::Recipe的,但我应该声明我不是Ruby程序员,所以我的理解并不是很深入。

在任何情况下,这与我们的厨师12客户端工作得很好,但现在与厨师14中断,调用‘my_ NoMethod’时出现方法错误。(在对这个配方的调用中,甚至不考虑是否有其他配方在调用它。)这是完整的错误,但有些命名不明确。

代码语言:javascript
复制
    NoMethodError
    -------------
    undefined method `my_method' for #<#<Class:0x0000000003d9fd98>:0x0000000004c56aa8>

    Cookbook Trace:
    ---------------
    /var/chef/cache/cookbooks/my_test_recipe/resources/default.rb:10:in `block in class_from_file'

    Resource Declaration:
    ---------------------
    # In /var/chef/cache/cookbooks/my_test_recipe/recipes/default.rb

     53: call_to_my_resource propertyname
     54:

    Compiled Resource:
    ------------------
    # Declared in /var/chef/cache/cookbooks/my_test_recipe/recipes/default.rb:53:in `from_file'

我看过很多其他的内部配方,没有两个是一样的,每个人做事情的方式都不同。例如,许多示例可能会直接在资源文件中包含帮助程序,但这将不允许不需要该资源的其他方法直接调用该方法。(它们调用资源,但也需要直接调用帮助器方法。)解释这一切的在线文档很少。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-20 10:38:23

我做了更多的研究,根据一些提示,我添加了额外的一行:

代码语言:javascript
复制
Chef::Provider.send(:include, My::Helpers)

这位于助手库文件的底部,以及相应的“send”to Resource和Recipe。我不能说我完全理解它,但我认为我的自定义资源是Provider类而不是resource类?我喜欢任何可以帮助我更好地理解这一点的评论。由于helper函数的使用位置,我仍然需要保留其他行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68038198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档