我一直在寻找关于Berksfile中内容的详细文档,但我只找到了一些例子,以及"你可以这样做"的非正式内容。(这包括http://berkshelf.com…)
Q1:Berksfile的基本语法是什么?
Q2:可以进入Berksfile的"声明"的(完整)列表是什么?
Q3:"cookbook"声明采用了一个可选的散列参数。香草Berkshelf支持的(完整)选项列表是什么?
对于我的答案,我将链接到v2.0.12版本,因为v3目前正在开发中。
A1.基本语法与任何Ruby文件相同,因为Berksfile只是另一个Ruby DSL(它似乎主要由这个源代码驱动,并得到了DSL Eval Mixin的一些帮助)
A2.很难定义完整的声明列表,因为Ruby可以在任何时候以多种方式进行更改/增强。(Hurray表示猴痘)。但从v2.0.12开始,全套声明似乎包括(metadata
、group
、site
、chef_api
、cookbook
),因为这些都是用expose_method标记的方法。当然,每个选项都取决于每个选项的实现。(此外,任何有效的ruby都可以放入Berksfile中,我在A3中利用了这一点,评估当然是在作为mixin一部分的CleanRoom类中进行的)。
A3.同样,可扩展性使这一点变得困难,然而,从一些过程来看,CookbookSource类似乎用一些类级方法定义了哪些是有效的选项。好吧,利用这是一个红宝石dsl,我扔了
puts "options: #{Berkshelf::CookbookSource.valid_options}"
进入我的Berksfile,运行berks
并得出:
options: [:constraint, :locations, :group, :locked_version, :chef_api, :node_name, :client_key, :git, :ref, :branch, :tag, :rel, :github, :protocol, :site, :path, :metadata]
现在,所有这些意味着什么,将需要更多的深入研究源代码。然而,也许这会给你一个审视事物的起点?
出于好奇,你觉得缺少什么文档http://berkshelf.com?