我正在尝试创建一个Chef
配方来读取Role
中的属性,其中一个属性将包含需要在服务器上执行的Bash
代码。 / p>
因此,我创建了以下过程:
def proc_test(command)
proc = Proc.new { |command| command_out = Mixlib::ShellOut.new(command) ; command_out.run_command ; return command_out.stdout + command_out.stderr }
proc.call(command)
end
,当这样运行时:
node.set['attributes']['nested_attribute'] = proc_test("hostname")
的工作原理。但如果我试图这样做:
command="hostname"
node.set['attributes']['nested_attribute'] = proc_test(command)
它会抛出此错误:
LocalJumpError
--------------
unexpected return
有人可以帮我这个吗?
如果我使用return
而不是put
关键字,我会得到同样的错误。
答案 0 :(得分:1)
我不明白为什么你认为你需要一个Proc。只需使用普通的shell_out!
辅助方法或bash
资源。
答案 1 :(得分:0)
问题是无法从return
过滤器调用Ruby
。只需跳过return
即可避免错误:
def proc_test(command)
proc = Proc.new do |command|
command_out = Mixlib::ShellOut.new(command)
command_out.run_command
command_out.stdout + command_out.stderr
end
proc.call(command)
end