我是Chef和Ruby的新手。
template '/var/www/html/index.html' do # ~FC033
source 'index.html.erb'
mode '0644'
owner 'web_admin'
group 'web_admin'
end
块内的语法是什么,例如source' index.html.erb',就像[space] b一样,这个语法是在Ruby中定义的,还是作为Chef的另一个DSL部分?
答案 0 :(得分:1)
这是编写方法的语法,在ruby中你可以省略括号。整个厨师用红宝石书写并使用ruby dsl
答案 1 :(得分:1)
为了扩展Przemek的答案,它是所有Ruby但是Chef应用了许多特殊的东西来使DSL看起来更具声明性。如果你添加了所有可选项,那么它的工作原理可能会更清楚一点(因为块不是精确的翻译):
self.template('/var/www/html/index.html', do # ~FC033
self.source('index.html.erb')
...
end)
template()
是一个方法调用,它接受一个资源名称和一个构成资源主体的块(块是ruby的一个特性,允许轻松地将一个匿名的代码块传递给一个方法)。作为运行template()
方法的一部分,它创建一个Chef::Resource::Template
对象实例,然后针对它运行提供的块。 source()
类是Template
类的一种获取或设置@source
实例变量的方法,在这种情况下我们会设置它。