什么红宝石功能用于厨师食谱?

时间:2013-12-13 15:01:16

标签: ruby syntax chef

我刚开始使用厨师,对红宝石知之甚少。

我在理解食谱中使用的语言语法方面遇到了问题。

说,我在recipes / default.rb中的cookbook中创建一个目录,如:

directory "/home/test/mydir" do
  owner "test"
  mode "0755"
  action :create
  recursive true
end

我认为这是有效的ruby脚本的一部分。像owner "test"这样的行是什么意思?这是函数调用,变量赋值还是完全不同的东西?

2 个答案:

答案 0 :(得分:1)

Chef是用Ruby编写的,并广泛使用Ruby功能来设计自定义DSL。几乎每个厨师配置文件都是用基于Ruby的DSL编写的。

这意味着为了有效地使用厨师,您应该熟悉Ruby语法的基本知识,包括

  • 语法
  • 数据类型(与其他语言相比的主要区别是符号)

你不需要在Ruby中了解很多关于元编程的知识。

您发布的代码的案例是基于Ruby的DSL的一个很好的例子。让我解释一下。

# Call the method directory passing the path and a block
# containing some code to be evaluated
directory "/home/test/mydir" do

  # chown the directory to the test user
  owner "test"

  # set the permissions to 0555
  mode "0755"

  # create the directory if it does not exists
  action :create

  # equivalent of -p flag in the mkdir
  recursive true

end

块是指定要在单个上下文中评估的一组操作(在本例中为create,set permissions等)的便捷方式(在这种情况下,在该路径的上下文中)。

答案 1 :(得分:1)

让我们把它分解。

directory "/home/test/mydir" do
  ...
end

您只是调用Chef定义的全局方法directory,传递一个参数"/home/test/mydir"和一个块(doend之间的所有内容)。< / p>

此块可能在Chef创建的特殊范围内有效,其中所有选项(ownermodeaction等)都是方法。