加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby代码块和Chef

发布时间:2020-12-16 19:35:04 所属栏目:百科 来源:网络整理
导读:我是 Ruby和Chef的新手.我一直试图绕过语法并做一些研究,但我相信大家都知道,除非你知道术语,否则很难找到你想要的东西. 我已经阅读了Ruby代码块,但是Chef代码块仍然让我困惑.我看到这样的事情: log "a debug string" do level :debugend 这会在日志中添加
我是 Ruby和Chef的新手.我一直试图绕过语法并做一些研究,但我相信大家都知道,除非你知道术语,否则很难找到你想要的东西.

我已经阅读了Ruby代码块,但是Chef代码块仍然让我困惑.我看到这样的事情:

log "a debug string" do
    level :debug
end

这会在日志中添加“调试字符串”.从我所看到的情况来看,在我看来它应该表示为:

log do |message|
    #some logic
end

Chef将这些视为资源.有人可以帮助解释语法差异并给我一些术语,我可以从中开始教育自己吗?

解决方法

如果你来自另一种语言(不是Ruby),这种语法可能看起来很奇怪.让我们分解一下.

调用带参数的方法时,在大多数情况下括号是可选的:

> foo(bar)相当于foo bar
> foo(bar,baz)相当于foo bar,baz

Ruby代码块可以用大括号({})或do..end块包装,可以作为最后一个参数传递给方法(但请注意,没有逗号,如果你使用括号,它会去在他们之后.一些例子:

foo(bar) { # code here }

foo(bar) do
  # code here
end

foo bar do
  # code here
end

foo do
  # code here
end

在某些情况下,代码块可以接收参数,但在Chef中,资源的块永远不会.仅供参考,其语法为:

foo(bar) do |baz,qux|
  baz + qux
end

特别是关于Chef资源,它们的语法通常是:

resource_type(name) do
  attribute1 value1
  attribute2 value2
end

这意味着,当你说:

log "a debug string" do
  level :debug
end

您实际上是在创建一个日志资源,其name属性设置为“调试字符串”.稍后可以使用log [调试字符串]来引用它(例如,在其他资源中).

AFAIK,name属性对于每个Chef资源类型都是必需的,因为它使它独特,并允许您在声明之后调用其上的操作.

附注:对于Chef资源,ruby块通常是可选的.如果您执行以下操作:

directory "/some/path"

Chef将使用其默认属性(其中包括action:create)编译该资源,并尝试使用这些属性创建命名目录.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读