从字符串

时间:2015-11-27 17:16:20

标签: ruby dynamic resources chef

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

以下内容使用chef创建一个目录:

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

如果文字"目录"包含在变量中,我想使用它来调用相同的代码而不使用expicit if语句。我不太了解红宝石/厨师这么做。

目前的做法:

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

理想的方法(产生效果):

"#{action}" /tmp/test do
  ...
end

1 个答案:

答案 0 :(得分:3)

Chef DSL中的

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

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

虽然大多数情况下都不建议这样做,但它会很快导致代码非常难以理解,而且我不确定在那里...实际可以互换的情况。请记住,您的代码应该是首先可读的,并且如果它们不经常发生变化,重复的事情就可以了。