我是Ruby和Chef的新人.我一直试图围绕语法进行研究并做一些研究,但我相信大家都知道,除非有人知道术语,否则很难找到你想要的东西.
我已经阅读了Ruby代码块,但是Chef代码块仍然让我困惑.我看到这样的事情:
log "a debug string" do
level :debug
end
Run Code Online (Sandbox Code Playgroud)
这会在日志中添加"调试字符串".从我所看到的情况来看,在我看来它应该表示为:
log do |message|
#some logic
end
Run Code Online (Sandbox Code Playgroud)
Chef将这些视为资源.有人可以帮助解释语法差异并给我一些术语,我可以从中开始教育自己吗?
如果你来自另一种语言(不是Ruby),这种语法可能看起来很奇怪.让我们分解一下.
调用带参数的方法时,在大多数情况下括号是可选的:
foo(bar) 相当于 foo barfoo(bar, baz) 相当于 foo bar, bazRuby代码块可以用花括号({})或do..end块内部包装,可以作为最后一个参数传递给方法(但请注意,没有逗号,如果你使用括号,它会跟在它们之后.一些例子:
foo(bar) { # code here }
foo(bar) do
# code here
end
foo bar do
# code here
end
foo do
# code here
end
Run Code Online (Sandbox Code Playgroud)
在某些情况下,代码块可以接收参数,但在Chef中,资源的块永远不会.仅供参考,其语法为:
foo(bar) do |baz, qux|
baz + qux
end
Run Code Online (Sandbox Code Playgroud)
特别是关于Chef资源,它们的语法通常是:
resource_type(name) do
attribute1 value1
attribute2 value2
end
Run Code Online (Sandbox Code Playgroud)
这意味着,当你说:
log "a debug string" do
level :debug
end
Run Code Online (Sandbox Code Playgroud)
您实际上是在创建属性设置为的log资源.稍后可以参考(在其他资源中)使用.name"a debug string"log[a debug string]
AFAIK,该name属性对于每个Chef资源类型都是必需的,因为它使它独特,并允许您在声明之后调用其上的操作.
附注:对于Chef资源,ruby块通常是可选的.如果您执行以下操作:
directory "/some/path"
Run Code Online (Sandbox Code Playgroud)
Chef将使用其默认属性(其中包括action :create)编译该资源,并尝试使用这些属性创建命名目录.
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |