主厨资源块语法

时间:2018-05-29 21:20:35

标签: ruby chef

我是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部分?

2 个答案:

答案 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实例变量的方法,在这种情况下我们会设置它。