我正在尝试创建一个Chef
配方,该配方将从Role
中读取属性,其中一个属性将包含需要在服务器上执行Bash
代码。
因此,我创建了以下过程:
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
,则会出现相同的错误。
我不明白你为什么认为你需要一个Proc。只需使用正常的shell_out!
帮助程序方法或bash
资源。
问题是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