加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在ruby_block中使用来自另一个厨师食谱的厨师助手库

发布时间:2020-12-17 02:08:24 所属栏目:百科 来源:网络整理
导读:AWS Opsworks:Chef版本11.10,Berkshelf版本3.2.0. 我无法弄清楚如何在cookbook B的ruby_block中使用cookbook A中的辅助库. 我发现post讨论了如何在ruby_block中包含一个方法,another讨论了如何在cookbook中共享库,但我不能同时使用它们. cookbookA /库/ hel
AWS Opsworks:Chef版本11.10,Berkshelf版本3.2.0.

我无法弄清楚如何在cookbook B的ruby_block中使用cookbook A中的辅助库.

我发现post讨论了如何在ruby_block中包含一个方法,another讨论了如何在cookbook中共享库,但我不能同时使用它们.

cookbookA /库/ helpers.rb

module libraryA
    module Helpers
        def log(output)
            Chef::Log.info("#{cookbook_name}:#{recipe_name}: #output}")
        end
    end
end

cookbookB / metadata.rb

depends 'cookbookA'

以下setup.rb有效.

cookbookB /食谱/的setup.rb

::Chef::Recipe.send(:include,libraryA::Helpers)
 log("this is a log")

但是,当我在ruby块中使用log函数时,它会失败.以下setup.rb不起作用:

cookbookB /食谱/的setup.rb

::Chef::Recipe.send(:include,libraryA::Helpers)
 ruby_block "logging-function" do
      block do
           log("this is a log")
      end
 end

P.S.:我也尝试使用:: Chef :: Resource.send(:include,
LibraryA的::佣工)

更新的代码块:

::Chef::Recipe.send(:include,libraryA::Helpers) 
ruby_block "logging-test" do 
    block do 
        ::Chef::Recipe.send(:include,libraryA::Helpers)    
        ::libraryA::Helpers.ttlog("message") 
    end 
end

收到错误:NoMethodError – libraryA :: Helpers:Module的未定义方法ttlog

更新了帮助者

cookbookA /库/ helpers.rb

def log(output)
    Chef::Log.info("#{cookbook_name}:#{recipe_name}: #output}")
end

P.S:删除了模块结构

解决方法

我认为ruby_block在其他上下文中运行,在其他对象下运行.
您可以尝试将该库包含在提供程序中,但我不能保证它会起作用.

:: Chef :: Provider :: RubyBlock.send(:include,libraryA :: Helpers)

PS.资源确实有参数的定义和列表,但代码是从Provider执行的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读