从字符串动态创建厨师资源

Dynamically create chef resource from string

尝试查看如何最好地从字符串中的文本动态调用一些 ruby 代码。

下面用chef创建一个目录:

directory /tmp/test do
  mode "755"
  owner me
  group me
  action :create
end

如果文本 "directory" 包含在一个变量中,我想用它来调用相同的代码而无需明确的 if 语句。我对 ruby/chef 了解不够,无法执行此操作。

当前方法:

if action == "directory"
  directory /tmp/test do
    ...
  end
end

期望的方法(某种效果):

"#{action}" /tmp/test do
  ...
end
Chef DSL 中的

directory 是一个方法调用。您可以使用 send 动态调用 Ruby 中的方法。在这种情况下,它看起来像:

send(action, '/tmp/test') do
  ...
end

虽然在大多数情况下确实不推荐这样做,但它会迅速导致代码非常不可读,而且我不确定您会遇到什么情况,其中的 ... 实际上是可以互换的。请记住,您的代码首先应该是可读的,如果它们不太可能经常更改,那么重复也可以。