我刚开始使用厨师,对红宝石知之甚少。
我在理解食谱中使用的语言语法方面遇到了问题。
说,我在recipes / default.rb中的cookbook中创建一个目录,如:
directory "/home/test/mydir" do
owner "test"
mode "0755"
action :create
recursive true
end
我认为这是有效的ruby脚本的一部分。像owner "test"
这样的行是什么意思?这是函数调用,变量赋值还是完全不同的东西?
答案 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"
和一个块(do
和end
之间的所有内容)。< / p>
此块可能在Chef创建的特殊范围内有效,其中所有选项(owner
,mode
,action
等)都是方法。