从字符串动态创建厨师资源
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
虽然在大多数情况下确实不推荐这样做,但它会迅速导致代码非常不可读,而且我不确定您会遇到什么情况,其中的 ...
实际上是可以互换的。请记住,您的代码首先应该是可读的,如果它们不太可能经常更改,那么重复也可以。
尝试查看如何最好地从字符串中的文本动态调用一些 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
directory
是一个方法调用。您可以使用 send
动态调用 Ruby 中的方法。在这种情况下,它看起来像:
send(action, '/tmp/test') do
...
end
虽然在大多数情况下确实不推荐这样做,但它会迅速导致代码非常不可读,而且我不确定您会遇到什么情况,其中的 ...
实际上是可以互换的。请记住,您的代码首先应该是可读的,如果它们不太可能经常更改,那么重复也可以。