【问题标题】:chef extending recipes' libraries (with testing)厨师扩展食谱库(带测试)
【发布时间】:2018-05-05 06:59:38
【问题描述】:

我有一个厨师食谱名称my_recipe,我想向它添加一个库来帮助我完成一些工作,同时仍然能够顺利运行 chefspec。 我阅读了extend recipe 文档,但找不到如何在配方命名空间中扩展(或动态创建)类。

这是一个sn-p:

# my_cookbook/recipes/my_recipe.rb
foo = MyRecipe::MyClass.foo


# my_cookbook/libraries/my_class.rb
class Chef
  class Recipe
    class MyRecipe
      unless defined?(Chef::Recipe::MyRecipe::MyClass)
        class MyClass
          def self.foo
            # do stuff
          end
        end
      end
    end
  end
end

我错过了什么? 厨师如何将 dsl 食谱名称 my_recipe 转换为食谱对象 (MyRecipe)?

【问题讨论】:

    标签: ruby chef-infra chefspec


    【解决方案1】:

    没有这样的翻译。我真的不明白你从哪里得到整个班级结构。你想要的只是:

    module MyHelpers
      def self.foo
    

    然后在你的食谱中添加MyHelpers.foo

    【讨论】:

    • 这对我不起作用,因为如果其他人在他的开发中引入了相同的模块名称,它可能会导致很多冲突。为了消除这种冲突,我想使用配方命名空间。话虽如此,我记得很多年前做过。然而,我看到了this post,只是无法理解厨师如何将 dsl 转换为相应的对象,所以我可以使用这个对象来混合\特征我的库\助手。
    • 定义自定义资源与定义非资源辅助方法有很大不同。不要像这样对Chef::Recipe 下的模块进行猴子补丁。不是,现在永远 :) 如果您只使用自己的命名空间,则不会有或多或少的名称冲突风险。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    相关资源
    最近更新 更多