流程投掷"意外回报"错误

时间:2017-08-15 16:52:25

标签: ruby bash chef

我正在尝试创建一个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关键字,我会得到同样的错误。

2 个答案:

答案 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